From dec2ef36e2dccc9315c2a78099c7120922d60805 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Mon, 15 Nov 2021 17:03:17 -0300 Subject: [PATCH] 18215: Always select 'version' & 'modified_at' for update calls. Also, update collection actions so that they merge the new data with the previously cached collection data. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- src/services/collection-service/collection-service.ts | 2 +- src/store/collection-panel/collection-panel-action.ts | 6 +++++- src/store/collections/collection-update-actions.ts | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/services/collection-service/collection-service.ts b/src/services/collection-service/collection-service.ts index 64c73cbf..0c3cda3b 100644 --- a/src/services/collection-service/collection-service.ts +++ b/src/services/collection-service/collection-service.ts @@ -33,7 +33,7 @@ export class CollectionService extends TrashableResourceService) { - const select = Object.keys(data) + const select = [...Object.keys(data), 'version', 'modifiedAt']; return super.update(uuid, { ...data, preserveVersion: true }, select); } diff --git a/src/store/collection-panel/collection-panel-action.ts b/src/store/collection-panel/collection-panel-action.ts index ca9542c5..ee476524 100644 --- a/src/store/collection-panel/collection-panel-action.ts +++ b/src/store/collection-panel/collection-panel-action.ts @@ -17,6 +17,7 @@ import { SnackbarKind } from 'store/snackbar/snackbar-actions'; import { navigateTo } from 'store/navigation/navigation-action'; import { loadDetailsPanel } from 'store/details-panel/details-panel-action'; import { addProperty, deleteProperty } from "lib/resource-properties"; +import { getResource } from "store/resources/resources"; export const collectionPanelActions = unionize({ SET_COLLECTION: ofType(), @@ -39,7 +40,6 @@ export const loadCollectionPanel = (uuid: string, forceReload = false) => dispatch(resourcesActions.SET_RESOURCES([collection])); if (collection.fileCount <= COLLECTION_PANEL_LOAD_FILES_THRESHOLD && !getState().collectionPanel.loadBigCollections) { - // dispatch(loadCollectionFiles(collection.uuid)); } return collection; }; @@ -52,11 +52,13 @@ export const createCollectionTag = (data: TagProperty) => const properties = Object.assign({}, item.properties); const key = data.keyID || data.key; const value = data.valueID || data.value; + const cachedCollection = getResource(item.uuid)(getState().resources); services.collectionService.update( item.uuid, { properties: addProperty(properties, key, value) } ).then(updatedCollection => { + updatedCollection = {...cachedCollection, ...updatedCollection}; dispatch(collectionPanelActions.SET_COLLECTION(updatedCollection)); dispatch(resourcesActions.SET_RESOURCES([updatedCollection])); dispatch(snackbarActions.OPEN_SNACKBAR({ @@ -89,11 +91,13 @@ export const deleteCollectionTag = (key: string, value: string) => if (!item) { return; } const properties = Object.assign({}, item.properties); + const cachedCollection = getResource(item.uuid)(getState().resources); services.collectionService.update( item.uuid, { properties: deleteProperty(properties, key, value) } ).then(updatedCollection => { + updatedCollection = {...cachedCollection, ...updatedCollection}; dispatch(collectionPanelActions.SET_COLLECTION(updatedCollection)); dispatch(resourcesActions.SET_RESOURCES([updatedCollection])); dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Tag has been successfully deleted.", hideDuration: 2000, kind: SnackbarKind.SUCCESS })); diff --git a/src/store/collections/collection-update-actions.ts b/src/store/collections/collection-update-actions.ts index a9077cfb..04f42b8d 100644 --- a/src/store/collections/collection-update-actions.ts +++ b/src/store/collections/collection-update-actions.ts @@ -14,6 +14,7 @@ import { progressIndicatorActions } from "store/progress-indicator/progress-indi import { snackbarActions, SnackbarKind } from "../snackbar/snackbar-actions"; import { updateResources } from "../resources/resources-actions"; import { loadDetailsPanel } from "../details-panel/details-panel-action"; +import { getResource } from "store/resources/resources"; export interface CollectionUpdateFormDialogData { uuid: string; @@ -36,11 +37,13 @@ export const updateCollection = (collection: CollectionUpdateFormDialogData) => dispatch(startSubmit(COLLECTION_UPDATE_FORM_NAME)); dispatch(progressIndicatorActions.START_WORKING(COLLECTION_UPDATE_FORM_NAME)); + const cachedCollection = getResource(collection.uuid)(getState().resources); services.collectionService.update(uuid, { name: collection.name, storageClassesDesired: collection.storageClassesDesired, description: collection.description } ).then(updatedCollection => { + updatedCollection = {...cachedCollection, ...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)); -- 2.30.2