import Confirm from "@Front/Components/DesignSystem/OldModal/Confirm"; import classes from "./classes.module.scss"; import TextField from "@Front/Components/DesignSystem/Form/TextField"; import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField"; import { ChangeEvent, useCallback, useEffect, useState } from "react"; import DocumentTypes from "@Front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes"; import { DocumentType, OfficeFolder } from "le-coffre-resources/dist/Notary"; import Deeds from "@Front/Api/LeCoffreApi/Notary/Deeds/Deeds"; import MultiSelect from "@Front/Components/DesignSystem/MultiSelect"; import { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; import { MultiValue } from "react-select"; import RadioBox from "@Front/Components/DesignSystem/RadioBox"; type IProps = { isCreateDocumentModalVisible: boolean; closeModal: () => void; folder: OfficeFolder; }; export default function ParameterDocuments(props: IProps) { const [visibleDescription, setVisibleDescription] = useState(""); const [documentName, setDocumentName] = useState(""); const [addOrEditDocument, setAddOrEditDocument] = useState<"add" | "edit">("edit"); const [selectedDocuments, setSelectedDocuments] = useState([]); const [formattedOptions, setFormattedOptions] = useState([]); const getAvailableDocuments = useCallback(async () => { const documents = await DocumentTypes.getInstance().get({}); const formattedOptions: IOption[] = documents .filter((document) => { return !props.folder.deed?.document_types?.some((documentType) => documentType.uid === document.uid); }) .map((document) => { return { label: document.name, value: document.uid, }; }); formattedOptions.sort((a, b) => (a.label > b.label ? 1 : -1)); setFormattedOptions(formattedOptions); }, [props.folder.deed?.document_types]); const onVisibleDescriptionChange = (event: ChangeEvent) => { setVisibleDescription(event.target.value); }; const onDocumentNameChange = (event: ChangeEvent) => { setDocumentName(event.target.value); }; const onDocumentChangeHandler = useCallback((values: MultiValue) => { setSelectedDocuments(values as IOption[]); }, []); const handleClose = useCallback(() => { setFormattedOptions([]); setSelectedDocuments([]); setAddOrEditDocument("edit"); setVisibleDescription(""); setDocumentName(""); props.closeModal(); }, [props]); const addDocument = useCallback(async () => { if (addOrEditDocument === "add") { try { const documentType = await DocumentTypes.getInstance().post({ name: documentName, private_description: visibleDescription, office: { uid: props.folder.office!.uid!, }, public_description: visibleDescription, }); const oldDocumentsType = props.folder.deed?.document_types!; await Deeds.getInstance().put(props.folder.deed?.uid!, { document_types: [...oldDocumentsType, documentType], }); //await this.loadData(); handleClose(); } catch (e) { console.error(e); } } else { try { const oldDocumentsType = props.folder.deed?.document_types!; await Deeds.getInstance().put(props.folder.deed?.uid!, { document_types: [ ...oldDocumentsType, ...selectedDocuments.map((document) => DocumentType.hydrate({ uid: document.value as string })), ], }); //await this.loadData(); handleClose(); } catch (e) { console.error(e); } } }, [addOrEditDocument, documentName, handleClose, props, selectedDocuments, visibleDescription]); const selectEditMode = () => { setAddOrEditDocument("edit"); }; const selectAddMode = () => { setAddOrEditDocument("add"); }; useEffect(() => { getAvailableDocuments(); }, [getAvailableDocuments, props.folder]); return (
{addOrEditDocument === "add" && ( <> )} {addOrEditDocument === "edit" && ( )}
); }