add error message when no client selected

This commit is contained in:
Max S 2024-09-13 15:58:36 +02:00
parent 68468f7793
commit a9ce560a1b
4 changed files with 26 additions and 2 deletions

View File

@ -34,6 +34,8 @@ export default class AutocompleteField extends BaseField<IProps, IState> {
}; };
public override componentDidUpdate(prevProps: IProps): void { public override componentDidUpdate(prevProps: IProps): void {
super.componentDidUpdate(prevProps);
if (prevProps.selectedOption !== this.props.selectedOption) { if (prevProps.selectedOption !== this.props.selectedOption) {
this.setState({ selectedOption: this.props.selectedOption ?? null }); this.setState({ selectedOption: this.props.selectedOption ?? null });
} }

View File

@ -34,6 +34,8 @@ export default class AutocompleteMultiSelectField extends BaseField<IProps, ISta
}; };
public override componentDidUpdate(prevProps: IProps): void { public override componentDidUpdate(prevProps: IProps): void {
super.componentDidUpdate(prevProps);
if (prevProps.selectedOptions !== this.props.selectedOptions) { if (prevProps.selectedOptions !== this.props.selectedOptions) {
this.setState({ selectedOptions: this.props.selectedOptions ?? null }); this.setState({ selectedOptions: this.props.selectedOptions ?? null });
} }

View File

@ -34,6 +34,9 @@ export default class SelectField extends BaseField<IProps, IState> {
}; };
public override componentDidUpdate(prevProps: IProps): void { public override componentDidUpdate(prevProps: IProps): void {
super.componentDidUpdate(prevProps);
if (prevProps.selectedOption !== this.props.selectedOption) { if (prevProps.selectedOption !== this.props.selectedOption) {
this.setState({ selectedOption: this.props.selectedOption ?? null }); this.setState({ selectedOption: this.props.selectedOption ?? null });
} }

View File

@ -17,6 +17,9 @@ import React, { useCallback, useEffect, useMemo, useState } from "react";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import { ToasterService } from "@Front/Components/DesignSystem/Toaster"; 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 { enum EClientSelection {
ALL_CLIENTS = "all_clients", ALL_CLIENTS = "all_clients",
@ -31,6 +34,7 @@ export default function SendDocuments() {
const [selectedClients, setSelectedClients] = useState<string[]>([]); const [selectedClients, setSelectedClients] = useState<string[]>([]);
const [files, setFiles] = useState<File[]>([]); const [files, setFiles] = useState<File[]>([]);
const [isSending, setIsSending] = useState(false); const [isSending, setIsSending] = useState(false);
const [validationError, setValidationError] = useState<ValidationError | null>(null);
const onFormSubmit = useCallback( const onFormSubmit = useCallback(
async ( async (
@ -46,6 +50,17 @@ export default function SendDocuments() {
try { try {
setIsSending(true); 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( await Promise.all(
selectedClients.map(async (customer) => { selectedClients.map(async (customer) => {
const promises = files.map(async (file) => { 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." }); ToasterService.getInstance().success({ title: "Succès !", description: "Votre document a été envoyée avec succès." });
} catch (error) { } catch (error) {
setIsSending(false); setIsSending(false);
console.error("Error while sending files: ", error); console.warn("Error while sending files: ", error);
} }
}, },
[files, folderUid, router, selectedClients], [files, folderUid, router, selectedClients],
@ -163,10 +178,12 @@ export default function SendDocuments() {
<Form onSubmit={onFormSubmit} className={classes["form"]}> <Form onSubmit={onFormSubmit} className={classes["form"]}>
{clientSelection === EClientSelection.SELECTED_CLIENTS && ( {clientSelection === EClientSelection.SELECTED_CLIENTS && (
<AutocompleteMultiSelect <AutocompleteMultiSelectField
name="clients"
label="Choisir le ou les clients: " label="Choisir le ou les clients: "
options={clientsOptions} options={clientsOptions}
onSelectionChange={handleClientSelectionChange} onSelectionChange={handleClientSelectionChange}
validationError={validationError ?? undefined}
/> />
)} )}
{clientSelection && ( {clientSelection && (