clearing messages on new contact

This commit is contained in:
slawk0
2024-10-19 13:35:54 +02:00
parent d20f38e454
commit 53421bc7ca
3 changed files with 32 additions and 14 deletions

View File

@@ -5,29 +5,33 @@ import { Dispatch, SetStateAction, useEffect } from "react";
type Input = {
contact: string;
};
type ChatMessages = {
sender: string;
message: string;
recipient: string;
message_id: number;
timestamp: string;
};
interface ContactInputProps {
contact: string;
setContact: Dispatch<SetStateAction<string>>;
setMessages: React.Dispatch<React.SetStateAction<ChatMessages[]>>;
}
function ContactForm({ contact, setContact }: ContactInputProps) {
function ContactForm({ contact, setContact, setMessages }: ContactInputProps) {
const { register, handleSubmit, reset } = useForm<Input>();
let storedContact: string | null = "";
useEffect(() => {
let isMounted = true;
storedContact = storedContact = localStorage.getItem("contact");
if (storedContact) {
setContact(storedContact);
sendRequestHistorical(storedContact);
}
return () => {
isMounted = false;
};
}, [setContact]);
const submitContact: SubmitHandler<Input> = (data) => {
setMessages([]);
sendRequestHistorical(data.contact);
localStorage.setItem("contact", data.contact);
setContact(data.contact);

View File

@@ -1,6 +1,5 @@
import { useEffect, useRef, useState } from "react";
import { useEffect, useRef } from "react";
import { socket } from "../../socket/socket.tsx";
type ChatMessages = {
sender: string;
message: string;
@@ -8,9 +7,12 @@ type ChatMessages = {
message_id: number;
timestamp: string;
};
type MessagesAreaProps = {
messages: ChatMessages[];
setMessages: React.Dispatch<React.SetStateAction<ChatMessages[]>>;
};
function MessagesArea() {
const [messages, setMessages] = useState<ChatMessages[]>([]);
function MessagesArea({ messages, setMessages }: MessagesAreaProps) {
const messagesEndRef = useRef<HTMLDivElement>(null);
useEffect(() => {
@@ -42,7 +44,7 @@ function MessagesArea() {
}, []);
useEffect(() => {
messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
messagesEndRef.current?.scrollIntoView();
}, [messages]);
const messageList = messages.map((msg) => (

View File

@@ -4,16 +4,28 @@ import UserProfile from "../components/chat/UserProfile.tsx";
import ContactForm from "../components/chat/ContactForm.tsx";
import MessagesArea from "../components/chat/MessagesArea.tsx";
import { useState } from "react";
type ChatMessages = {
sender: string;
message: string;
recipient: string;
message_id: number;
timestamp: string;
};
function Chat() {
const [contact, setContact] = useState<string>("");
const [messages, setMessages] = useState<ChatMessages[]>([]);
return (
<>
<div className="text-white flex h-screen">
{/*Sidebar*/}
<div className="h-screen bg-[#1E1E1E] flex flex-col">
{/*Contact input*/}
<ContactForm contact={contact} setContact={setContact} />
<ContactForm
contact={contact}
setContact={setContact}
setMessages={setMessages}
/>
{/*Contact list*/}
<div className="flex-grow overflow-y-auto w-64">
<ul className="ml-2">
@@ -37,9 +49,9 @@ function Chat() {
</div>
<hr className="flex-shrink-0" />
<div className="flex-grow overflow-x-hidden overflow-y-auto m-2">
<MessagesArea />
<MessagesArea messages={messages} setMessages={setMessages} />
</div>
<div className="flex-shrink-0 mb-2">
<div className="flex-shrink-0 mb-2 mt-0">
{contact && contact.length >= 4 ? (
<MessageForm contact={contact} />
) : null}