Setup navigation and create slot for groups panel
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Mon, 10 Dec 2018 14:16:49 +0000 (15:16 +0100)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Mon, 10 Dec 2018 14:16:49 +0000 (15:16 +0100)
Feature #14505

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/routes/route-change-handlers.ts
src/routes/routes.ts
src/store/navigation/navigation-action.ts
src/store/workbench/workbench-actions.ts
src/views-components/main-app-bar/account-menu.tsx
src/views/workbench/workbench.tsx

index e2454d63ac1aea6eaa6d1ac0fcba9dc0e384dd4e..cbcc065b91bb7f0ad61673095810dac401cebae2 100644 (file)
@@ -34,6 +34,7 @@ const handleLocationChange = (store: RootStore) => ({ pathname }: Location) => {
     const apiClientAuthorizationsMatch = Routes.matchApiClientAuthorizationsRoute(pathname);
     const myAccountMatch = Routes.matchMyAccountRoute(pathname);
     const userMatch = Routes.matchUsersRoute(pathname);
+    const groupsMatch = Routes.matchGroupsRoute(pathname);
 
     if (projectMatch) {
         store.dispatch(WorkbenchActions.loadProject(projectMatch.params.id));
@@ -73,5 +74,7 @@ const handleLocationChange = (store: RootStore) => ({ pathname }: Location) => {
         store.dispatch(WorkbenchActions.loadMyAccount);
     }else if (userMatch) {
         store.dispatch(WorkbenchActions.loadUsers);
+    } else if (groupsMatch) {
+        store.dispatch(WorkbenchActions.loadGroupsPanel);
     }
 };
index 88dfd46951945928336079381035e70e1733ae07..2c6dbea5e883ff8979c538ad353b073324429f59 100644 (file)
@@ -27,7 +27,8 @@ export const Routes = {
     KEEP_SERVICES: `/keep-services`,
     COMPUTE_NODES: `/nodes`,
     USERS: '/users',
-    API_CLIENT_AUTHORIZATIONS: `/api_client_authorizations`
+    API_CLIENT_AUTHORIZATIONS: `/api_client_authorizations`,
+    GROUPS: '/groups',
 };
 
 export const getResourceUrl = (uuid: string) => {
@@ -108,3 +109,6 @@ export const matchComputeNodesRoute = (route: string) =>
 
 export const matchApiClientAuthorizationsRoute = (route: string) =>
     matchPath(route, { path: Routes.API_CLIENT_AUTHORIZATIONS });
+
+export const matchGroupsRoute = (route: string) =>
+    matchPath(route, { path: Routes.GROUPS });
index 8d68a4b6856e4179260a95315eac5158f4c8a95f..8fef0ea7c2ecbbd05d456e1fc146a68b418ae028 100644 (file)
@@ -77,3 +77,5 @@ export const navigateToComputeNodes = push(Routes.COMPUTE_NODES);
 export const navigateToUsers = push(Routes.USERS);
 
 export const navigateToApiClientAuthorizations = push(Routes.API_CLIENT_AUTHORIZATIONS);
+
+export const navigateToGroups = push(Routes.GROUPS);
index bc5eac6c8bcaa41ea74ea96ab4de5aeb8163837a..e0195f9409925f88de46241c4ab058920d2497e8 100644 (file)
@@ -445,6 +445,11 @@ export const loadApiClientAuthorizations = handleFirstTimeLoad(
         await dispatch(loadApiClientAuthorizationsPanel());
     });
 
+export const loadGroupsPanel = handleFirstTimeLoad(
+    (dispatch: Dispatch<any>) => {
+        dispatch(setBreadcrumbs([{ label: 'Groups' }]));
+    });
+
 const finishLoadingProject = (project: GroupContentsResource | string) =>
     async (dispatch: Dispatch<any>) => {
         const uuid = typeof project === 'string' ? project : project.uuid;
index 44b113df39e6b33a347bd661680d4af3312dae04..cb8fd5665c692f62aa2afec07c7c6a7d3c07db44 100644 (file)
@@ -14,7 +14,7 @@ import { openCurrentTokenDialog } from '~/store/current-token-dialog/current-tok
 import { openRepositoriesPanel } from "~/store/repositories/repositories-actions";
 import { 
     navigateToSshKeys, navigateToKeepServices, navigateToComputeNodes,
-    navigateToApiClientAuthorizations, navigateToMyAccount
+    navigateToApiClientAuthorizations, navigateToMyAccount, navigateToGroups
 } from '~/store/navigation/navigation-action';
 import { openVirtualMachines } from "~/store/virtual-machines/virtual-machines-actions";
 import { navigateToUsers } from '~/store/navigation/navigation-action';
@@ -42,6 +42,7 @@ export const AccountMenu = connect(mapStateToProps)(
                 <MenuItem onClick={() => dispatch(openCurrentTokenDialog)}>Current token</MenuItem>
                 <MenuItem onClick={() => dispatch(navigateToSshKeys)}>Ssh Keys</MenuItem>
                 <MenuItem onClick={() => dispatch(navigateToUsers)}>Users</MenuItem>
+                { user.isAdmin && <MenuItem onClick={() => dispatch(navigateToGroups)}>Groups</MenuItem> }
                 { user.isAdmin && <MenuItem onClick={() => dispatch(navigateToApiClientAuthorizations)}>Api Tokens</MenuItem> }
                 { user.isAdmin && <MenuItem onClick={() => dispatch(navigateToKeepServices)}>Keep Services</MenuItem> }
                 { user.isAdmin && <MenuItem onClick={() => dispatch(navigateToComputeNodes)}>Compute Nodes</MenuItem> }
index 70f2a2ddd207a7303851d542e999d589be24b175..f4124e26d33829f17561e5af1792174c17fb483b 100644 (file)
@@ -152,6 +152,7 @@ export const WorkbenchPanel =
                                 <Route path={Routes.COMPUTE_NODES} component={ComputeNodePanel} />
                                 <Route path={Routes.API_CLIENT_AUTHORIZATIONS} component={ApiClientAuthorizationPanel} />
                                 <Route path={Routes.MY_ACCOUNT} component={MyAccountPanel} />
+                                <Route path={Routes.GROUPS} component={() => <h1>Groups panel</h1>} />
                             </Switch>
                         </Grid>
                     </Grid>