[ARVADOS-WORKBENCH2] updated: 2.2.1-108-ga23b00ac
Git user
git at public.arvados.org
Thu Oct 7 04:19:30 UTC 2021
Summary of changes:
.../group-details-panel-actions.ts | 14 ++--
.../group-details-panel-middleware-service.ts | 29 ++++++--
src/store/workbench/workbench-actions.ts | 3 +-
.../group-details-panel/group-details-panel.tsx | 85 +++++++++++++++++-----
4 files changed, 99 insertions(+), 32 deletions(-)
via a23b00ac57d0ba8aa51e54845e166ffc66e60aa5 (commit)
from 29c715dab58f6d17f0ecebfa477882ad87b5e248 (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 a23b00ac57d0ba8aa51e54845e166ffc66e60aa5
Author: Stephen Smith <stephen at curii.com>
Date: Thu Oct 7 00:19:11 2021 -0400
18123: Add permissions data explorer and tab in groups edit
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen at curii.com>
diff --git a/src/store/group-details-panel/group-details-panel-actions.ts b/src/store/group-details-panel/group-details-panel-actions.ts
index 01e6c151..5a190a5f 100644
--- a/src/store/group-details-panel/group-details-panel-actions.ts
+++ b/src/store/group-details-panel/group-details-panel-actions.ts
@@ -18,19 +18,23 @@ import { PermissionResource } from 'models/permission';
import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions';
import { UserResource, getUserDisplayName } from 'models/user';
-export const GROUP_DETAILS_PANEL_ID = 'groupDetailsPanel';
+export const GROUP_DETAILS_PANEL_ID = 'groupMembersPanel';
+export const GROUP_PERMISSIONS_PANEL_ID = 'groupPermissionsPanel';
export const ADD_GROUP_MEMBERS_DIALOG = 'addGrupMembers';
export const ADD_GROUP_MEMBERS_FORM = 'addGrupMembers';
export const ADD_GROUP_MEMBERS_USERS_FIELD_NAME = 'users';
export const MEMBER_ATTRIBUTES_DIALOG = 'memberAttributesDialog';
export const MEMBER_REMOVE_DIALOG = 'memberRemoveDialog';
-export const GroupDetailsPanelActions = bindDataExplorerActions(GROUP_DETAILS_PANEL_ID);
+export const GroupMembersPanelActions = bindDataExplorerActions(GROUP_DETAILS_PANEL_ID);
+export const GroupPermissionsPanelActions = bindDataExplorerActions(GROUP_PERMISSIONS_PANEL_ID);
export const loadGroupDetailsPanel = (groupUuid: string) =>
(dispatch: Dispatch) => {
dispatch(propertiesActions.SET_PROPERTY({ key: GROUP_DETAILS_PANEL_ID, value: groupUuid }));
- dispatch(GroupDetailsPanelActions.REQUEST_ITEMS());
+ dispatch(GroupMembersPanelActions.REQUEST_ITEMS());
+ dispatch(propertiesActions.SET_PROPERTY({ key: GROUP_PERMISSIONS_PANEL_ID, value: groupUuid }));
+ dispatch(GroupPermissionsPanelActions.REQUEST_ITEMS());
};
export const getCurrentGroupDetailsPanelUuid = getProperty<string>(GROUP_DETAILS_PANEL_ID);
@@ -72,7 +76,7 @@ export const addGroupMembers = ({ users }: AddGroupMembersFormData) =>
}
dispatch(dialogActions.CLOSE_DIALOG({ id: ADD_GROUP_MEMBERS_FORM }));
- dispatch(GroupDetailsPanelActions.REQUEST_ITEMS());
+ dispatch(GroupMembersPanelActions.REQUEST_ITEMS());
}
};
@@ -124,7 +128,7 @@ export const removeGroupMember = (uuid: string) =>
});
dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removed.', hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
- dispatch(GroupDetailsPanelActions.REQUEST_ITEMS());
+ dispatch(GroupMembersPanelActions.REQUEST_ITEMS());
}
diff --git a/src/store/group-details-panel/group-details-panel-middleware-service.ts b/src/store/group-details-panel/group-details-panel-middleware-service.ts
index 834b4c21..67f72391 100644
--- a/src/store/group-details-panel/group-details-panel-middleware-service.ts
+++ b/src/store/group-details-panel/group-details-panel-middleware-service.ts
@@ -10,7 +10,7 @@ import { snackbarActions, SnackbarKind } from 'store/snackbar/snackbar-actions';
import { getDataExplorer } from "store/data-explorer/data-explorer-reducer";
import { FilterBuilder } from 'services/api/filter-builder';
import { updateResources } from 'store/resources/resources-actions';
-import { getCurrentGroupDetailsPanelUuid, GroupDetailsPanelActions } from 'store/group-details-panel/group-details-panel-actions';
+import { getCurrentGroupDetailsPanelUuid, GroupMembersPanelActions, GroupPermissionsPanelActions } from 'store/group-details-panel/group-details-panel-actions';
import { LinkClass } from 'models/link';
export class GroupDetailsPanelMiddlewareService extends DataExplorerMiddlewareService {
@@ -26,23 +26,40 @@ export class GroupDetailsPanelMiddlewareService extends DataExplorerMiddlewareSe
api.dispatch(groupsDetailsPanelDataExplorerIsNotSet());
} else {
try {
- const permissions = await this.services.permissionService.list({
+ const permissionsIn = await this.services.permissionService.list({
+ filters: new FilterBuilder()
+ .addEqual('head_uuid', groupUuid)
+ .addEqual('link_class', LinkClass.PERMISSION)
+ .getFilters()
+ });
+ api.dispatch(updateResources(permissionsIn.items));
+ const permissionsOut = await this.services.permissionService.list({
filters: new FilterBuilder()
.addEqual('tail_uuid', groupUuid)
.addEqual('link_class', LinkClass.PERMISSION)
.getFilters()
});
- api.dispatch(updateResources(permissions.items));
+ api.dispatch(updateResources(permissionsOut.items));
const users = await this.services.userService.list({
filters: new FilterBuilder()
- .addIn('uuid', permissions.items.map(item => item.headUuid))
+ .addIn('uuid', permissionsIn.items.map(item => item.tailUuid))
.getFilters(),
count: "none"
});
- api.dispatch(GroupDetailsPanelActions.SET_ITEMS({
- ...listResultsToDataExplorerItemsMeta(permissions),
+ const usersOut = await this.services.userService.list({
+ filters: new FilterBuilder()
+ .addIn('uuid', permissionsOut.items.map(item => item.tailUuid))
+ .getFilters(),
+ count: "none"
+ });
+ api.dispatch(GroupMembersPanelActions.SET_ITEMS({
+ ...listResultsToDataExplorerItemsMeta(permissionsIn),
items: users.items.map(item => item.uuid),
}));
+ api.dispatch(GroupPermissionsPanelActions.SET_ITEMS({
+ ...listResultsToDataExplorerItemsMeta(permissionsOut),
+ items: usersOut.items.map(item => item.uuid),
+ }));
api.dispatch(updateResources(users.items));
} catch (e) {
api.dispatch(couldNotFetchGroupDetailsContents());
diff --git a/src/store/workbench/workbench-actions.ts b/src/store/workbench/workbench-actions.ts
index 6ea30855..1ee0a9f8 100644
--- a/src/store/workbench/workbench-actions.ts
+++ b/src/store/workbench/workbench-actions.ts
@@ -136,7 +136,8 @@ export const loadWorkbench = () =>
dispatch(searchResultsPanelActions.SET_COLUMNS({ columns: searchResultsPanelColumns }));
dispatch(userBindedActions.SET_COLUMNS({ columns: userPanelColumns }));
dispatch(groupPanelActions.GroupsPanelActions.SET_COLUMNS({ columns: groupsPanelColumns }));
- dispatch(groupDetailsPanelActions.GroupDetailsPanelActions.SET_COLUMNS({ columns: groupDetailsPanelColumns }));
+ dispatch(groupDetailsPanelActions.GroupMembersPanelActions.SET_COLUMNS({ columns: groupDetailsPanelColumns }));
+ dispatch(groupDetailsPanelActions.GroupPermissionsPanelActions.SET_COLUMNS({ columns: groupDetailsPanelColumns }));
dispatch(linkPanelActions.SET_COLUMNS({ columns: linkPanelColumns }));
dispatch(apiClientAuthorizationsActions.SET_COLUMNS({ columns: apiClientAuthorizationPanelColumns }));
dispatch(collectionsContentAddressActions.SET_COLUMNS({ columns: collectionContentAddressPanelColumns }));
diff --git a/src/views/group-details-panel/group-details-panel.tsx b/src/views/group-details-panel/group-details-panel.tsx
index faf7b3ae..3885ec18 100644
--- a/src/views/group-details-panel/group-details-panel.tsx
+++ b/src/views/group-details-panel/group-details-panel.tsx
@@ -11,7 +11,7 @@ import { ResourceFullName, ResourceUuid, ResourceEmail, ResourceUsername } from
import { createTree } from 'models/tree';
import { noop } from 'lodash/fp';
import { RootState } from 'store/store';
-import { GROUP_DETAILS_PANEL_ID, openAddGroupMembersDialog } from 'store/group-details-panel/group-details-panel-actions';
+import { GROUP_DETAILS_PANEL_ID, GROUP_PERMISSIONS_PANEL_ID, openAddGroupMembersDialog } from 'store/group-details-panel/group-details-panel-actions';
import { openContextMenu } from 'store/context-menu/context-menu-actions';
import { ResourcesState, getResource } from 'store/resources/resources';
import { ContextMenuKind } from 'views-components/context-menu/context-menu';
@@ -78,27 +78,69 @@ export const GroupDetailsPanel = connect(
mapStateToProps, mapDispatchToProps
)(
class GroupDetailsPanel extends React.Component<GroupDetailsPanelProps> {
+ state = {
+ value: 0,
+ };
+
+ componentDidMount() {
+ this.setState({ value: 0 });
+ }
render() {
+ const { value } = this.state;
return (
- <DataExplorer
- id={GROUP_DETAILS_PANEL_ID}
- onRowClick={noop}
- onRowDoubleClick={noop}
- onContextMenu={this.handleContextMenu}
- contextMenuColumn={true}
- hideColumnSelector
- hideSearchInput
- actions={
- <Grid container justify='flex-end'>
- <Button
- variant="contained"
- color="primary"
- onClick={this.props.onAddUser}>
- <AddIcon /> Add user
- </Button>
- </Grid>
- } />
+ <Paper>
+ <Tabs value={value} onChange={this.handleChange} fullWidth>
+ <Tab label="MEMBERS" />
+ <Tab label="PERMISSIONS" />
+ </Tabs>
+ {value === 0 &&
+ <DataExplorer
+ id={GROUP_DETAILS_PANEL_ID}
+ onRowClick={noop}
+ onRowDoubleClick={noop}
+ onContextMenu={this.handleContextMenu}
+ contextMenuColumn={true}
+ hideColumnSelector
+ hideSearchInput
+ actions={
+ <Grid container justify='flex-end'>
+ <Button
+ variant="contained"
+ color="primary"
+ onClick={this.props.onAddUser}>
+ <AddIcon /> Add user
+ </Button>
+ </Grid>
+ }
+ paperProps={{
+ elevation: 0,
+ }} />
+ }
+ {value === 1 &&
+ <DataExplorer
+ id={GROUP_PERMISSIONS_PANEL_ID}
+ onRowClick={noop}
+ onRowDoubleClick={noop}
+ onContextMenu={this.handleContextMenu}
+ contextMenuColumn={true}
+ hideColumnSelector
+ hideSearchInput
+ actions={
+ <Grid container justify='flex-end'>
+ <Button
+ variant="contained"
+ color="primary"
+ onClick={this.props.onAddUser}>
+ <AddIcon /> Add user
+ </Button>
+ </Grid>
+ }
+ paperProps={{
+ elevation: 0,
+ }} />
+ }
+ </Paper>
);
}
@@ -114,5 +156,8 @@ export const GroupDetailsPanel = connect(
});
}
}
- });
+ handleChange = (event: React.MouseEvent<HTMLElement>, value: number) => {
+ this.setState({ value });
+ }
+ });
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list