merge master
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Thu, 27 Sep 2018 14:12:37 +0000 (16:12 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Thu, 27 Sep 2018 14:12:37 +0000 (16:12 +0200)
Feature #13857

Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>

1  2 
src/index.tsx
src/store/navigation/navigation-action.ts
src/store/side-panel-tree/side-panel-tree-actions.ts
src/store/workbench/workbench-actions.ts
src/views/workbench/workbench.tsx

diff --cc src/index.tsx
index f81e9da9b832dff89cabb4b5f9fbae74ab776c77,52852847355b79bce73b8307481166176991470e..d0154b663e0a9150419edbf437ac1b1eb729405d
@@@ -36,9 -36,9 +36,10 @@@ import { initWebSocket } from '~/websoc
  import { Config } from '~/common/config';
  import { addRouteChangeHandlers } from './routes/route-change-handlers';
  import { setCurrentTokenDialogApiHost } from '~/store/current-token-dialog/current-token-dialog-actions';
- import { processResourceActionSet } from './views-components/context-menu/action-sets/process-resource-action-set';
+ import { processResourceActionSet } from '~/views-components/context-menu/action-sets/process-resource-action-set';
  import { progressIndicatorActions } from '~/store/progress-indicator/progress-indicator-actions';
 +import { setUuidPrefix } from '~/store/workflow-panel/workflow-panel-actions';
+ import { trashedCollectionActionSet } from '~/views-components/context-menu/action-sets/trashed-collection-action-set';
  
  const getBuildNumber = () => "BN-" + (process.env.REACT_APP_BUILD_NUMBER || "dev");
  const getGitCommit = () => "GIT-" + (process.env.REACT_APP_GIT_COMMIT || "latest").substr(0, 7);
index d332e0fca600dc03c6c3f9c6ebc944ac0edb7cbf,943f38ce98b4eb633b6d369c2bcc2313d85d932f..c8a554c7651ea5d5f955ab11bb91051ee96626b2
@@@ -26,8 -26,8 +26,10 @@@ export const navigateTo = (uuid: string
              dispatch<any>(navigateToFavorites);
          } else if (uuid === SidePanelTreeCategory.SHARED_WITH_ME) {
              dispatch(navigateToSharedWithMe);
 +        } else if (uuid === SidePanelTreeCategory.WORKFLOWS) {
 +            dispatch(navigateToWorkflows);
+         } else if (uuid === SidePanelTreeCategory.TRASH) {
+             dispatch(navigateToTrash);
          }
      };
  
index 073de22c4ea4b9fa30aae1b15fc2311dfc706fe0,3fd2d68af6930946c933657a8d59aec8dfdcddc6..22a83dda8c9f71b130e5b8251b3e8d8c321bb714
@@@ -13,6 -13,8 +13,7 @@@ import { getTreePicker, TreePicker } fr
  import { TreeItemStatus } from "~/components/tree/tree";
  import { getNodeAncestors, getNodeValue, getNodeAncestorsIds, getNode } from '~/models/tree';
  import { ProjectResource } from '~/models/project';
 -import { progressIndicatorActions } from '../progress-indicator/progress-indicator-actions';
+ import { OrderBuilder } from '../../services/api/order-builder';
  
  export enum SidePanelTreeCategory {
      PROJECTS = 'Projects',
index 01b5b92c7b365515e70d276dddc1d307efebd25b,94b4b4f5bb7602f811b257edc08ab48289522618..8f034ec0383b4f61cb4e8b5b98ebe688e9da0e4f
@@@ -39,10 -38,12 +38,14 @@@ import { loadProcessPanel } from '~/sto
  import { sharedWithMePanelActions } from '~/store/shared-with-me-panel/shared-with-me-panel-actions';
  import { loadSharedWithMePanel } from '../shared-with-me-panel/shared-with-me-panel-actions';
  import { CopyFormDialogData } from '~/store/copy-dialog/copy-dialog';
 +import { loadWorkflowPanel, workflowPanelActions } from '~/store/workflow-panel/workflow-panel-actions';
 +import { workflowPanelColumns } from '~/views/workflow-panel/workflow-panel-view';
  import { progressIndicatorActions } from '~/store/progress-indicator/progress-indicator-actions';
  import { getProgressIndicator } from '../progress-indicator/progress-indicator-reducer';
+ import { ResourceKind, extractUuidKind } from '~/models/resource';
+ import { FilterBuilder } from '~/services/api/filter-builder';
+ import { GroupContentsResource } from '~/services/groups-service/groups-service';
+ import { unionize, ofType, UnionOf, MatchCases } from '~/common/unionize';
  
  export const WORKBENCH_LOADING_SCREEN = 'workbenchLoadingScreen';
  
@@@ -306,8 -347,58 +350,63 @@@ export const loadSharedWithMe = handleF
      await dispatch<any>(setSidePanelBreadcrumbs(SidePanelTreeCategory.SHARED_WITH_ME));
  });
  
 +export const loadWorkflow = handleFirstTimeLoad(async (dispatch: Dispatch<any>) => {
 +    dispatch(activateSidePanelTreeItem(SidePanelTreeCategory.WORKFLOWS));
 +    await dispatch(loadWorkflowPanel());
 +    dispatch(setSidePanelBreadcrumbs(SidePanelTreeCategory.WORKFLOWS));
 +});
+ const finishLoadingProject = (project: GroupContentsResource | string) =>
+     async (dispatch: Dispatch<any>) => {
+         const uuid = typeof project === 'string' ? project : project.uuid;
+         dispatch(openProjectPanel(uuid));
+         dispatch(loadDetailsPanel(uuid));
+         if (typeof project !== 'string') {
+             dispatch(updateResources([project]));
+         }
+     };
+ const loadGroupContentsResource = async (params: {
+     uuid: string,
+     userUuid: string,
+     services: ServiceRepository
+ }) => {
+     const filters = new FilterBuilder()
+         .addEqual('uuid', params.uuid)
+         .getFilters();
+     const { items } = await params.services.groupsService.contents(params.userUuid, {
+         filters,
+         recursive: true,
+         includeTrash: true,
+     });
+     const resource = items.shift();
+     let handler: GroupContentsHandler;
+     if (resource) {
+         handler = (resource.kind === ResourceKind.COLLECTION || resource.kind === ResourceKind.PROJECT) && resource.isTrashed
+             ? groupContentsHandlers.TRASHED(resource)
+             : groupContentsHandlers.OWNED(resource);
+     } else {
+         const kind = extractUuidKind(params.uuid);
+         let resource: GroupContentsResource;
+         if (kind === ResourceKind.COLLECTION) {
+             resource = await params.services.collectionService.get(params.uuid);
+         } else if (kind === ResourceKind.PROJECT) {
+             resource = await params.services.projectService.get(params.uuid);
+         } else {
+             resource = await params.services.containerRequestService.get(params.uuid);
+         }
+         handler = groupContentsHandlers.SHARED(resource);
+     }
+     return (cases: MatchCases<typeof groupContentsHandlersRecord, GroupContentsHandler, void>) =>
+         groupContentsHandlers.match(handler, cases);
+ };
+ const groupContentsHandlersRecord = {
+     TRASHED: ofType<GroupContentsResource>(),
+     SHARED: ofType<GroupContentsResource>(),
+     OWNED: ofType<GroupContentsResource>(),
+ };
+ const groupContentsHandlers = unionize(groupContentsHandlersRecord);
+ type GroupContentsHandler = UnionOf<typeof groupContentsHandlers>;
Simple merge