From 83931f3e2ec3652900ed733f8a35f8be018d39d7 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Wed, 18 Nov 2020 18:43:45 -0300 Subject: [PATCH] 13494: Simplifies collection update action calling. Also makes action asynchronous, and refresh details panel after the update operation is done. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- .../collections/collection-update-actions.ts | 34 ++++++++++++++----- src/store/workbench/workbench-actions.ts | 19 ----------- .../dialog-forms/update-collection-dialog.ts | 3 +- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/store/collections/collection-update-actions.ts b/src/store/collections/collection-update-actions.ts index f8fac398..2faaa215 100644 --- a/src/store/collections/collection-update-actions.ts +++ b/src/store/collections/collection-update-actions.ts @@ -11,6 +11,10 @@ import { getCommonResourceServiceError, CommonResourceServiceError } from "~/ser import { ServiceRepository } from "~/services/services"; import { CollectionResource } from '~/models/collection'; import { progressIndicatorActions } from "~/store/progress-indicator/progress-indicator-actions"; +import { snackbarActions, SnackbarKind } from "../snackbar/snackbar-actions"; +import { updateResources } from "../resources/resources-actions"; +import { reloadProjectMatchingUuid } from "../workbench/workbench-actions"; +import { loadDetailsPanel } from "../details-panel/details-panel-action"; export interface CollectionUpdateFormDialogData { uuid: string; @@ -27,26 +31,38 @@ export const openCollectionUpdateDialog = (resource: CollectionUpdateFormDialogD }; export const updateCollection = (collection: CollectionUpdateFormDialogData) => - async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const uuid = collection.uuid || ''; dispatch(startSubmit(COLLECTION_UPDATE_FORM_NAME)); dispatch(progressIndicatorActions.START_WORKING(COLLECTION_UPDATE_FORM_NAME)); - try { - const updatedCollection = await services.collectionService.update(uuid, { name: collection.name, description: collection.description }); + + services.collectionService.update(uuid, { + name: collection.name, + description: collection.description } + ).then(updatedCollection => { dispatch(collectionPanelActions.LOAD_COLLECTION_SUCCESS({ item: updatedCollection as CollectionResource })); dispatch(dialogActions.CLOSE_DIALOG({ id: COLLECTION_UPDATE_FORM_NAME })); dispatch(progressIndicatorActions.STOP_WORKING(COLLECTION_UPDATE_FORM_NAME)); - return updatedCollection; - } catch (e) { + dispatch(snackbarActions.OPEN_SNACKBAR({ + message: "Collection has been successfully updated.", + hideDuration: 2000, + kind: SnackbarKind.SUCCESS + })); + dispatch(updateResources([updatedCollection])); + dispatch(reloadProjectMatchingUuid([updatedCollection.ownerUuid])); + dispatch(loadDetailsPanel(updatedCollection.uuid)); + }).catch (e => { dispatch(progressIndicatorActions.STOP_WORKING(COLLECTION_UPDATE_FORM_NAME)); const error = getCommonResourceServiceError(e); if (error === CommonResourceServiceError.UNIQUE_NAME_VIOLATION) { dispatch(stopSubmit(COLLECTION_UPDATE_FORM_NAME, { name: 'Collection with the same name already exists.' } as FormErrors)); } else { - // Unknown error, handling left to caller. dispatch(dialogActions.CLOSE_DIALOG({ id: COLLECTION_UPDATE_FORM_NAME })); - throw(e); + dispatch(snackbarActions.OPEN_SNACKBAR({ + message: e.errors.join(''), + hideDuration: 2000, + kind: SnackbarKind.ERROR })); + } } - } - return; + ); }; diff --git a/src/store/workbench/workbench-actions.ts b/src/store/workbench/workbench-actions.ts index 0416d815..09aad2bd 100644 --- a/src/store/workbench/workbench-actions.ts +++ b/src/store/workbench/workbench-actions.ts @@ -42,7 +42,6 @@ import * as projectMoveActions from '~/store/projects/project-move-actions'; import * as projectUpdateActions from '~/store/projects/project-update-actions'; import * as collectionCreateActions from '~/store/collections/collection-create-actions'; import * as collectionCopyActions from '~/store/collections/collection-copy-actions'; -import * as collectionUpdateActions from '~/store/collections/collection-update-actions'; import * as collectionMoveActions from '~/store/collections/collection-move-actions'; import * as processesActions from '~/store/processes/processes-actions'; import * as processMoveActions from '~/store/processes/process-move-actions'; @@ -323,24 +322,6 @@ export const createCollection = (data: collectionCreateActions.CollectionCreateF } }; -export const updateCollection = (data: collectionUpdateActions.CollectionUpdateFormDialogData) => - async (dispatch: Dispatch) => { - try { - const collection = await dispatch(collectionUpdateActions.updateCollection(data)); - if (collection) { - dispatch(snackbarActions.OPEN_SNACKBAR({ - message: "Collection has been successfully updated.", - hideDuration: 2000, - kind: SnackbarKind.SUCCESS - })); - dispatch(updateResources([collection])); - dispatch(reloadProjectMatchingUuid([collection.ownerUuid])); - } - } catch (e) { - dispatch(snackbarActions.OPEN_SNACKBAR({ message: e.errors.join(''), hideDuration: 2000, kind: SnackbarKind.ERROR })); - } - }; - export const copyCollection = (data: CopyFormDialogData) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { try { diff --git a/src/views-components/dialog-forms/update-collection-dialog.ts b/src/views-components/dialog-forms/update-collection-dialog.ts index 021a335b..b2fe96b8 100644 --- a/src/views-components/dialog-forms/update-collection-dialog.ts +++ b/src/views-components/dialog-forms/update-collection-dialog.ts @@ -6,8 +6,7 @@ import { compose } from "redux"; import { reduxForm } from 'redux-form'; import { withDialog } from "~/store/dialog/with-dialog"; import { DialogCollectionUpdate } from '~/views-components/dialog-update/dialog-collection-update'; -import { COLLECTION_UPDATE_FORM_NAME, CollectionUpdateFormDialogData } from '~/store/collections/collection-update-actions'; -import { updateCollection } from "~/store/workbench/workbench-actions"; +import { COLLECTION_UPDATE_FORM_NAME, CollectionUpdateFormDialogData, updateCollection } from '~/store/collections/collection-update-actions'; export const UpdateCollectionDialog = compose( withDialog(COLLECTION_UPDATE_FORM_NAME), -- 2.30.2