import { useState, useEffect, FC, MouseEvent, ChangeEvent } from "react"; import toast from "react-hot-toast"; import Button from "../styled/Button"; import Input from "../styled/Input"; import User from "../User"; import StyledCheckbox from "../styled/Checkbox"; import { useAddMembersMutation } from "../../../app/services/channel"; import CloseIcon from "../../../assets/icons/close.svg"; import useFilteredUsers from "../../hook/useFilteredUsers"; import { useAppSelector } from "../../../app/store"; interface Props { cid?: number; closeModal: () => void; } const AddMembers: FC = ({ cid = 0, closeModal }) => { const [addMembers, { isLoading: isAdding, isSuccess }] = useAddMembersMutation(); const [selects, setSelects] = useState([]); const { channel, userData } = useAppSelector((store) => { return { channel: store.channels.byId[cid], userData: store.users.byId }; }); useEffect(() => { if (isSuccess) { toast.success("Add members successfully!"); closeModal(); } }, [isSuccess]); const handleAddMembers = () => { addMembers({ id: cid, members: selects }); }; const { input, updateInput, users = [] } = useFilteredUsers(); const toggleCheckMember = ({ currentTarget }: MouseEvent) => { const uid = Number(currentTarget.dataset.uid); if (selects.includes(uid)) { setSelects((prevs) => { return prevs.filter((id) => id != uid); }); } else { setSelects([...selects, +uid]); } }; const handleFilterInput = (evt: ChangeEvent) => { updateInput(evt.target.value); }; if (!channel) return null; const { members: uids } = channel; const userIds = users.map((u) => u?.uid || 0); return (
    {selects.map((uid) => { return (
  • {userData[uid]?.name}
  • ); })}
    {userIds.map((uid) => { const added = uids.includes(uid); return (
  • ); })}
); }; export default AddMembers;