Merge branch 'master' into 13990-collection-files-service-based-on-webdav
[arvados-workbench2.git] / src / store / details-panel / details-panel-action.ts
index c4acf5aa9b3710fac0a3f61a905132651f8709da..b8021fb6a0d81d12588b2efe921a0d3142c7df6c 100644 (file)
@@ -4,14 +4,15 @@
 
 import { unionize, ofType, UnionOf } from "unionize";
 import { Dispatch } from "redux";
-import { Resource, ResourceKind } from "../../models/resource";
+import { Resource, ResourceKind } from "~/models/resource";
 import { RootState } from "../store";
-import { ServiceRepository } from "../../services/services";
+import { ServiceRepository } from "~/services/services";
 
 export const detailsPanelActions = unionize({
     TOGGLE_DETAILS_PANEL: ofType<{}>(),
     LOAD_DETAILS: ofType<{ uuid: string, kind: ResourceKind }>(),
     LOAD_DETAILS_SUCCESS: ofType<{ item: Resource }>(),
+    UPDATE_DETAILS: ofType<{ item: Resource }>()
 }, { tag: 'type', value: 'payload' });
 
 export type DetailsPanelAction = UnionOf<typeof detailsPanelActions>;
@@ -23,6 +24,16 @@ export const loadDetails = (uuid: string, kind: ResourceKind) =>
         dispatch(detailsPanelActions.LOAD_DETAILS_SUCCESS({ item }));
     };
 
+export const updateDetails = (item: Resource) => 
+    async (dispatch: Dispatch, getState: () => RootState) => {
+        const currentItem = getState().detailsPanel.item;
+        if (currentItem && (currentItem.uuid === item.uuid)) {
+            dispatch(detailsPanelActions.UPDATE_DETAILS({ item }));
+            dispatch(detailsPanelActions.LOAD_DETAILS_SUCCESS({ item }));
+        }
+    };
+
+
 const getService = (services: ServiceRepository, kind: ResourceKind) => {
     switch (kind) {
         case ResourceKind.PROJECT: