import Documents from "@Front/Api/LeCoffreApi/Notary/Documents/Documents"; import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; import Button, { EButtonSize, EButtonstyletype, EButtonVariant } from "@Front/Components/DesignSystem/Button"; import CheckBox from "@Front/Components/DesignSystem/CheckBox"; import Form from "@Front/Components/DesignSystem/Form"; import Typography, { ETypo, ETypoColor } from "@Front/Components/DesignSystem/Typography"; import BackArrow from "@Front/Components/Elements/BackArrow"; import Module from "@Front/Config/Module"; import { PlusIcon } from "@heroicons/react/24/outline"; import { OfficeFolder } from "le-coffre-resources/dist/Notary"; import { useRouter } from "next/router"; import React, { useCallback, useEffect, useState } from "react"; import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage"; import classes from "./classes.module.scss"; import ParameterDocuments from "./ParameterDocuments"; import { IOption } from "@Front/Components/DesignSystem/Form/SelectFieldOld"; import backgroundImage from "@Assets/images/background_refonte.svg"; export default function AskDocuments() { const router = useRouter(); let { folderUid, customerUid } = router.query; const [isCreateDocumentModalVisible, setIsCreateDocumentModalVisible] = useState(false); const [documentTypes, setDocumentTypes] = useState([]); const [folder, setFolder] = useState(null); const closeModal = () => setIsCreateDocumentModalVisible(false); const openModal = () => setIsCreateDocumentModalVisible(true); const onFormSubmit = useCallback( async ( e: React.FormEvent | null, values: { [key: string]: any; }, ) => { try { const documentAsked: [] = values["document_types"] as []; for (let i = 0; i < documentAsked.length; i++) { await Documents.getInstance().post({ folder: { uid: folderUid, }, depositor: { uid: customerUid, }, document_type: { uid: documentAsked[i], }, }); } router.push( Module.getInstance() .get() .modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", folderUid as string), ); } catch (e) { console.error(e); } }, [customerUid, folderUid, router], ); const getAvailableDocuments = useCallback( async (folder: OfficeFolder): Promise => { // Getting already asked documents UIDs in an array const userDocumentTypesUids = folder .documents!.filter((document) => document.depositor!.uid! === customerUid!) .map((document) => { return document.document_type!.uid!; }); // If those UIDs are already asked, filter them to not show them in the list and only // show the documents that are not asked yet const documentTypes = folder.deed!.document_types!.filter((documentType) => { if (userDocumentTypesUids.includes(documentType!.uid!)) return false; return true; }); // If there is none document type available, return an empty array if (!documentTypes) return []; // Else, return an array document types formatted as IOPtions const documentTypesOptions: IOption[] = documentTypes.map((documentType) => { return { label: documentType!.name!, value: documentType!.uid!, description: documentType!.private_description!, }; }); documentTypesOptions.sort((a, b) => (a.label > b.label ? 1 : -1)); return documentTypesOptions; }, [customerUid], ); const loadData = useCallback(async () => { try { const folder = await Folders.getInstance().getByUid(folderUid as string, { q: { deed: { include: { document_types: true, }, }, office: true, documents: { include: { depositor: true, document_type: true, }, }, }, }); if (!folder) return; setFolder(folder); setDocumentTypes(await getAvailableDocuments(folder)); } catch (e) { console.error(e); } }, [folderUid, getAvailableDocuments]); useEffect(() => { loadData(); }, [loadData]); const backUrl = Module.getInstance() .get() .modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", folderUid as string); return (
Demander des documents
{documentTypes.map((documentType) => { if (documentType.description && documentType.description.length > 1) { return ( ); } return ; })}
{folder && ( )}
); }