From 104779a402f76678f0f2e903f8771288dda0d006 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Thu, 13 Feb 2020 13:38:40 -0300 Subject: [PATCH] 15781: Fixes project tag add/delete error handling. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- .../details-panel/details-panel-action.ts | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/store/details-panel/details-panel-action.ts b/src/store/details-panel/details-panel-action.ts index e0d72017..c5d472ad 100644 --- a/src/store/details-panel/details-panel-action.ts +++ b/src/store/details-panel/details-panel-action.ts @@ -41,16 +41,19 @@ export const deleteProjectProperty = (key: string, value: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const { detailsPanel, resources } = getState(); const project = getResource(detailsPanel.resourceUuid)(resources) as ProjectResource; + if (!project) { return; } + + const properties = Object.assign({}, project.properties); + try { - if (project) { - project.properties = deleteProperty(project.properties, key, value); - const updatedProject = await services.projectService.update(project.uuid, { properties: project.properties }); - dispatch(resourcesActions.SET_RESOURCES([updatedProject])); - dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Property has been successfully deleted.", hideDuration: 2000, kind: SnackbarKind.SUCCESS })); - } + const updatedProject = await services.projectService.update( + project.uuid, { + properties: deleteProperty(properties, key, value), + }); + dispatch(resourcesActions.SET_RESOURCES([updatedProject])); + dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Property has been successfully deleted.", hideDuration: 2000, kind: SnackbarKind.SUCCESS })); } catch (e) { - dispatch(dialogActions.CLOSE_DIALOG({ id: PROJECT_PROPERTIES_FORM_NAME })); - throw new Error('Could not remove property from the project.'); + dispatch(snackbarActions.OPEN_SNACKBAR({ message: e.errors[0], hideDuration: 2000, kind: SnackbarKind.ERROR })); } }; @@ -58,25 +61,23 @@ export const createProjectProperty = (data: TagProperty) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const { detailsPanel, resources } = getState(); const project = getResource(detailsPanel.resourceUuid)(resources) as ProjectResource; + if (!project) { return; } + dispatch(startSubmit(PROJECT_PROPERTIES_FORM_NAME)); try { - if (project) { - const key = data.keyID || data.key; - const value = data.valueID || data.value; - project.properties = addProperty(project.properties, key, value); - const updatedProject = await services.projectService.update( - project.uuid, { - properties: {...project.properties} - } - ); - dispatch(resourcesActions.SET_RESOURCES([updatedProject])); - dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Property has been successfully added.", hideDuration: 2000, kind: SnackbarKind.SUCCESS })); - dispatch(stopSubmit(PROJECT_PROPERTIES_FORM_NAME)); - } - return; + const key = data.keyID || data.key; + const value = data.valueID || data.value; + const properties = Object.assign({}, project.properties); + const updatedProject = await services.projectService.update( + project.uuid, { + properties: addProperty(properties, key, value), + } + ); + dispatch(resourcesActions.SET_RESOURCES([updatedProject])); + dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Property has been successfully added.", hideDuration: 2000, kind: SnackbarKind.SUCCESS })); + dispatch(stopSubmit(PROJECT_PROPERTIES_FORM_NAME)); } catch (e) { - dispatch(dialogActions.CLOSE_DIALOG({ id: PROJECT_PROPERTIES_FORM_NAME })); - throw new Error('Could not add property to the project.'); + dispatch(snackbarActions.OPEN_SNACKBAR({ message: e.errors[0], hideDuration: 2000, kind: SnackbarKind.ERROR })); } }; export const toggleDetailsPanel = () => (dispatch: Dispatch) => { -- 2.30.2