"use client"; import Documents, { IGetDocumentsparams } from "@Front/Api/LeCoffreApi/Customer/Documents/Documents"; import Typography, { ETypo, ETypoColor } from "@Front/Components/DesignSystem/Typography"; import Customer, { Document, DocumentType } from "le-coffre-resources/dist/Customer"; import React, { useCallback, useEffect, useMemo, useState } from "react"; import { DocumentNotary, type OfficeFolder as OfficeFolderNotary } from "le-coffre-resources/dist/Notary"; import classes from "./classes.module.scss"; import { useRouter } from "next/router"; import JwtService, { ICustomerJwtPayload } from "@Front/Services/JwtService/JwtService"; import Folders from "@Front/Api/LeCoffreApi/Customer/Folders/Folders"; import Tag, { ETagColor } from "@Front/Components/DesignSystem/Tag"; import DefaultCustomerDashboard from "@Front/Components/LayoutTemplates/DefaultCustomerDashboard"; import Button, { EButtonstyletype, EButtonVariant } from "@Front/Components/DesignSystem/Button"; import DepositDocumentComponent from "./DepositDocumentComponent"; import Module from "@Front/Config/Module"; import Separator, { ESeperatorColor, ESeperatorDirection } from "@Front/Components/DesignSystem/Separator"; import NotificationBox from "@Front/Components/DesignSystem/NotificationBox"; import ContactBox from "./ContactBox"; import DocumentsNotary from "@Front/Api/LeCoffreApi/Customer/DocumentsNotary/DocumentsNotary"; import { EDocumentNotaryStatus } from "le-coffre-resources/dist/Notary/DocumentNotary"; import DepositOtherDocument from "@Front/Components/DesignSystem/DepositOtherDocument"; type IProps = {}; export default function ClientDashboard(props: IProps) { const router = useRouter(); let { folderUid } = router.query; const [documents, setDocuments] = useState(null); const [customer, setCustomer] = useState(null); const [folder, setFolder] = useState(null); const [documentsNotary, setDocumentsNotary] = useState([]); const [isAddDocumentModalVisible, setIsAddDocumentModalVisible] = useState(false); const fetchFolderAndCustomer = useCallback(async () => { let jwt: ICustomerJwtPayload | undefined; if (typeof document !== "undefined") { jwt = JwtService.getInstance().decodeCustomerJwt(); } const folder = await Folders.getInstance().getByUid(folderUid as string, { q: { office: true, customers: true, notes: { include: { customer: true, }, }, stakeholders: { include: { contact: true, office_role: true, }, }, deed: { include: { deed_type: true, }, }, }, }); const customer = folder?.customers?.find((customer) => customer.contact?.email === jwt?.email); if (!customer) throw new Error("Customer not found"); setFolder(folder); setCustomer(customer); return { folder, customer }; }, [folderUid]); const fetchDocuments = useCallback( (customerUid: string | undefined) => { const query: IGetDocumentsparams = { where: { depositor: { uid: customerUid }, folder_uid: folderUid as string }, include: { files: true, document_history: true, document_type: true, depositor: true, folder: { include: { customers: { include: { contact: true, }, }, }, }, }, }; return Documents.getInstance() .get(query) .then((documents) => setDocuments(documents)); }, [folderUid], ); useEffect(() => { fetchFolderAndCustomer().then(({ customer }) => fetchDocuments(customer.uid)); }, [fetchDocuments, fetchFolderAndCustomer]); useEffect(() => { const customerUid = JwtService.getInstance().decodeCustomerJwt()?.customerId; if (!folderUid || !customerUid) return; DocumentsNotary.getInstance() .get({ where: { folder: { uid: folderUid }, customer: { uid: customerUid } }, include: { files: true } }) .then((documentsNotary) => setDocumentsNotary(documentsNotary)); }, [folderUid]); const documentsNotaryNotRead = useMemo( () => documentsNotary.filter((doc) => doc.document_status === EDocumentNotaryStatus.SENT), [documentsNotary], ); const onCloseModalAddDocument = useCallback(() => { setIsAddDocumentModalVisible(false); fetchFolderAndCustomer(); }, [fetchFolderAndCustomer]); const onOpenModalAddDocument = useCallback(() => { setIsAddDocumentModalVisible(true); }, []); const renderBox = useCallback(() => { return ( ({ document_type: DocumentType.hydrate({ name: "Autres documents", office: folder!.office!, }), })} /> ); }, [customer, folderUid, isAddDocumentModalVisible, onCloseModalAddDocument]); return (
Dossier {folder?.folder_number} - {folder?.name} Bonjour {customer?.contact?.first_name.concat(" ", customer?.contact?.last_name)}
Office {folder?.office?.name}
{(documentsNotaryNotRead?.length ?? 0) > 0 && ( router.push( Module.getInstance() .get() .modules.pages.ClientDashboard.pages.ReceiveDocuments.props.path.replace( "[folderUid]", folderUid as string, ), ), }} read={false} /> )} {(documentsNotaryNotRead?.length ?? 0) === 0 && (documentsNotary?.length ?? 0) > 0 && ( router.push( Module.getInstance() .get() .modules.pages.ClientDashboard.pages.ReceiveDocuments.props.path.replace( "[folderUid]", folderUid as string, ), ), }} read={true} /> )}
{customer && folder && }
Documents à envoyer
{documents?.map((document) => ( fetchDocuments(customer?.uid)} /> ))}
Documents supplémentaires (facultatif) Vous souhaitez envoyer d'autres documents à votre notaire ? {isAddDocumentModalVisible && renderBox()}
); }