diff --git a/assets/entrepot/pages/users/documents/MyDocuments.tsx b/assets/entrepot/pages/users/documents/MyDocuments.tsx index 0d77bddb..11db8090 100644 --- a/assets/entrepot/pages/users/documents/MyDocuments.tsx +++ b/assets/entrepot/pages/users/documents/MyDocuments.tsx @@ -1,5 +1,6 @@ import { fr } from "@codegouvfr/react-dsfr"; import Accordion from "@codegouvfr/react-dsfr/Accordion"; +import Alert from "@codegouvfr/react-dsfr/Alert"; import Button from "@codegouvfr/react-dsfr/Button"; import ButtonsGroup from "@codegouvfr/react-dsfr/ButtonsGroup"; import Input from "@codegouvfr/react-dsfr/Input"; @@ -9,14 +10,14 @@ import { useMutation, useQuery } from "@tanstack/react-query"; import { FC, FormEvent, useState } from "react"; import { useDebounceCallback } from "usehooks-ts"; -import { DocumentListResponseDto } from "../../../../@types/entrepot"; +import { DocumentDetailsResponseDto, DocumentListResponseDto } from "../../../../@types/entrepot"; +import Main from "../../../../components/Layout/Main"; import LoadingIcon from "../../../../components/Utils/LoadingIcon"; import Wait from "../../../../components/Utils/Wait"; import RQKeys from "../../../../modules/entrepot/RQKeys"; import { CartesApiException, jsonFetch } from "../../../../modules/jsonFetch"; import SymfonyRouting from "../../../../modules/Routing"; import { niceBytes } from "../../../../utils"; -import Main from "../../../../components/Layout/Main"; const MyDocuments: FC = () => { const [filter, setFilter] = useState({}); @@ -25,14 +26,14 @@ const MyDocuments: FC = () => { const documentsQuery = useQuery({ queryKey: RQKeys.my_documents(filter), queryFn: async ({ signal }) => { - const url = SymfonyRouting.generate("cartesgouvfr_api_user_documents_get_list", filter); + const url = SymfonyRouting.generate("cartesgouvfr_api_user_me_documents_get_list", filter); return await jsonFetch(url, { signal }); }, }); - const addDocumentMutation = useMutation({ + const addDocumentMutation = useMutation({ mutationFn: async (formData: FormData) => { - const url = SymfonyRouting.generate("cartesgouvfr_api_user_documents_add"); + const url = SymfonyRouting.generate("cartesgouvfr_api_user_me_documents_add"); return await jsonFetch(url, { method: "POST" }, formData, true, true); }, onSettled: () => { @@ -48,9 +49,27 @@ const MyDocuments: FC = () => { e.currentTarget.reset(); }; - const deleteDocumentMutation = useMutation({ + const replaceDocumentMutation = useMutation({ + mutationFn: async (formData: FormData) => { + const url = SymfonyRouting.generate("cartesgouvfr_api_user_me_documents_replace_file"); + return await jsonFetch(url, { method: "PUT" }, formData, true, true); + }, + onSettled: () => { + documentsQuery.refetch(); + }, + }); + + const handleReplaceDocument = (e: FormEvent) => { + e.preventDefault(); + const formData = new FormData(e.currentTarget); + + replaceDocumentMutation.mutate(formData); + e.currentTarget.reset(); + }; + + const deleteDocumentMutation = useMutation({ mutationFn: async (documentId: string) => { - const url = SymfonyRouting.generate("cartesgouvfr_api_user_documents_remove", { documentId }); + const url = SymfonyRouting.generate("cartesgouvfr_api_user_me_documents_remove", { documentId }); return await jsonFetch(url, { method: "DELETE" }); }, onSettled: () => { @@ -64,6 +83,9 @@ const MyDocuments: FC = () => { } }; + const [replaceDocumentId, setReplaceDocumentId] = useState(); + // const [replaceAccordionExpanded, setReplaceAccordionExpanded] = useState(false); + return (

Mes documents

@@ -92,52 +114,110 @@ const MyDocuments: FC = () => { { + setReplaceDocumentId(doc._id); + // setReplaceAccordionExpanded(true); + }, + }, { children: "Supprimer", onClick: () => handleDeleteDocument(doc._id, doc.name), + priority: "secondary", }, ]} + inlineLayoutWhen="always" />, ])} fixed /> )} - -
- - - - - - -
+
+ +
+ + + + + + +
+ + {replaceDocumentId && ( + setReplaceAccordionExpanded(expanded)} + // onExpandedChange={() => {}} + defaultExpanded + > +
+ + setReplaceDocumentId(undefined), + }, + { + children: "Remplacer", + type: "submit", + }, + ]} + inlineLayoutWhen="always" + /> + +
+ )} +
+ + {(() => { + const error = addDocumentMutation.error ?? replaceDocumentMutation.error ?? deleteDocumentMutation.error; + if (error) { + return ; + } + })()} {addDocumentMutation.isPending && ( @@ -145,6 +225,12 @@ const MyDocuments: FC = () => { )} + {replaceDocumentMutation.isPending && ( + +

Remplacement du document en cours

+
+ )} + {deleteDocumentMutation.isPending && (

Suppression du document en cours