import { useState, MouseEvent, ChangeEvent, FC } from "react"; import toast from "react-hot-toast"; import Modal from "../Modal"; import Button from "../styled/Button"; import Input from "../styled/Input"; import Channel from "../Channel"; import User from "../User"; import Reply from "../Message/Reply"; import useForwardMessage from "../../hook/useForwardMessage"; import useSendMessage from "../../hook/useSendMessage"; import useFilteredChannels from "../../hook/useFilteredChannels"; import useFilteredUsers from "../../hook/useFilteredUsers"; import CloseIcon from "../../../assets/icons/close.circle.svg"; import StyledCheckbox from "../styled/Checkbox"; import { useTranslation } from "react-i18next"; interface IProps { mids: number[]; closeModal: () => void; } const ForwardModal: FC = ({ mids, closeModal }) => { const { t } = useTranslation(); const [appendText, setAppendText] = useState(""); const { sendMessages } = useSendMessage(); const { forwardMessage, forwarding } = useForwardMessage(); const [selectedMembers, setSelectedMembers] = useState([]); const [selectedChannels, setSelectedChannels] = useState([]); const { channels, // input: channelInput, updateInput: updateChannelInput } = useFilteredChannels(); const { users, input, updateInput } = useFilteredUsers(); const toggleCheck = ({ currentTarget }: MouseEvent) => { const { id = 0, type = "user" } = currentTarget.dataset; const ids = type == "user" ? selectedMembers : selectedChannels; const updateState = type == "user" ? setSelectedMembers : setSelectedChannels; let tmp = ids.includes(+id) ? ids.filter((m) => m != id) : [...ids, +id]; updateState(tmp); }; const updateAppendText = (evt: ChangeEvent) => { setAppendText(evt.target.value); }; const handleForward = async () => { await forwardMessage({ mids: mids.map((mid) => +mid), users: selectedMembers, channels: selectedChannels }); if (appendText.trim()) { await sendMessages({ content: appendText, users: selectedMembers, channels: selectedChannels }); } toast.success("Forward Message Successfully"); closeModal(); }; const removeSelected = (id: number, from = "user") => { if (from == "user") { setSelectedMembers(selectedMembers.filter((m) => m != id)); } else { setSelectedChannels(selectedChannels.filter((cid) => cid != id)); } }; const handleSearchChange = (evt: ChangeEvent) => { const newVal = evt.target.value; updateChannelInput(newVal); updateInput(newVal); }; let selectedCount = selectedMembers.length + selectedChannels.length; const sendButtonDisabled = (selectedChannels.length == 0 && selectedMembers.length == 0) || forwarding; return (
    {channels && channels.map((c) => { const { gid } = c; const checked = selectedChannels.includes(gid); return (
  • ); })} {users && users.map((u) => { const { uid } = u; const checked = selectedMembers.includes(uid); return (
  • ); })}

Send To {selectedCount}

    {selectedChannels.map((cid) => { return (
  • ); })} {selectedMembers.map((uid) => { return (
  • ); })}
{mids.map((mid) => ( ))}
); }; export default ForwardModal;