From a9ce560a1b550df88d6fd64d176bf6cc59383e6c Mon Sep 17 00:00:00 2001 From: Max S Date: Fri, 13 Sep 2024 15:58:36 +0200 Subject: [PATCH] :sparkles: add error message when no client selected --- .../Form/AutocompleteField/index.tsx | 2 ++ .../AutocompleteMultiSelectField/index.tsx | 2 ++ .../DesignSystem/Form/SelectField/index.tsx | 3 +++ .../Layouts/Folder/SendDocuments/index.tsx | 21 +++++++++++++++++-- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/front/Components/DesignSystem/Form/AutocompleteField/index.tsx b/src/front/Components/DesignSystem/Form/AutocompleteField/index.tsx index d774c9ac..28109308 100644 --- a/src/front/Components/DesignSystem/Form/AutocompleteField/index.tsx +++ b/src/front/Components/DesignSystem/Form/AutocompleteField/index.tsx @@ -34,6 +34,8 @@ export default class AutocompleteField extends BaseField { }; public override componentDidUpdate(prevProps: IProps): void { + super.componentDidUpdate(prevProps); + if (prevProps.selectedOption !== this.props.selectedOption) { this.setState({ selectedOption: this.props.selectedOption ?? null }); } diff --git a/src/front/Components/DesignSystem/Form/AutocompleteMultiSelectField/index.tsx b/src/front/Components/DesignSystem/Form/AutocompleteMultiSelectField/index.tsx index be59f164..95b468a6 100644 --- a/src/front/Components/DesignSystem/Form/AutocompleteMultiSelectField/index.tsx +++ b/src/front/Components/DesignSystem/Form/AutocompleteMultiSelectField/index.tsx @@ -34,6 +34,8 @@ export default class AutocompleteMultiSelectField extends BaseField { }; public override componentDidUpdate(prevProps: IProps): void { + super.componentDidUpdate(prevProps); + + if (prevProps.selectedOption !== this.props.selectedOption) { this.setState({ selectedOption: this.props.selectedOption ?? null }); } diff --git a/src/front/Components/Layouts/Folder/SendDocuments/index.tsx b/src/front/Components/Layouts/Folder/SendDocuments/index.tsx index d9691b84..4bbed888 100644 --- a/src/front/Components/Layouts/Folder/SendDocuments/index.tsx +++ b/src/front/Components/Layouts/Folder/SendDocuments/index.tsx @@ -17,6 +17,9 @@ import React, { useCallback, useEffect, useMemo, useState } from "react"; import classes from "./classes.module.scss"; import { ToasterService } from "@Front/Components/DesignSystem/Toaster"; +import AutocompleteMultiSelectField from "@Front/Components/DesignSystem/Form/AutocompleteMultiSelectField"; +import { ValidationError } from "class-validator"; +import TextField from "@Front/Components/DesignSystem/Form/TextField"; enum EClientSelection { ALL_CLIENTS = "all_clients", @@ -31,6 +34,7 @@ export default function SendDocuments() { const [selectedClients, setSelectedClients] = useState([]); const [files, setFiles] = useState([]); const [isSending, setIsSending] = useState(false); + const [validationError, setValidationError] = useState(null); const onFormSubmit = useCallback( async ( @@ -46,6 +50,17 @@ export default function SendDocuments() { try { setIsSending(true); + + if (selectedClients.length === 0) { + setValidationError({ + property: "clients", + constraints: { + isEmpty: "Veuillez sélectionner au moins un client", + }, + }); + throw new Error("No clients selected"); + } + await Promise.all( selectedClients.map(async (customer) => { const promises = files.map(async (file) => { @@ -72,7 +87,7 @@ export default function SendDocuments() { ToasterService.getInstance().success({ title: "Succès !", description: "Votre document a été envoyée avec succès." }); } catch (error) { setIsSending(false); - console.error("Error while sending files: ", error); + console.warn("Error while sending files: ", error); } }, [files, folderUid, router, selectedClients], @@ -163,10 +178,12 @@ export default function SendDocuments() {
{clientSelection === EClientSelection.SELECTED_CLIENTS && ( - )} {clientSelection && (