"use client"; import Documents, { IGetDocumentsparams } from "@Front/Api/LeCoffreApi/Customer/Documents/Documents"; import Typography, { ETypo, ETypoColor } from "@Front/Components/DesignSystem/Typography"; import Customer, { Document } from "le-coffre-resources/dist/Customer"; import React, { useCallback, useEffect, useMemo, useState } from "react"; import { 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 OfficeRib from "@Front/Api/LeCoffreApi/Customer/OfficeRib/OfficeRib"; import Tag, { ETagColor } from "@Front/Components/DesignSystem/Tag"; import DefaultCustomerDashboard from "@Front/Components/LayoutTemplates/DefaultCustomerDashboard"; import ContactBox from "@Front/Components/Elements/ContactBox"; import Button, { EButtonSize, EButtonstyletype, EButtonVariant } from "@Front/Components/DesignSystem/Button"; import { ArrowDownTrayIcon } from "@heroicons/react/24/outline"; import DepositDocumentComponent from "./DepositDocumentComponent"; import Link from "next/link"; import Module from "@Front/Config/Module"; 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 [ribUrl, setRibUrl] = useState(null); 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, }, }, }, }); 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]); const notaryContact = useMemo( () => folder?.stakeholders!.find((stakeholder) => stakeholder.office_role?.name === "Collaborateur")?.contact ?? folder?.stakeholders![0]!.contact, [folder], ); const note = useMemo( () => folder?.notes?.find((note) => note.customer?.uid === customer?.uid) ?? { content: "Aucune note", created_at: new Date(), updated_at: new Date(), }, [customer?.uid, folder?.notes], ); useEffect(() => { if (!folder?.office?.uid) return; OfficeRib.getInstance() .getRibStream(folder.office.uid) .then((blob) => setRibUrl(URL.createObjectURL(blob))); }, [folder]); const downloadRib = useCallback(async () => { if (!ribUrl) return; const a = document.createElement("a"); a.style.display = "none"; a.href = ribUrl; a.download = ""; document.body.appendChild(a); a.click(); }, [ribUrl]); return (
Dossier {folder?.folder_number} - {folder?.name} Bonjour {customer?.contact?.first_name.concat(" ", customer?.contact?.last_name)}
Office {folder?.office?.name}
Votre Notaire {notaryContact && } {ribUrl && ( )}
Documents à envoyer {documents?.map((document) => ( fetchDocuments(customer?.uid)} /> ))}
); }