diff --git a/src/front/Components/Layouts/Folder/AddClientToFolder/index.tsx b/src/front/Components/Layouts/Folder/AddClientToFolder/index.tsx index 0364fda7..358cc6c1 100644 --- a/src/front/Components/Layouts/Folder/AddClientToFolder/index.tsx +++ b/src/front/Components/Layouts/Folder/AddClientToFolder/index.tsx @@ -156,6 +156,7 @@ export default function AddClientToFolder(props: IProps) { ); const loadCustomers = useCallback(async () => { + LoaderService.getInstance().show(); CustomerService.getCustomers().then(async (processes: any[]) => { const availableCustomers: any[] = processes.map((process: any) => process.processData); @@ -176,6 +177,8 @@ export default function AddClientToFolder(props: IProps) { setExistingCustomers(existingCustomers); setIsLoaded(true); setSelectedOption(selectedOption); + + LoaderService.getInstance().hide(); }); }, [folderUid, getFolderPreSelectedCustomers]); diff --git a/src/front/Components/Layouts/Folder/AskDocuments/index.tsx b/src/front/Components/Layouts/Folder/AskDocuments/index.tsx index 9897aed5..949c1ca4 100644 --- a/src/front/Components/Layouts/Folder/AskDocuments/index.tsx +++ b/src/front/Components/Layouts/Folder/AskDocuments/index.tsx @@ -17,6 +17,7 @@ import backgroundImage from "@Assets/images/background_refonte.svg"; import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService"; import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService"; +import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService"; export default function AskDocuments() { const router = useRouter(); @@ -58,8 +59,8 @@ export default function AskDocuments() { ) => { try { // TODO: review + LoaderService.getInstance().show(); const documentAsked: [] = values["document_types"] as []; - for (let i = 0; i < documentAsked.length; i++) { const documentData: any = { folder: { @@ -77,7 +78,6 @@ export default function AskDocuments() { await DocumentService.createDocument(documentData, validatorId); } - router.push( Module.getInstance() .get() @@ -127,11 +127,13 @@ export default function AskDocuments() { const loadData = useCallback(async () => { try { + LoaderService.getInstance().show(); FolderService.getFolderByUid(folderUid as string).then(async (process: any) => { if (process) { const folder: any = process.processData; setFolder(folder); setDocumentTypes(await getAvailableDocuments(folder)); + LoaderService.getInstance().hide(); } }); } catch (e) { diff --git a/src/front/Components/Layouts/Folder/CreateCustomerNote/index.tsx b/src/front/Components/Layouts/Folder/CreateCustomerNote/index.tsx index ea17b9a4..55c9db9d 100644 --- a/src/front/Components/Layouts/Folder/CreateCustomerNote/index.tsx +++ b/src/front/Components/Layouts/Folder/CreateCustomerNote/index.tsx @@ -17,6 +17,7 @@ import Note from "le-coffre-resources/dist/Customer/Note"; import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService"; import CustomerService from "src/common/Api/LeCoffreApi/sdk/CustomerService"; import NoteService from "src/common/Api/LeCoffreApi/sdk/NoteService"; +import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService"; type IProps = {}; @@ -83,6 +84,8 @@ class CreateCustomerNoteClass extends BasePage { const customer = await Customers.getInstance().getByUid(this.props.customerUid); */ + LoaderService.getInstance().show(); + const folder: any = await FolderService.getFolderByUid(this.props.folderUid).then((process: any) => { if (process) { const folder: any = process.processData; @@ -97,6 +100,8 @@ class CreateCustomerNoteClass extends BasePage { } }); + LoaderService.getInstance().hide(); + //get the note of the folder that has customer_uid = this.props.customer.uid // const folderNote = folder.notes?.find((note) => note.customer?.uid === this.props.customerUid); // this.setState({ note, folder: note.office_folder || null, customer: note.customer || null }); @@ -121,6 +126,7 @@ class CreateCustomerNoteClass extends BasePage { }; const validatorId: string = '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0'; + LoaderService.getInstance().show(); NoteService.createNote(noteData, validatorId).then(() => { this.props.router.push(this.backwardPath); }); diff --git a/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/DeleteAskedDocumentModal/index.tsx b/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/DeleteAskedDocumentModal/index.tsx index 86c332df..95983ee9 100644 --- a/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/DeleteAskedDocumentModal/index.tsx +++ b/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/DeleteAskedDocumentModal/index.tsx @@ -4,6 +4,7 @@ import Typography, { ETypo } from "@Front/Components/DesignSystem/Typography"; import React, { useCallback } from "react"; import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService"; +import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService"; type IProps = { documentUid: string; @@ -16,7 +17,8 @@ export default function DeleteAskedDocumentModal(props: IProps) { const { isOpen, onClose, documentUid, onDeleteSuccess } = props; const onDelete = useCallback( - () => + () => { + LoaderService.getInstance().show(); new Promise( (resolve: () => void) => { DocumentService.getDocumentByUid(documentUid).then((process: any) => { @@ -27,8 +29,10 @@ export default function DeleteAskedDocumentModal(props: IProps) { }) .then(() => onDeleteSuccess(documentUid)) .then(() => ToasterService.getInstance().success({ title: "Succès !", description: "Le document a été supprimé avec succès." })) + .then(() => LoaderService.getInstance().hide()) .then(onClose) - .catch((error) => console.warn(error)), + .catch((error) => console.warn(error)); + }, [documentUid, onClose, onDeleteSuccess], ); diff --git a/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/DeleteSentDocumentModal/index.tsx b/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/DeleteSentDocumentModal/index.tsx index e3d6296e..233c9566 100644 --- a/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/DeleteSentDocumentModal/index.tsx +++ b/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/DeleteSentDocumentModal/index.tsx @@ -1,9 +1,11 @@ -import DocumentsNotary from "@Front/Api/LeCoffreApi/Notary/DocumentsNotary/DocumentsNotary"; import Modal from "@Front/Components/DesignSystem/Modal"; import { ToasterService } from "@Front/Components/DesignSystem/Toaster"; import Typography, { ETypo } from "@Front/Components/DesignSystem/Typography"; import React, { useCallback } from "react"; +import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService"; +import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService"; + type IProps = { documentUid: string; isOpen: boolean; @@ -15,13 +17,18 @@ export default function DeleteSentDocumentModal(props: IProps) { const { isOpen, onClose, documentUid, onDeleteSuccess } = props; const onDelete = useCallback( - () => - DocumentsNotary.getInstance() - .delete(documentUid) - .then(() => onDeleteSuccess(documentUid)) - .then(() => ToasterService.getInstance().success({ title: "Succès !", description: "Le document a été supprimé avec succès." })) - .then(onClose) - .catch((error) => console.warn(error)), + () => { + LoaderService.getInstance().show(); + DocumentService.getDocumentByUid(documentUid).then((process: any) => { + if (process) { + DocumentService.updateDocument(process, { isDeleted: 'true' }) + .then(() => onDeleteSuccess(documentUid)) + .then(() => ToasterService.getInstance().success({ title: "Succès !", description: "Le document a été supprimé avec succès." })) + .then(() => LoaderService.getInstance().hide()) + .then(onClose); + } + }); + }, [documentUid, onClose, onDeleteSuccess], ); diff --git a/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/index.tsx b/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/index.tsx index f38d5e35..fd1c43d2 100644 --- a/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/index.tsx +++ b/src/front/Components/Layouts/Folder/FolderInformation/ClientView/DocumentTables/index.tsx @@ -1,4 +1,3 @@ -import DocumentsNotary from "@Front/Api/LeCoffreApi/Notary/DocumentsNotary/DocumentsNotary"; import FilesNotary from "@Front/Api/LeCoffreApi/Notary/FilesNotary/Files"; import CircleProgress from "@Front/Components/DesignSystem/CircleProgress"; import IconButton from "@Front/Components/DesignSystem/IconButton"; @@ -24,6 +23,7 @@ import DeleteSentDocumentModal from "./DeleteSentDocumentModal"; import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService"; import DocumentTypeService from "src/common/Api/LeCoffreApi/sdk/DocumentTypeService"; import FileService from "src/common/Api/LeCoffreApi/sdk/FileService"; +import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService"; type IProps = { customerUid: string; @@ -55,14 +55,13 @@ export default function DocumentTables(props: IProps) { const fetchDocuments = useCallback( () => { - setDocuments([]); - + LoaderService.getInstance().show(); DocumentService.getDocuments().then(async (processes: any[]) => { if (processes.length > 0) { let documents: any[] = processes.map((process: any) => process.processData); // FilterBy folder.uid & depositor.uid - documents = documents.filter((document: any) => document.folder.uid === folderUid && document.depositor.uid === customerUid); + documents = documents.filter((document: any) => document.folder.uid === folderUid && document.depositor && document.depositor.uid === customerUid); for (const document of documents) { document.document_type = (await DocumentTypeService.getDocumentTypeByUid(document.document_type.uid)).processData; @@ -80,24 +79,45 @@ export default function DocumentTables(props: IProps) { } else { setDocuments([]); } - }) + LoaderService.getInstance().hide(); + }); }, [customerUid, folderUid], ); const fetchDocumentsNotary = useCallback( - () => - DocumentsNotary.getInstance() - .get({ where: { folder: { uid: folderUid }, customer: { uid: customerUid } }, include: { files: true } }) - .then(setDocumentsNotary) - .catch(console.warn), + () => { + LoaderService.getInstance().show(); + DocumentService.getDocuments().then(async (processes: any[]) => { + if (processes.length > 0) { + let documents: any[] = processes.map((process: any) => process.processData); + + // FilterBy folder.uid & customer.uid + documents = documents.filter((document: any) => document.folder.uid === folderUid && document.customer && document.customer.uid === customerUid); + + for (const document of documents) { + if (document.files && document.files.length > 0) { + const files: any[] = []; + for (const file of document.files) { + files.push((await FileService.getFileByUid(file.uid)).processData); + } + document.files = files; + } + } + + setDocumentsNotary(documents); + } else { + setDocumentsNotary([]); + } + LoaderService.getInstance().hide(); + }); + }, [customerUid, folderUid], ); useEffect(() => { - // TODO: review fetchDocuments(); - //fetchDocumentsNotary(); + fetchDocumentsNotary(); }, [fetchDocuments, fetchDocumentsNotary]); const openDeleteAskedDocumentModal = useCallback( diff --git a/src/front/Components/Layouts/Folder/FolderInformation/index.tsx b/src/front/Components/Layouts/Folder/FolderInformation/index.tsx index 1d1c7bbb..e2cb8518 100644 --- a/src/front/Components/Layouts/Folder/FolderInformation/index.tsx +++ b/src/front/Components/Layouts/Folder/FolderInformation/index.tsx @@ -135,7 +135,7 @@ export default function FolderInformation(props: IProps) { if (processes.length > 0) { const documents: any[] = processes.map((process: any) => process.processData); for (const customer of folder.customers) { - customer.documents = documents.filter((document: any) => document.depositor.uid === customer.uid); + customer.documents = documents.filter((document: any) => document.depositor && document.depositor.uid === customer.uid); } } resolve(); diff --git a/src/front/Components/Layouts/Folder/SendDocuments/index.tsx b/src/front/Components/Layouts/Folder/SendDocuments/index.tsx index cb34d08e..81f50e1c 100644 --- a/src/front/Components/Layouts/Folder/SendDocuments/index.tsx +++ b/src/front/Components/Layouts/Folder/SendDocuments/index.tsx @@ -1,6 +1,5 @@ import backgroundImage from "@Assets/images/background_refonte.svg"; -import DocumentsNotary from "@Front/Api/LeCoffreApi/Notary/DocumentsNotary/DocumentsNotary"; -import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; +import { EDocumentNotaryStatus } from "le-coffre-resources/dist/Notary/DocumentNotary"; import Button, { EButtonstyletype, EButtonVariant } from "@Front/Components/DesignSystem/Button"; import DragAndDrop from "@Front/Components/DesignSystem/DragAndDrop"; import Form from "@Front/Components/DesignSystem/Form"; @@ -19,6 +18,11 @@ import React, { useCallback, useEffect, useMemo, useState } from "react"; import classes from "./classes.module.scss"; +import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService"; +import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService"; +import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService"; +import FileService from "src/common/Api/LeCoffreApi/sdk/FileService"; + enum EClientSelection { ALL_CLIENTS = "all_clients", SELECTED_CLIENTS = "selected_clients", @@ -59,6 +63,64 @@ export default function SendDocuments() { throw new Error("No clients selected"); } + LoaderService.getInstance().show(); + for (const selectedClient of selectedClients) { + for (const file of files) { + await new Promise((resolve: () => void) => { + const reader = new FileReader(); + reader.onload = (event) => { + if (event.target?.result) { + const arrayBuffer = event.target.result as ArrayBuffer; + const uint8Array = new Uint8Array(arrayBuffer); + + const fileBlob: any = { + type: file.type, + data: uint8Array + }; + + const fileData: any = { + file_blob: fileBlob, + file_name: file.name + }; + const validatorId: string = '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0'; + + FileService.createFile(fileData, validatorId).then((processCreated: any) => { + const fileUid: string = processCreated.processData.uid; + + const documentData: any = { + folder: { + uid: folderUid as string + }, + customer: { + uid: selectedClient as string + }, + files: [ + { + uid: fileUid + } + ], + document_status: EDocumentNotaryStatus.SENT + }; + + DocumentService.createDocument(documentData, validatorId).then(() => resolve()); + }); + } + }; + reader.readAsArrayBuffer(file); + }); + } + } + LoaderService.getInstance().hide(); + + router.push( + Module.getInstance() + .get() + .modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", folderUid as string), + ); + setIsSending(false); + ToasterService.getInstance().success({ title: "Succès !", description: "Votre document a été envoyée avec succès." }); + + /* await Promise.all( selectedClients.map(async (customer) => { const promises = files.map(async (file) => { @@ -83,6 +145,7 @@ export default function SendDocuments() { ); setIsSending(false); ToasterService.getInstance().success({ title: "Succès !", description: "Votre document a été envoyée avec succès." }); + */ } catch (error) { setIsSending(false); console.warn("Error while sending files: ", error); @@ -92,18 +155,14 @@ export default function SendDocuments() { ); const fetchFolder = useCallback(async () => { - Folders.getInstance() - .getByUid(folderUid as string, { - q: { - customers: { - include: { - contact: true, - }, - }, - }, - }) - .then((folder) => setFolder(folder)) - .catch((e) => console.warn(e)); + LoaderService.getInstance().show(); + FolderService.getFolderByUid(folderUid as string).then((process: any) => { + if (process) { + const folder: any = process.processData; + setFolder(folder); + LoaderService.getInstance().hide(); + } + }); }, [folderUid]); const onClientSelectionChange = useCallback( diff --git a/src/front/Components/Layouts/Folder/UpdateCustomerNote/index.tsx b/src/front/Components/Layouts/Folder/UpdateCustomerNote/index.tsx index 1ea2323e..56ff7f2d 100644 --- a/src/front/Components/Layouts/Folder/UpdateCustomerNote/index.tsx +++ b/src/front/Components/Layouts/Folder/UpdateCustomerNote/index.tsx @@ -13,6 +13,7 @@ import classes from "./classes.module.scss"; import Note from "le-coffre-resources/dist/Customer/Note"; import NoteService from "src/common/Api/LeCoffreApi/sdk/NoteService"; +import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService"; type IProps = {}; @@ -67,6 +68,7 @@ class UpdateCustomerNoteClass extends BasePage { } public override async componentDidMount() { + LoaderService.getInstance().show(); NoteService.getNoteByUid(this.props.noteUid).then((process: any) => { if (process) { const note: any = process.processData; @@ -80,15 +82,17 @@ class UpdateCustomerNoteClass extends BasePage { .get() .modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", note.folder?.uid!), }); + + LoaderService.getInstance().hide(); } }); } private async onFormSubmit(e: React.FormEvent | null, values: { [key: string]: string }) { try { + LoaderService.getInstance().show(); NoteService.getNoteByUid(this.props.noteUid).then((process: any) => { if (process) { - NoteService.updateNote(process, { content: values["content"] }).then(() => { this.props.router.push(this.state.backwardPath); }); diff --git a/src/front/Components/Layouts/Folder/UpdateFolderMetadata/index.tsx b/src/front/Components/Layouts/Folder/UpdateFolderMetadata/index.tsx index 9b4512c3..163d7197 100644 --- a/src/front/Components/Layouts/Folder/UpdateFolderMetadata/index.tsx +++ b/src/front/Components/Layouts/Folder/UpdateFolderMetadata/index.tsx @@ -49,7 +49,6 @@ export default function UpdateFolderMetadata() { setValidationError(validationErrors as ValidationError[]); return; } - try { LoaderService.getInstance().show(); FolderService.getFolderByUid(folderUid).then((process: any) => {