cr changes
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Mon, 6 Aug 2018 12:43:52 +0000 (14:43 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Mon, 6 Aug 2018 12:43:52 +0000 (14:43 +0200)
Feature #13905

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

src/models/object-types.ts [new file with mode: 0644]
src/store/navigation/navigation-action.ts
src/views/project-panel/project-panel.tsx
src/views/workbench/workbench.tsx

diff --git a/src/models/object-types.ts b/src/models/object-types.ts
new file mode 100644 (file)
index 0000000..c01df75
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+const USER_UUID_REGEX = /.*tpzed.*/;
+const GROUP_UUID_REGEX = /.*-j7d0g-.*/;
+
+export enum ObjectTypes {
+    USER,
+    GROUP,
+    UNKNOWN
+}
+
+export const getUuidObjectType = (uuid: string) => {
+    switch(true) {
+       case USER_UUID_REGEX.test(uuid):
+          return ObjectTypes.USER;
+       case GROUP_UUID_REGEX.test(uuid):
+          return ObjectTypes.GROUP;
+       default:
+          return ObjectTypes.UNKNOWN;
+    }
+ };
\ No newline at end of file
index abdd6484fbe9a9abee11291bb6eced96ff13271f..defddadaada04a4b313b46121976353a16ea9a34 100644 (file)
@@ -16,6 +16,7 @@ import { ProjectService } from "../../services/project-service/project-service";
 import { ServiceRepository } from "../../services/services";
 import { sidePanelActions } from "../side-panel/side-panel-action";
 import { SidePanelIdentifiers } from "../side-panel/side-panel-reducer";
+import { getUuidObjectType, ObjectTypes } from "../../models/object-types";
 
 export const getResourceUrl = <T extends Resource>(resource: T): string => {
     switch (resource.kind) {
@@ -75,10 +76,8 @@ export const restoreBranch = (itemId: string) =>
         });
     };
 
-const USER_UUID_REGEX = /.*tpzed.*/;
-
 export const loadProjectAncestors = async (uuid: string, projectService: ProjectService): Promise<Array<ProjectResource>> => {
-    if (USER_UUID_REGEX.test(uuid)) {
+    if (getUuidObjectType(uuid) === ObjectTypes.USER) {
         return [];
     } else {
         const currentProject = await projectService.get(uuid);
index 5c3fb2b0421837c43cf2ae721de6306c50358bd3..63a57bbddb4ba7714feada5897ff6f133876fec2 100644 (file)
@@ -17,6 +17,7 @@ import { ResourceKind } from '../../models/resource';
 import { resourceLabel } from '../../common/labels';
 import { ArvadosTheme } from '../../common/custom-theme';
 import { renderName, renderStatus, renderType, renderOwner, renderFileSize, renderDate } from '../../views-components/data-explorer/renderers';
+import { restoreBranch } from '../../store/navigation/navigation-action';
 
 type CssRules = "toolbar" | "button";
 
@@ -128,6 +129,7 @@ export const PROJECT_PANEL_ID = "projectPanel";
 
 interface ProjectPanelDataProps {
     currentItemId: string;
+    isSidePanelOpen: boolean;
 }
 
 interface ProjectPanelActionProps {
@@ -143,7 +145,7 @@ type ProjectPanelProps = ProjectPanelDataProps & ProjectPanelActionProps & Dispa
     & WithStyles<CssRules> & RouteComponentProps<{ id: string }>;
 
 export const ProjectPanel = withStyles(styles)(
-    connect((state: RootState) => ({ currentItemId: state.projects.currentItemId }))(
+    connect((state: RootState) => ({ currentItemId: state.projects.currentItemId, isSidePanelOpen: state.sidePanel[0].open }))(
         class extends React.Component<ProjectPanelProps> {
             render() {
                 const { classes } = this.props;
@@ -176,11 +178,18 @@ export const ProjectPanel = withStyles(styles)(
             handleNewCollectionClick = () => {
                 this.props.onCollectionCreationDialogOpen(this.props.currentItemId);
             }
+
             componentWillReceiveProps({ match, currentItemId, onItemRouteChange }: ProjectPanelProps) {
                 if (match.params.id !== currentItemId) {
                     onItemRouteChange(match.params.id);
                 }
             }
+
+            componentDidMount() {
+                if (this.props.match.params.id && !this.props.isSidePanelOpen) {
+                    this.props.dispatch<any>(restoreBranch(this.props.match.params.id));
+                }
+            }
         }
     )
 );
index 5ffdf911e5cf2a2bf8bc09577b6725150e10f70a..56b7431357193e5a989a1d91098b8a271d2ea527 100644 (file)
@@ -93,7 +93,6 @@ interface WorkbenchDataProps {
     user?: User;
     currentToken?: string;
     sidePanelItems: SidePanelItem[];
-    router?: any;
 }
 
 interface WorkbenchServiceProps {
@@ -131,8 +130,7 @@ export const Workbench = withStyles(styles)(
             currentProjectId: state.projects.currentItemId,
             user: state.auth.user,
             currentToken: state.auth.apiToken,
-            sidePanelItems: state.sidePanel,
-            router: state.router.location
+            sidePanelItems: state.sidePanel
         })
     )(
         class extends React.Component<WorkbenchProps, WorkbenchState> {
@@ -172,19 +170,6 @@ export const Workbench = withStyles(styles)(
                 }
             };
 
-            componentDidMount() {
-                const PROJECT_URL_REGEX = /\/projects\/(.*)/;
-                const getProjectIdFromUrl = (url: string) => {
-                    const match = PROJECT_URL_REGEX.exec(url);
-                    return match ? match[1] : match;
-                };
-
-                const id = getProjectIdFromUrl(this.props.router.pathname);
-                if (id) {
-                    this.props.dispatch<any>(restoreBranch(id));
-                }
-            }
-
             render() {
                 const path = getTreePath(this.props.projects, this.props.currentProjectId);
                 const breadcrumbs = path.map(item => ({