import { Button, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, } from "@chakra-ui/react"; import { useTranslation } from "next-i18next"; import { useEffect, useState } from "react"; import { LabelInputGroup } from "src/components/Messages/LabelInputGroup"; import { get, post } from "src/lib/api"; import { Label } from "src/types/Tasks"; import useSWRImmutable from "swr/immutable"; import useSWRMutation from "swr/mutation"; interface LabelMessagePopupProps { messageId: string; show: boolean; onClose: () => void; } interface ValidLabelsResponse { valid_labels: Label[]; } export const LabelMessagePopup = ({ messageId, show, onClose }: LabelMessagePopupProps) => { const { t } = useTranslation(); const { data: response } = useSWRImmutable("/api/valid_labels", get); const valid_labels = response?.valid_labels ?? []; const [values, setValues] = useState(new Array(valid_labels.length).fill(null)); useEffect(() => { setValues(new Array(valid_labels.length).fill(null)); }, [messageId, valid_labels.length]); const { trigger: setLabels } = useSWRMutation("/api/set_label", post); const submit = () => { const label_map: Map = new Map(); console.assert(valid_labels.length === values.length); values.forEach((value, idx) => { if (value !== null) { label_map.set(valid_labels[idx].name, value); } }); setLabels({ message_id: messageId, label_map: Object.fromEntries(label_map), }); setValues(null); onClose(); }; return ( {t("message:label_title")} ); };