From dbe71f519c69a1b7a8b674438e949760a4556987 Mon Sep 17 00:00:00 2001 From: basseche Date: Thu, 26 Dec 2024 10:36:36 +0100 Subject: [PATCH 1/5] Case import : compute base name from case-server instead of front computation --- .../dialogs/commons/prefilled-name-input.tsx | 9 ++++++--- src/components/dialogs/commons/upload-new-case.tsx | 10 +--------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/components/dialogs/commons/prefilled-name-input.tsx b/src/components/dialogs/commons/prefilled-name-input.tsx index c7a17a6c5..3768eaa83 100644 --- a/src/components/dialogs/commons/prefilled-name-input.tsx +++ b/src/components/dialogs/commons/prefilled-name-input.tsx @@ -7,7 +7,7 @@ import { useEffect, useState } from 'react'; import { useFormContext } from 'react-hook-form'; -import { ElementType, FieldConstants, UniqueNameInput } from '@gridsuite/commons-ui'; +import { ElementType, FieldConstants, UniqueNameInput, useSnackMessage } from '@gridsuite/commons-ui'; import { useSelector } from 'react-redux'; import { elementExists, getBaseName } from '../../../utils/rest-api'; import { AppState } from '../../../redux/types'; @@ -31,6 +31,7 @@ export default function PrefilledNameInput({ label, name, elementType }: Readonl } = useFormContext(); const [modifiedByUser, setModifiedByUser] = useState(false); + const { snackError } = useSnackMessage(); const caseFile = watch(FieldConstants.CASE_FILE) as File; const caseFileErrorMessage = errors.caseFile?.message; @@ -52,11 +53,13 @@ export default function PrefilledNameInput({ label, name, elementType }: Readonl }); }) .catch((error) => { - console.error('Error fetching base name:', error); + snackError({ + messageTxt: error.message, + }); }); } } - }, [caseFile, modifiedByUser, apiCallErrorMessage, caseFileErrorMessage, setValue, clearErrors, name]); + }, [caseFile, modifiedByUser, apiCallErrorMessage, caseFileErrorMessage, setValue, clearErrors, name, snackError]); return ( Date: Mon, 30 Dec 2024 13:49:37 +0100 Subject: [PATCH 2/5] fix validation --- .../dialogs/commons/prefilled-name-input.tsx | 16 ++++++++++++++-- .../dialogs/commons/upload-new-case.tsx | 7 ------- .../create-case-dialog/create-case-dialog.tsx | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/components/dialogs/commons/prefilled-name-input.tsx b/src/components/dialogs/commons/prefilled-name-input.tsx index 3768eaa83..e0439ff9a 100644 --- a/src/components/dialogs/commons/prefilled-name-input.tsx +++ b/src/components/dialogs/commons/prefilled-name-input.tsx @@ -25,6 +25,7 @@ export interface PrefilledNameInputProps { export default function PrefilledNameInput({ label, name, elementType }: Readonly) { const { setValue, + getValues, clearErrors, watch, formState: { errors }, @@ -43,8 +44,9 @@ export default function PrefilledNameInput({ label, name, elementType }: Readonl // we replace the name only if some conditions are respected if (caseFile && !modifiedByUser && !apiCallErrorMessage && !caseFileErrorMessage) { const { name: caseName } = caseFile; + const currentCaseName = getValues(name); - if (caseName) { + if (caseName && caseName !== currentCaseName) { clearErrors(name); getBaseName(caseName) .then((response) => { @@ -59,7 +61,17 @@ export default function PrefilledNameInput({ label, name, elementType }: Readonl }); } } - }, [caseFile, modifiedByUser, apiCallErrorMessage, caseFileErrorMessage, setValue, clearErrors, name, snackError]); + }, [ + caseFile, + modifiedByUser, + apiCallErrorMessage, + caseFileErrorMessage, + setValue, + getValues, + clearErrors, + name, + snackError, + ]); return ( { setCaseFileLoading(false); }); - } else { - const caseName = getValues(FieldConstants.CASE_NAME); - if (currentCaseFileName && caseName !== currentCaseFileName) { - clearErrors(FieldConstants.CASE_NAME); - } } } else { setError(FieldConstants.CASE_FILE, { diff --git a/src/components/dialogs/create-case-dialog/create-case-dialog.tsx b/src/components/dialogs/create-case-dialog/create-case-dialog.tsx index 08fb21ffd..4360b2991 100644 --- a/src/components/dialogs/create-case-dialog/create-case-dialog.tsx +++ b/src/components/dialogs/create-case-dialog/create-case-dialog.tsx @@ -126,7 +126,7 @@ export default function CreateCaseDialog({ onClose, open }: Readonly - + ); } From 3b335412eef7e534eeec01bb32b8dbd526fd5ced Mon Sep 17 00:00:00 2001 From: basseche Date: Fri, 3 Jan 2025 11:36:24 +0100 Subject: [PATCH 3/5] review --- src/components/dialogs/commons/prefilled-name-input.tsx | 4 +--- .../dialogs/create-case-dialog/create-case-dialog.tsx | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/dialogs/commons/prefilled-name-input.tsx b/src/components/dialogs/commons/prefilled-name-input.tsx index e0439ff9a..9cbf390aa 100644 --- a/src/components/dialogs/commons/prefilled-name-input.tsx +++ b/src/components/dialogs/commons/prefilled-name-input.tsx @@ -44,9 +44,7 @@ export default function PrefilledNameInput({ label, name, elementType }: Readonl // we replace the name only if some conditions are respected if (caseFile && !modifiedByUser && !apiCallErrorMessage && !caseFileErrorMessage) { const { name: caseName } = caseFile; - const currentCaseName = getValues(name); - - if (caseName && caseName !== currentCaseName) { + if (caseName) { clearErrors(name); getBaseName(caseName) .then((response) => { diff --git a/src/components/dialogs/create-case-dialog/create-case-dialog.tsx b/src/components/dialogs/create-case-dialog/create-case-dialog.tsx index 4360b2991..08fb21ffd 100644 --- a/src/components/dialogs/create-case-dialog/create-case-dialog.tsx +++ b/src/components/dialogs/create-case-dialog/create-case-dialog.tsx @@ -126,7 +126,7 @@ export default function CreateCaseDialog({ onClose, open }: Readonly - + ); } From 503f0cc84249ee5cc24ef44d489c3dc3f24dbfd5 Mon Sep 17 00:00:00 2001 From: basseche Date: Mon, 6 Jan 2025 14:52:54 +0100 Subject: [PATCH 4/5] fix case --- src/components/dialogs/commons/prefilled-name-input.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/dialogs/commons/prefilled-name-input.tsx b/src/components/dialogs/commons/prefilled-name-input.tsx index 9cbf390aa..9c3579563 100644 --- a/src/components/dialogs/commons/prefilled-name-input.tsx +++ b/src/components/dialogs/commons/prefilled-name-input.tsx @@ -42,7 +42,12 @@ export default function PrefilledNameInput({ label, name, elementType }: Readonl useEffect(() => { // we replace the name only if some conditions are respected - if (caseFile && !modifiedByUser && !apiCallErrorMessage && !caseFileErrorMessage) { + if ( + caseFile && + (!modifiedByUser || elementType === ElementType.CASE) && + !apiCallErrorMessage && + !caseFileErrorMessage + ) { const { name: caseName } = caseFile; if (caseName) { clearErrors(name); @@ -69,6 +74,7 @@ export default function PrefilledNameInput({ label, name, elementType }: Readonl clearErrors, name, snackError, + elementType, ]); return ( From 47736d5cbb4a1bde7aedcbb008a1b3557a67d15c Mon Sep 17 00:00:00 2001 From: basseche Date: Thu, 9 Jan 2025 10:08:34 +0100 Subject: [PATCH 5/5] improve useEffect --- .../dialogs/commons/prefilled-name-input.tsx | 33 ++----------------- 1 file changed, 3 insertions(+), 30 deletions(-) diff --git a/src/components/dialogs/commons/prefilled-name-input.tsx b/src/components/dialogs/commons/prefilled-name-input.tsx index 9c3579563..5f05a11f5 100644 --- a/src/components/dialogs/commons/prefilled-name-input.tsx +++ b/src/components/dialogs/commons/prefilled-name-input.tsx @@ -23,34 +23,18 @@ export interface PrefilledNameInputProps { * Used for CreateCaseDialog and CreateStudyDialog */ export default function PrefilledNameInput({ label, name, elementType }: Readonly) { - const { - setValue, - getValues, - clearErrors, - watch, - formState: { errors }, - } = useFormContext(); + const { setValue, watch } = useFormContext(); const [modifiedByUser, setModifiedByUser] = useState(false); const { snackError } = useSnackMessage(); const caseFile = watch(FieldConstants.CASE_FILE) as File; - const caseFileErrorMessage = errors.caseFile?.message; - const apiCallErrorMessage = errors.root?.apiCall?.message; - const activeDirectory = useSelector((state: AppState) => state.activeDirectory); useEffect(() => { - // we replace the name only if some conditions are respected - if ( - caseFile && - (!modifiedByUser || elementType === ElementType.CASE) && - !apiCallErrorMessage && - !caseFileErrorMessage - ) { + if (caseFile && !modifiedByUser) { const { name: caseName } = caseFile; if (caseName) { - clearErrors(name); getBaseName(caseName) .then((response) => { setValue(name, response, { @@ -64,18 +48,7 @@ export default function PrefilledNameInput({ label, name, elementType }: Readonl }); } } - }, [ - caseFile, - modifiedByUser, - apiCallErrorMessage, - caseFileErrorMessage, - setValue, - getValues, - clearErrors, - name, - snackError, - elementType, - ]); + }, [caseFile, modifiedByUser, setValue, name, snackError]); return (