diff --git a/src/components/menus/content-contextual-menu.tsx b/src/components/menus/content-contextual-menu.tsx index e6b213c41..a50303646 100644 --- a/src/components/menus/content-contextual-menu.tsx +++ b/src/components/menus/content-contextual-menu.tsx @@ -31,6 +31,7 @@ import { PARAM_LANGUAGE, PARAM_DEVELOPER_MODE, } from '@gridsuite/commons-ui'; +import { cleanLocalStorageForStudies } from 'utils/local-storage-utils'; import RenameDialog from '../dialogs/rename-dialog'; import DeleteDialog from '../dialogs/delete-dialog'; import CreateStudyDialog from '../dialogs/create-study-dialog/create-study-dialog'; @@ -253,13 +254,16 @@ export default function ContentContextualMenu(props: Readonly handleCloseDialog()) + .then(() => { + cleanLocalStorageForStudies(selectedElements); + handleCloseDialog(); + }) // show the error message and don't close the dialog .catch((error) => { handleDeleteError(setDeleteError, error, intl, snackError); }); }, - [selectedDirectory?.elementUuid, handleCloseDialog, intl, snackError] + [selectedDirectory?.elementUuid, handleCloseDialog, selectedElements, intl, snackError] ); const [moveCB] = useMultipleDeferredFetch(moveElementsToDirectory, undefined, handleMoveError); diff --git a/src/components/toolbars/content-toolbar.tsx b/src/components/toolbars/content-toolbar.tsx index 5fa0e8c6b..d0bcbff53 100644 --- a/src/components/toolbars/content-toolbar.tsx +++ b/src/components/toolbars/content-toolbar.tsx @@ -15,6 +15,7 @@ import { TableView as TableViewIcon, DownloadForOffline, } from '@mui/icons-material'; +import { cleanLocalStorageForStudies } from 'utils/local-storage-utils'; import { ElementAttributes, ElementType, useSnackMessage, PARAM_DEVELOPER_MODE } from '@gridsuite/commons-ui'; import { deleteElements, moveElementsToDirectory, PermissionType } from '../../utils/rest-api'; import DeleteDialog from '../dialogs/delete-dialog'; @@ -103,12 +104,15 @@ export default function ContentToolbar(props: Readonly) { setDeleteError(''); // @ts-expect-error TODO: manage null case deleteElements(elementsUuids, selectedDirectory.elementUuid) - .then(handleCloseDialog) + .then(() => { + cleanLocalStorageForStudies(selectedElements); + handleCloseDialog(); + }) .catch((error) => { handleDeleteError(setDeleteError, error, intl, snackError); }); }, - [selectedDirectory?.elementUuid, handleCloseDialog, intl, snackError] + [selectedDirectory?.elementUuid, selectedElements, handleCloseDialog, intl, snackError] ); const items = useMemo(() => { diff --git a/src/utils/local-storage-utils.ts b/src/utils/local-storage-utils.ts new file mode 100644 index 000000000..2f21f88fe --- /dev/null +++ b/src/utils/local-storage-utils.ts @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +import { ElementAttributes, ElementType } from '@gridsuite/commons-ui'; + +/** + * Cleans localStorage entries related to studies by removing keys containing the study UUID. + * @param selectedElements - Array of selected elements to check for studies. + */ +export function cleanLocalStorageForStudies(selectedElements: ElementAttributes[]): void { + selectedElements + .filter((element) => element.type === ElementType.STUDY) + .forEach((element) => { + const studyUuid = element.elementUuid; + Object.keys(localStorage) + .filter((key) => key.includes(studyUuid)) + .forEach((key) => localStorage.removeItem(key)); + }); +}