feat(MessageList, Message): Start /getting-start page

Took 4 hours 41 minutes
This commit is contained in:
Lucàs
2023-05-03 01:56:51 +02:00
parent 3ca0062dfa
commit a9ca7bd79b
6 changed files with 3784 additions and 3655 deletions
+12 -12
View File
@@ -1,18 +1,18 @@
import {Box, Flex, Text} from '@chakra-ui/react';
import type {Message as MessageType, User} from "@prisma/client"
import {Flex, Text} from '@chakra-ui/react';
import type {Message as MessageType, User} from '@prisma/client';
type Props = {
user: User
align: "left" | 'right'
message: MessageType
}
export default function Message(props: Props) {
const {message, user} = props;
const Message = ({message, align}: Props) => (
<Flex justifyContent={align}>
<Text w={'fit-content'} bg={'purple.500'} borderRadius={'full'}
color={'white'} px={'10px'} py={'5px'}>
{message.text}
</Text>
</Flex>
);
return (
<Flex justifyContent={user.id === message.UserID ? 'right' : 'left'}>
<Text w={'fit-content'} bg={'purple.500'} borderRadius={'full'} color={'white'} px={"10px"} py={"5px"}>{message.text}</Text>
</Flex>
);
}
export default Message;
+11 -9
View File
@@ -1,4 +1,4 @@
import type {Message as MessageType, User} from "@prisma/client";
import type {Message as MessageType, User} from '@prisma/client';
import Message from '@/components/chat/Message';
import {Box, Flex} from '@chakra-ui/react';
@@ -7,12 +7,14 @@ type Props = {
messages: MessageType[]
}
export default function MessageList(props: Props) {
const {messages, user} = props;
const MessageList = ({messages, user}: Props) => (
<Flex direction={'column'} gap={1}>
{messages.map((message, index) =>
<Message key={index}
align={user.id === message.UserID ? 'right' : 'left'}
message={message}/>
)}
</Flex>
);
return (
<Flex direction={'column'} gap={1}>
{messages.map((message, index) => <Message key={index} user={user} message={message}/>)}
</Flex>
);
}
export default MessageList;
+119
View File
@@ -0,0 +1,119 @@
import {useEffect, useState} from 'react';
import {
Gender,
Message as MessageType, Passion,
User as UserType,
} from '@prisma/client';
import MessageList from '@/components/chat/MessageList';
import {Button, ButtonGroup, Input, Slider} from '@chakra-ui/react';
type Props = {
user: UserType
}
type FormInputs = {
userGender: Gender
genderResearch: Gender,
ages: [number, number],
birth: Date,
passions: Passion[]
}
export default function GettingStartForm({user}: Props) {
const steps = [
{
question: 'Salut, je suis Cupibot. Il me manque quelques détails avant de terminer ton inscription. C\'est quoi ton sexe ?',
component: ( // TODO Optimiser ça
<ButtonGroup>
<Button onClick={() => {
setFormInputs({...formInputs, userGender: Gender.MALE});
nextStep();
}}>Homme</Button>
<Button onClick={() => {
setFormInputs({...formInputs, userGender: Gender.FEMALE});
nextStep();
}}>Femme</Button>
<Button onClick={() => {
setFormInputs({...formInputs, userGender: Gender.OTHER});
nextStep();
}}>Autre</Button>
</ButtonGroup>
),
},
{
question: 'Ok et tu es attiré par quel genre ?',
component: ( // TODO Optimiser ça
<ButtonGroup>
<Button onClick={() => {
setFormInputs({...formInputs, genderResearch: Gender.MALE});
nextStep();
}}>Homme</Button>
<Button onClick={() => {
setFormInputs({...formInputs, genderResearch: Gender.FEMALE});
nextStep();
}}>Femme</Button>
<Button onClick={() => {
setFormInputs({...formInputs, genderResearch: Gender.OTHER});
nextStep();
}}>Autre</Button>
</ButtonGroup>),
},
{
question: 'Ça marche, c\'est quoi la tranche d\'âge que tu recherche ?',
component: (
<>
<Slider/>
<Button onClick={() => nextStep()}>Suite</Button>
</>
), // TODO
},
{
question: 'D\'ailleurs je ne t\'ai pas demandé, quand est-ce que tu est né ?',
component: (
<>
<Input type={'date'}/>
<Button onClick={() => nextStep()}>Suite</Button>
</>
), // TODO
},
{
question: 'T\'as des passions dans la vie ? (Choisis-en 3 minimum)',
component: (
<>
Passion selector
<Button onClick={() => nextStep()}>Suite</Button>
</>), // TODO
},
{
question: 'Ok j\'ai toutes les infos d\'on j\'ai besoin, je vais tout faire pour te faire trouver la personne qui te correspond!',
component: (<Button onClick={() => {/*handleSubmit()*/}}>Suite</Button>), // TODO
},
];
const [progress, setProgress] = useState(0);
const [messages, setMessages] = useState<MessageType[]>([
{text: steps[0].question} as MessageType,
]);
const [formInputs, setFormInputs] = useState<FormInputs>({
userGender: Gender.UNKNOWN,
genderResearch: Gender.UNKNOWN,
ages: [18, 25],
birth: new Date(),
passions: [],
});
const nextStep = () => {
const newMessage = {text: steps[progress + 1].question} as MessageType;
setMessages([...messages, newMessage]);
setProgress(progress + 1);
};
return (
<>
<MessageList user={user} messages={messages}/>
{steps[progress].component}
</>
);
}
@@ -1,13 +1,4 @@
import {
Card,
Flex,
Box,
Image,
Text,
Spacer,
VStack,
Divider,
} from "@chakra-ui/react";
import {Card, Flex, Box, Image, Text, Spacer, Divider} from "@chakra-ui/react";
import { useRouter } from "next/router";
import { AiFillMessage } from "react-icons/ai";
+17
View File
@@ -0,0 +1,17 @@
import Head from 'next/head';
import {websiteName} from '@/lib/constants';
import {useSession} from 'next-auth/react';
import LoadingPage from '@/components/LoadingPage';
import GettingStartForm from '@/components/form/GettingStartForm';
export default function GettingStart() {
const {data: session, status} = useSession({required: true})
if (status === "loading") return <LoadingPage/>
return (
<>
<Head><title>{websiteName}</title></Head>
<GettingStartForm user={session.user}/>
</>
)
}
+3624 -3624
View File
File diff suppressed because it is too large Load Diff