load messages and update when sending messages
This commit is contained in:
parent
80968e2b44
commit
0baa655a66
|
|
@ -3,7 +3,7 @@ import Avatar from '@components/Avatar';
|
||||||
import PopupMessage from './PopupMessage';
|
import PopupMessage from './PopupMessage';
|
||||||
|
|
||||||
const Image = ({ image }: {image: string}) => {
|
const Image = ({ image }: {image: string}) => {
|
||||||
if (image === '') {
|
if (image === '' || image === null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ const Message = ({ text = '', user, date, image = '' }: any) => {
|
||||||
const id = '1'; // replace with real id in the future
|
const id = '1'; // replace with real id in the future
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="flex bg-grey-dark rounded-xl max-w-3xl p-5 gap-5 shadow-md shadow-grey-dark">
|
<div className="flex bg-grey-dark rounded-xl w-full max-w-3xl p-5 gap-5 shadow-md shadow-grey-dark">
|
||||||
{user && <Avatar user={user} />}
|
{user && <Avatar user={user} />}
|
||||||
<div className="flex flex-col gap-2 relative">
|
<div className="flex flex-col gap-2 relative">
|
||||||
<div className="flex justify-between">
|
<div className="flex justify-between">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
import { useQuery } from "@tanstack/react-query";
|
||||||
|
import { Cookies } from "react-cookie";
|
||||||
|
import Message from "./Message";
|
||||||
|
|
||||||
|
const getMessages = async () => {
|
||||||
|
const token = new Cookies().get("token");
|
||||||
|
const response = await fetch("/api/posts", {
|
||||||
|
method: "GET",
|
||||||
|
mode: "cors",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return response.json();
|
||||||
|
};
|
||||||
|
|
||||||
|
const MessageWrapper = () => {
|
||||||
|
const messages = useQuery(["messages"], getMessages, {
|
||||||
|
onSuccess: (data) => {
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error(error);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const user = {
|
||||||
|
firstName: 'Guillaume',
|
||||||
|
lastName: 'Dorce',
|
||||||
|
email: 'guillaume.dorce@bm-services.com',
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<main className="messages-wrapper flex flex-col p-4 gap-4 overflow-scroll w-full max-w-3xl">
|
||||||
|
{messages.isLoading ? '' : messages.data?.map((message: any) => (
|
||||||
|
<Message user={message.author} text={message.content} image={message.image} date={message.createdAt}/>
|
||||||
|
))}
|
||||||
|
</main>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MessageWrapper;
|
||||||
|
|
@ -1,11 +1,40 @@
|
||||||
import { useMutation, useQuery } from '@tanstack/react-query';
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
import { Cookies } from 'react-cookie';
|
||||||
|
|
||||||
|
const sendMessage = async (message: string) => {
|
||||||
|
const token = new Cookies().get('token');
|
||||||
|
const response = await fetch('/api/posts/new', {
|
||||||
|
method: 'POST',
|
||||||
|
mode: 'cors',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({ content: message }),
|
||||||
|
});
|
||||||
|
return response.json();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const NewMessage = () => {
|
const NewMessage = () => {
|
||||||
const [message, setMessage] = useState('');
|
const [message, setMessage] = useState('');
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
const { mutate: send } = useMutation(sendMessage, {
|
||||||
|
onSuccess: (data) => {
|
||||||
|
console.log(data);
|
||||||
|
queryClient.invalidateQueries(['messages']);
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error(error);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const handleSubmit = (e: React.FormEvent) => {
|
const handleSubmit = (e: React.FormEvent) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
send(message);
|
||||||
setMessage('');
|
setMessage('');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,37 +1,12 @@
|
||||||
import AppHeader from '@components/AppHeader';
|
import AppHeader from '@components/AppHeader';
|
||||||
import Message from '@components/Message';
|
import MessageWrapper from '@components/MessageWrapper';
|
||||||
import NewMessage from '@components/NewMessage';
|
import NewMessage from '@components/NewMessage';
|
||||||
|
|
||||||
const Home = () => {
|
const Home = () => {
|
||||||
const user = {
|
|
||||||
firstName: 'Guillaume',
|
|
||||||
lastName: 'Dorce',
|
|
||||||
email: 'guillaume.dorce@bm-services.com',
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-full max-h-full bg-grey flex flex-col items-center">
|
<div className="min-h-full max-h-full bg-grey flex flex-col items-center">
|
||||||
<AppHeader />
|
<AppHeader />
|
||||||
<main className="messages-wrapper flex flex-col-reverse p-4 gap-4 overflow-scroll">
|
<MessageWrapper />
|
||||||
<Message
|
|
||||||
user={user}
|
|
||||||
text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec auctor, nisl eget
|
|
||||||
aliquam tincidunt, nisl nisl aliquet nisl, eget aliquam nisl nisl sit amet
|
|
||||||
mauris. Donec auctor, nisl eget aliquam tincidunt, nisl nisl aliquet nisl, eget
|
|
||||||
aliquam nisl nisl sit amet mauris. Donec auctor, nisl eget aliquam tincidunt,
|
|
||||||
nisl nisl aliquet nisl, eget aliquam nisl nisl sit amet mauris."
|
|
||||||
date="14 août 2022 19:00"
|
|
||||||
/>
|
|
||||||
<Message
|
|
||||||
user={user}
|
|
||||||
text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec auctor, nisl eget
|
|
||||||
aliquam tincidunt, nisl nisl aliquet nisl, eget aliquam nisl nisl sit amet
|
|
||||||
mauris."
|
|
||||||
date="14 août 2022 19:00"
|
|
||||||
image="https://picsum.photos/800/600"
|
|
||||||
/>
|
|
||||||
<Message user={user} date="14 août 2022 19:00" image="https://picsum.photos/1200/800" />
|
|
||||||
</main>
|
|
||||||
<NewMessage />
|
<NewMessage />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue