import React, { useState, useEffect, useRef } from "react"; import { connect } from "react-redux"; import { useDropzone } from "react-dropzone"; import { Link } from "react-router-dom"; import Button from "react-bootstrap/esm/Button"; import { CSearchAvatar } from "../components/Avatar"; import { actionSetChatInfo } from "../actions"; import { actionFindUsers } from "../actions"; import { history } from "../App"; import { CChatAvatar } from "../components/Avatar"; const ChatPage = ({ onChat, chat, myProfile, create, onGetUser, foundUsers, }) => { const useDebounce = (cb, depArray, delay, onAdd) => { let timeoutRef = useRef(); useEffect(() => { clearInterval(timeoutRef.current); timeoutRef.current === undefined ? (timeoutRef.current = -1) : (timeoutRef.current = setTimeout(cb, delay)); }, depArray); }; const [login, setLogin] = useState(); useDebounce(() => onGetUser(login), [login], 2000); const [open, setOpen] = useState(false); const [img, setImg] = useState(null); const [title, setTitle] = useState(chat?.title || ""); const [members, setMembers] = useState(chat?.members || [myProfile]); function checkMembers(members, user) { for (var i = 0; i < members.length; i++) { if (members[i]?._id === user?._id) { return false; } } return onAddMember(user); } const onAddMember = (newMember) => { setMembers([...members, newMember]); }; const onDelMember = (i) => { setMembers( members.filter((el, index) => members[index]._id !== members[i]._id) ); }; useEffect(() => { setTitle(chat?.title || ""); setImg(null); setMembers(chat?.members || [myProfile]); }, [open]); const { getRootProps, getInputProps, isDragActive } = useDropzone({ accept: "image/*", maxFiles: 1, onDrop: (acceptedFiles) => { setImg(acceptedFiles[0]); }, }); function prepareMembers(members) { const newMembers = []; for (const member of members) { if (checkMembers(newMembers, member)) { if (member._id !== myProfile?._id) { newMembers.push({ _id: member._id }); } } else { newMembers.push({ _id: member._id }); } } newMembers.shift(); return newMembers; } return (
{isDragActive ? (

Drop the files here ...

) : ( )}
{ setTitle(e.target.value); }} />
setLogin(e.target.value) } />
{foundUsers ? foundUsers.map((user, i) => { return (
{user?.avatar !== null ? ( ) : (
)}
{user?.login ? user.login : "anon"}
); }) : null}
Back to all chats
{members.map((login, i) => { return ( <>
{login?.avatar !== null ? ( ) : (
)}
{login?.login ? login.login : "anon"}
); })}
); }; export const CNewChatPage = connect( (state) => ({ myProfile: state.promise.myProfile?.payload || {}, foundUsers: state?.promise?.findUsers?.payload, }), { onChat: actionSetChatInfo, onGetUser: actionFindUsers } )(ChatPage);