[ARVADOS-WORKBENCH2] updated: 1.3.0-95-g4223548

Git user git at public.curoverse.com
Tue Dec 11 07:46:51 EST 2018


Summary of changes:
 src/models/link.ts                                 |  3 +-
 src/models/resource.ts                             |  1 +
 src/store/groups-panel/groups-panel-actions.ts     | 56 +++++++++++++++++++++-
 .../groups-panel-middleware-service.ts             | 10 ++++
 src/views/groups-panel/groups-panel.tsx            | 27 +++++++++--
 5 files changed, 90 insertions(+), 7 deletions(-)

       via  4223548258ddb3dd7bfb9c520c7c8eb3b5e80f84 (commit)
       via  840b8a123e8161b807e14f5bc8520ffaebf56dd4 (commit)
       via  52a9925b1ab918d66f1508c948e0db8e99568ccf (commit)
       via  31ee65844dcecdae8d2e95535853a9b04a7c4d1c (commit)
      from  13756f84c880e5a6f83a4f416303beb8cd7bc659 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 4223548258ddb3dd7bfb9c520c7c8eb3b5e80f84
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date:   Tue Dec 11 13:46:35 2018 +0100

    Create GroupMembersCount
    
    Feature #14505
    
    Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>

diff --git a/src/views/groups-panel/groups-panel.tsx b/src/views/groups-panel/groups-panel.tsx
index 416ec0e..0d318bc 100644
--- a/src/views/groups-panel/groups-panel.tsx
+++ b/src/views/groups-panel/groups-panel.tsx
@@ -4,7 +4,7 @@
 
 import * as React from 'react';
 import { connect } from 'react-redux';
-import { Grid, Button } from "@material-ui/core";
+import { Grid, Button, Typography } from "@material-ui/core";
 
 import { DataExplorer } from "~/views-components/data-explorer/data-explorer";
 import { DataColumns } from '~/components/data-table/data-table';
@@ -16,11 +16,13 @@ import { createTree } from '~/models/tree';
 import { GROUPS_PANEL_ID, openCreateGroupDialog } from '~/store/groups-panel/groups-panel-actions';
 import { noop } from 'lodash/fp';
 import { ContextMenuKind } from '~/views-components/context-menu/context-menu';
-import { getResource, ResourcesState } from '~/store/resources/resources';
+import { getResource, ResourcesState, filterResources } from '~/store/resources/resources';
 import { GroupResource } from '~/models/group';
 import { RootState } from '~/store/store';
 import { Dispatch } from 'redux';
 import { openContextMenu } from '~/store/context-menu/context-menu-actions';
+import { ResourceKind } from '~/models/resource';
+import { LinkClass, LinkResource } from '~/models/link';
 
 export enum GroupsPanelColumnNames {
     GROUP = "Name",
@@ -49,7 +51,7 @@ export const groupsPanelColumns: DataColumns<string> = [
         selected: true,
         configurable: true,
         filters: createTree(),
-        render: uuid => <span>0</span>,
+        render: uuid => <GroupMembersCount uuid={uuid} />,
     },
 ];
 
@@ -96,7 +98,7 @@ export const GroupsPanel = connect(
                     } />
             );
         }
-        
+
         handleContextMenu = (event: React.MouseEvent<HTMLElement>, resourceUuid: string) => {
             const resource = getResource<GroupResource>(resourceUuid)(this.props.resources);
             if (resource) {
@@ -110,3 +112,20 @@ export const GroupsPanel = connect(
             }
         }
     });
+
+
+const GroupMembersCount = connect(
+    (state: RootState, props: { uuid: string }) => {
+
+        const permissions = filterResources((resource: LinkResource) =>
+            resource.kind === ResourceKind.LINK &&
+            resource.linkClass === LinkClass.PERMISSION &&
+            resource.headUuid === props.uuid
+        )(state.resources);
+
+        return {
+            children: permissions.length,
+        };
+
+    }
+)(Typography);

commit 840b8a123e8161b807e14f5bc8520ffaebf56dd4
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date:   Tue Dec 11 13:45:59 2018 +0100

    Add loading permissions for requested groups
    
    Feature #14505
    
    Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>

diff --git a/src/store/groups-panel/groups-panel-middleware-service.ts b/src/store/groups-panel/groups-panel-middleware-service.ts
index e51fad9..d3ff593 100644
--- a/src/store/groups-panel/groups-panel-middleware-service.ts
+++ b/src/store/groups-panel/groups-panel-middleware-service.ts
@@ -64,6 +64,16 @@ export class GroupsPanelMiddlewareService extends DataExplorerMiddlewareService
                     items: response.items.map(item => item.uuid),
                 }));
 
+                const permissions = await this.services.permissionService.list({
+
+                    filters: new FilterBuilder()
+                        .addIn('headUuid', response.items.map(item => item.uuid))
+                        .getFilters()
+
+                });
+
+                api.dispatch(updateResources(permissions.items));
+
 
             } catch (e) {
 

commit 52a9925b1ab918d66f1508c948e0db8e99568ccf
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date:   Tue Dec 11 13:44:32 2018 +0100

    Add permission links creation to createGroup action
    
    Feature #14505
    
    Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>

diff --git a/src/store/groups-panel/groups-panel-actions.ts b/src/store/groups-panel/groups-panel-actions.ts
index e5cb2d9..1af7a2e 100644
--- a/src/store/groups-panel/groups-panel-actions.ts
+++ b/src/store/groups-panel/groups-panel-actions.ts
@@ -13,6 +13,8 @@ import { getResource } from '~/store/resources/resources';
 import { GroupResource } from '~/models/group';
 import { getCommonResourceServiceError, CommonResourceServiceError } from '~/services/common-service/common-resource-service';
 import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions';
+import { PermissionLevel } from '~/models/permission';
+import { PermissionService } from '~/services/permission-service/permission-service';
 
 export const GROUPS_PANEL_ID = "groupsPanel";
 export const CREATE_GROUP_DIALOG = "createGroupDialog";
@@ -65,8 +67,8 @@ export interface CreateGroupFormData {
     [CREATE_GROUP_USERS_FIELD_NAME]?: Person[];
 }
 
-export const createGroup = ({ name }: CreateGroupFormData) =>
-    async (dispatch: Dispatch, _: {}, { groupsService }: ServiceRepository) => {
+export const createGroup = ({ name, users = [] }: CreateGroupFormData) =>
+    async (dispatch: Dispatch, _: {}, { groupsService, permissionService }: ServiceRepository) => {
 
         dispatch(startSubmit(CREATE_GROUP_FORM));
 
@@ -74,6 +76,26 @@ export const createGroup = ({ name }: CreateGroupFormData) =>
 
             const newGroup = await groupsService.create({ name });
 
+            for (const user of users) {
+
+                await createPermissionLink({
+                    head: { ...newGroup },
+                    tail: { ...user },
+                    permissionLevel: PermissionLevel.CAN_READ,
+                    dispatch,
+                    permissionService,
+                });
+
+                await createPermissionLink({
+                    head: { ...user },
+                    tail: { ...newGroup },
+                    permissionLevel: PermissionLevel.CAN_READ,
+                    dispatch,
+                    permissionService,
+                });
+
+            }
+
             dispatch(dialogActions.CLOSE_DIALOG({ id: CREATE_GROUP_DIALOG }));
             dispatch(reset(CREATE_GROUP_FORM));
             dispatch(loadGroupsPanel());
@@ -95,3 +117,33 @@ export const createGroup = ({ name }: CreateGroupFormData) =>
 
         }
     };
+
+
+interface CreatePermissionLinkArgs {
+    head: { uuid: string, name: string };
+    tail: { uuid: string, name: string };
+    permissionLevel: PermissionLevel;
+    dispatch: Dispatch;
+    permissionService: PermissionService;
+}
+
+const createPermissionLink = async ({ head, tail, permissionLevel, dispatch, permissionService }: CreatePermissionLinkArgs) => {
+
+    try {
+
+        await permissionService.create({
+            tailUuid: tail.uuid,
+            headUuid: head.uuid,
+            name: permissionLevel,
+        });
+
+    } catch (e) {
+
+        dispatch(snackbarActions.OPEN_SNACKBAR({
+            message: `Could not add ${tail.name} -> ${head.name} relation`,
+            kind: SnackbarKind.ERROR,
+        }));
+
+    }
+
+};
\ No newline at end of file

commit 31ee65844dcecdae8d2e95535853a9b04a7c4d1c
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date:   Tue Dec 11 13:28:57 2018 +0100

    Add missing link resource kind
    
    Feature #14505
    
    Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>

diff --git a/src/models/link.ts b/src/models/link.ts
index baaff65..1798e44 100644
--- a/src/models/link.ts
+++ b/src/models/link.ts
@@ -2,7 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { Resource } from "./resource";
+import { Resource, ResourceKind } from "./resource";
 import { TagProperty } from "~/models/tag";
 
 export interface LinkResource extends Resource {
@@ -11,6 +11,7 @@ export interface LinkResource extends Resource {
     linkClass: string;
     name: string;
     properties: TagProperty;
+    kind: ResourceKind.LINK;
 }
 
 export enum LinkClass {
diff --git a/src/models/resource.ts b/src/models/resource.ts
index eddcd5a..232b21a 100644
--- a/src/models/resource.ts
+++ b/src/models/resource.ts
@@ -26,6 +26,7 @@ export enum ResourceKind {
     CONTAINER = "arvados#container",
     CONTAINER_REQUEST = "arvados#containerRequest",
     GROUP = "arvados#group",
+    LINK = "arvados#link",
     LOG = "arvados#log",
     NODE = "arvados#node",
     PROCESS = "arvados#containerRequest",

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list