[ARVADOS-WORKBENCH2] updated: 2.3.0-112-g58db72fe

Git user git at public.arvados.org
Thu Dec 16 17:28:32 UTC 2021


Summary of changes:
 cypress/integration/group-manage.spec.js           | 284 +++++++++++++++++++++
 src/common/labels.ts                               |   2 +
 src/components/data-explorer/data-explorer.tsx     |   9 +-
 src/components/icon/icon.tsx                       |  13 +-
 src/index.tsx                                      |   2 +
 src/models/group.ts                                |  15 +-
 src/models/project.ts                              |   2 +-
 src/store/context-menu/context-menu-actions.ts     |  14 +
 .../group-details-panel-actions.ts                 | 138 +++++-----
 ...up-details-panel-members-middleware-service.ts} |  46 +++-
 ...etails-panel-permissions-middleware-service.ts} |  51 +++-
 src/store/groups-panel/groups-panel-actions.ts     |  83 +++---
 .../groups-panel-middleware-service.ts             |   5 +-
 src/store/navigation/navigation-action.ts          |   3 +-
 src/store/projects/project-update-actions.ts       |   8 +-
 src/store/resources/resources-actions.ts           |   2 +
 src/store/sharing-dialog/sharing-dialog-actions.ts |  37 ++-
 .../side-panel-tree/side-panel-tree-actions.ts     |   4 +-
 src/store/store.ts                                 |  15 +-
 src/store/workbench/workbench-actions.ts           |  19 +-
 .../context-menu/action-sets/group-action-set.ts   |  12 +-
 .../action-sets/permission-edit-action-set.ts      |  28 ++
 src/views-components/context-menu/context-menu.tsx |   1 +
 src/views-components/data-explorer/renderers.tsx   | 275 ++++++++++++++++----
 .../dialog-forms/add-group-member-dialog.tsx       |  49 ----
 .../dialog-forms/create-group-dialog.tsx           |  63 -----
 .../dialog-forms/update-project-dialog.ts          |  23 +-
 .../dialog-update/dialog-project-update.tsx        |  31 ++-
 .../form-fields/project-form-fields.tsx            |  16 +-
 .../side-panel-tree/side-panel-tree.tsx            |   4 +-
 .../group-details-panel/group-details-panel.tsx    | 199 +++++++++++----
 src/views/groups-panel/groups-panel.tsx            |  23 +-
 src/views/workbench/workbench.tsx                  |   4 -
 33 files changed, 1084 insertions(+), 396 deletions(-)
 create mode 100644 cypress/integration/group-manage.spec.js
 copy src/store/group-details-panel/{group-details-panel-middleware-service.ts => group-details-panel-members-middleware-service.ts} (55%)
 rename src/store/group-details-panel/{group-details-panel-middleware-service.ts => group-details-panel-permissions-middleware-service.ts} (50%)
 create mode 100644 src/views-components/context-menu/action-sets/permission-edit-action-set.ts
 delete mode 100644 src/views-components/dialog-forms/add-group-member-dialog.tsx
 delete mode 100644 src/views-components/dialog-forms/create-group-dialog.tsx

       via  58db72fee358d5987139a1b8526c0ca873e07dbf (commit)
       via  04ddc76f953ae6c61264a9c1fa5a8cade9e1773e (commit)
       via  7bf8014027507777a91a0266cf37beaa9841a2d1 (commit)
       via  df9197982583c61e6f142d37ca8e01a8277027d3 (commit)
       via  dfac252e5d6639c0bc6f106f1985fcdcd7402376 (commit)
       via  311448f71e5a5cc1ffcfe6d5b7c5214fa196f1b1 (commit)
       via  7e1669d2263cdf8e9066057fd126007b755ba7f5 (commit)
       via  e63239560b1393a8b306a4353719d4fe85698f04 (commit)
       via  7a84b16aa6cd37e14f5698cd51ea76b5d1805388 (commit)
       via  30e26a1c60eded910ed95c3c3f747b5cdb8774d2 (commit)
       via  5ea93d2e3c077f9cad78f8176a903ced7ceea62e (commit)
       via  2ec7fa451c0970c15c0b0d35fe70e473889f9ea3 (commit)
       via  4a917782a054773c2cb72f3ee364e2c0b02643e9 (commit)
       via  75f4aa52ad828eab58e43ea99bdded98b1a87aa1 (commit)
       via  2c257e34488b251e146631e12559732b3879d567 (commit)
       via  a3658215b1129e78e2dfd7496e1d5de8263b2351 (commit)
       via  416d4f0f57336b2225bcc82b0f4db8873adf8cd2 (commit)
       via  705b5cc1072bfb178195a90091e6d3dc120d193d (commit)
       via  103a2d417eb9dfae62cb72385de5e8d836bb15e9 (commit)
       via  0db26cfb0926f4f840d11bf85b66dfee921bf1f2 (commit)
       via  207429c4a8863bce7e53082179e3e3b78c67b073 (commit)
       via  134cf300692c9f09f1a79d02295e1d6b7242f32d (commit)
       via  844241adac4afa32679f07874e5c659896399fdc (commit)
       via  022c93cff94f9f253e1df177ad75dde0dde2597f (commit)
       via  e02fcdadca54f1dc970734f7c5ce0bc6407e10c6 (commit)
       via  de3aa7cd755ae48855c0a8031a67d66237755fe0 (commit)
       via  12d2c589092bc5cead8ded7ea2148949969bc477 (commit)
       via  5d0a0226a4ea4bb98f35d4ce76698f7a6606bfb4 (commit)
       via  1dcbe2d0ec3fdc613edca3a490d0adfce023a803 (commit)
       via  1277b2a092fbd057220ee43d6fc47bffff5933d1 (commit)
       via  b565525602ad5203d313abe6b898f1885e344abc (commit)
       via  d6c180028671059f19912a11887b804e9d63d608 (commit)
       via  703a2e1813ed1ff80d2ccd3214233240802b4754 (commit)
       via  8d40870a23aa60855ed4b1a43a0186b7d50c0d7d (commit)
       via  798064c6616d98f8b6b3dfe562458bffe662f4ad (commit)
       via  0399c993a117c3489f1fe0160d6a554a56b8bbab (commit)
       via  acceec90afa2a2b5007ab75795c911ac75446bc4 (commit)
       via  418b900ceaaace5aa2e844959dee9c41d35fbe2d (commit)
       via  2b6003f9be46bd178159a116886b02192e2ebfaa (commit)
       via  8a6c5e3b1ac52cdd6e7e07f8349da92b31216c76 (commit)
       via  55b1d7f984ac36dab63edc89e3b132b61fedbbfa (commit)
       via  cfa8c66b29ba7eb4cab946ab8bb2f58ca93bc80a (commit)
       via  237776fd3412409bf0a9c9f0ac538f82d4b4a8d4 (commit)
       via  de544885631caf7d6e6c1d9ae43763b4d612dfca (commit)
       via  b2485c13b72d66f5e207814a368b72334970afca (commit)
      from  fc84a3f3932af503d3afd04a58af52270c8fc3b6 (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 58db72fee358d5987139a1b8526c0ca873e07dbf
Merge: fc84a3f3 04ddc76f
Author: Stephen Smith <stephen at curii.com>
Date:   Thu Dec 16 12:27:26 2021 -0500

    Merge branch '18123-group-edit-page-rebase1' into main. Closes #18123
    
    Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen at curii.com>

diff --cc src/components/data-explorer/data-explorer.tsx
index 05125f12,928d3ed4..55840ae9
--- a/src/components/data-explorer/data-explorer.tsx
+++ b/src/components/data-explorer/data-explorer.tsx
@@@ -106,22 -94,19 +106,23 @@@ export const DataExplorer = withStyles(
                  rowsPerPage, rowsPerPageOptions, onColumnToggle, searchLabel, searchValue, onSearch,
                  items, itemsAvailable, onRowClick, onRowDoubleClick, classes,
                  dataTableDefaultView, hideColumnSelector, actions, paperProps, hideSearchInput,
 -                paperKey, fetchMode, currentItemUuid, title
 +                paperKey, fetchMode, currentItemUuid, title,
 +                doHidePanel, doMaximizePanel, panelName, panelMaximized
              } = this.props;
 +
-             return <Paper className={classes.root} {...paperProps} key={paperKey}>
+             const dataCy = this.props["data-cy"];
+             return <Paper className={classes.root} {...paperProps} key={paperKey} data-cy={dataCy}>
 -                {title && <div className={classes.title}>{title}</div>}
 -                {(!hideColumnSelector || !hideSearchInput || !!actions) && <Toolbar className={title ? classes.toolbarUnderTitle : classes.toolbar}>
 +                <Grid container direction="column" wrap="nowrap" className={classes.container}>
 +                {title && <Grid item xs className={classes.title}>{title}</Grid>}
-                 {(!hideColumnSelector || !hideSearchInput) && <Grid item xs><Toolbar className={title ? classes.toolbarUnderTitle : classes.toolbar}>
++                {(!hideColumnSelector || !hideSearchInput || !!actions) && <Grid item xs><Toolbar className={title ? classes.toolbarUnderTitle : classes.toolbar}>
                      <Grid container justify="space-between" wrap="nowrap" alignItems="center">
-                         <div className={classes.searchBox}>
+                         {!hideSearchInput && <div className={classes.searchBox}>
                              {!hideSearchInput && <SearchInput
                                  label={searchLabel}
                                  value={searchValue}
 +                                selfClearProp={currentItemUuid}
                                  onSearch={onSearch} />}
-                         </div>
+                         </div>}
                          {actions}
                          {!hideColumnSelector && <ColumnSelector
                              columns={columns}
diff --cc src/components/icon/icon.tsx
index 523eefbd,4543d8d9..15a9f02d
--- a/src/components/icon/icon.tsx
+++ b/src/components/icon/icon.tsx
@@@ -59,15 -59,14 +59,17 @@@ import SettingsEthernet from '@material
  import Star from '@material-ui/icons/Star';
  import StarBorder from '@material-ui/icons/StarBorder';
  import Warning from '@material-ui/icons/Warning';
 +import Visibility from '@material-ui/icons/Visibility';
 +import VisibilityOff from '@material-ui/icons/VisibilityOff';
  import VpnKey from '@material-ui/icons/VpnKey';
  import LinkOutlined from '@material-ui/icons/LinkOutlined';
+ import RemoveRedEye from '@material-ui/icons/RemoveRedEye';
+ import Computer from '@material-ui/icons/Computer';
  
  // Import FontAwesome icons
  import { library } from '@fortawesome/fontawesome-svg-core';
- import { faPencilAlt, faSlash } from '@fortawesome/free-solid-svg-icons';
+ import { faPencilAlt, faSlash, faUsers } from '@fortawesome/free-solid-svg-icons';
 +import { CropFreeSharp } from '@material-ui/icons';
  library.add(
      faPencilAlt,
      faSlash,
diff --cc src/views/group-details-panel/group-details-panel.tsx
index d0f79736,e47ff8c0..ce3f34c7
--- a/src/views/group-details-panel/group-details-panel.tsx
+++ b/src/views/group-details-panel/group-details-panel.tsx
@@@ -11,25 -11,33 +11,42 @@@ import { ResourceLinkHeadUuid, Resource
  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_MEMBERS_PANEL_ID, GROUP_DETAILS_PERMISSIONS_PANEL_ID, openAddGroupMembersDialog, getCurrentGroupDetailsPanelUuid } 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';
- import { PermissionResource } from 'models/permission';
- import { Grid, Button } from '@material-ui/core';
 -import { Grid, Button, Tabs, Tab, Paper } from '@material-ui/core';
++import { Grid, Button, Tabs, Tab, Paper, WithStyles, withStyles, StyleRulesCallback } from '@material-ui/core';
  import { AddIcon } from 'components/icon/icon';
+ import { getUserUuid } from 'common/getuser';
+ import { GroupResource, isBuiltinGroup } from 'models/group';
++import { ArvadosTheme } from 'common/custom-theme';
 +
- export enum GroupDetailsPanelColumnNames {
-     FIRST_NAME = "First name",
-     LAST_NAME = "Last name",
-     UUID = "UUID",
-     EMAIL = "Email",
++type CssRules = "root";
++
++const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
++    root: {
++        width: '100%',
++    }
++});
+ 
+ export enum GroupDetailsPanelMembersColumnNames {
+     FULL_NAME = "Name",
      USERNAME = "Username",
+     ACTIVE = "User Active",
+     VISIBLE = "Visible to other members",
+     PERMISSION = "Permission",
+     REMOVE = "Remove",
+ }
+ 
+ export enum GroupDetailsPanelPermissionsColumnNames {
+     NAME = "Name",
+     PERMISSION = "Permission",
+     UUID = "UUID",
+     REMOVE = "Remove",
  }
  
- export const groupDetailsPanelColumns: DataColumns<string> = [
+ export const groupDetailsMembersPanelColumns: DataColumns<string> = [
      {
-         name: GroupDetailsPanelColumnNames.FIRST_NAME,
+         name: GroupDetailsPanelMembersColumnNames.FULL_NAME,
          selected: true,
          configurable: true,
          filters: createTree(),
@@@ -80,47 -133,74 +142,74 @@@ export interface GroupDetailsPanelProp
      onContextMenu: (event: React.MouseEvent<HTMLElement>, item: any) => void;
      onAddUser: () => void;
      resources: ResourcesState;
+     groupCanManage: boolean;
  }
  
--export const GroupDetailsPanel = connect(
++export const GroupDetailsPanel = withStyles(styles)(connect(
      mapStateToProps, mapDispatchToProps
  )(
--    class GroupDetailsPanel extends React.Component<GroupDetailsPanelProps> {
++    class GroupDetailsPanel extends React.Component<GroupDetailsPanelProps & WithStyles<CssRules>> {
+         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>
++                <Paper className={this.props.classes.root}>
+                   <Tabs value={value} onChange={this.handleChange} variant="fullWidth">
+                       <Tab data-cy="group-details-members-tab" label="MEMBERS" />
+                       <Tab data-cy="group-details-permissions-tab" label="PERMISSIONS" />
+                   </Tabs>
+                   {value === 0 &&
+                       <DataExplorer
+                           id={GROUP_DETAILS_MEMBERS_PANEL_ID}
+                           data-cy="group-members-data-explorer"
+                           onRowClick={noop}
+                           onRowDoubleClick={noop}
+                           onContextMenu={noop}
+                           contextMenuColumn={false}
+                           hideColumnSelector
+                           hideSearchInput
+                           actions={
+                                 this.props.groupCanManage &&
+                                 <Grid container justify='flex-end'>
+                                     <Button
+                                       data-cy="group-member-add"
+                                       variant="contained"
+                                       color="primary"
+                                       onClick={this.props.onAddUser}>
+                                       <AddIcon /> Add user
+                                     </Button>
+                                 </Grid>
+                           }
+                           paperProps={{
+                               elevation: 0,
+                           }} />
+                   }
+                   {value === 1 &&
+                       <DataExplorer
+                           id={GROUP_DETAILS_PERMISSIONS_PANEL_ID}
+                           data-cy="group-permissions-data-explorer"
+                           onRowClick={noop}
+                           onRowDoubleClick={noop}
+                           onContextMenu={noop}
+                           contextMenuColumn={false}
+                           hideColumnSelector
+                           hideSearchInput
+                           paperProps={{
+                               elevation: 0,
+                           }} />
+                   }
+                 </Paper>
              );
          }
  
-         handleContextMenu = (event: React.MouseEvent<HTMLElement>, resourceUuid: string) => {
-             const resource = getResource<PermissionResource>(resourceUuid)(this.props.resources);
-             if (resource) {
-                 this.props.onContextMenu(event, {
-                     name: '',
-                     uuid: resource.uuid,
-                     ownerUuid: resource.ownerUuid,
-                     kind: resource.kind,
-                     menuKind: ContextMenuKind.GROUP_MEMBER
-                 });
-             }
+         handleChange = (event: React.MouseEvent<HTMLElement>, value: number) => {
+             this.setState({ value });
          }
--    });
- 
++    }));
diff --cc src/views/groups-panel/groups-panel.tsx
index faefab10,c96c0677..3251c729
--- a/src/views/groups-panel/groups-panel.tsx
+++ b/src/views/groups-panel/groups-panel.tsx
@@@ -21,16 -21,6 +21,15 @@@ import { RootState } from 'store/store'
  import { openContextMenu } from 'store/context-menu/context-menu-actions';
  import { ResourceKind } from 'models/resource';
  import { LinkClass, LinkResource } from 'models/link';
- import { navigateToGroupDetails } from 'store/navigation/navigation-action';
 +import { ArvadosTheme } from 'common/custom-theme';
 +
 +type CssRules = "root";
 +
 +const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
 +    root: {
 +        width: '100%',
 +    }
 +});
  
  export enum GroupsPanelColumnNames {
      GROUP = "Name",
@@@ -90,10 -77,11 +86,11 @@@ export const GroupsPanel = withStyles(s
  
          render() {
              return (
 -                <DataExplorer
 +                <div className={this.props.classes.root}><DataExplorer
                      id={GROUPS_PANEL_ID}
+                     data-cy="groups-panel-data-explorer"
                      onRowClick={noop}
-                     onRowDoubleClick={this.props.onRowDoubleClick}
+                     onRowDoubleClick={noop}
                      onContextMenu={this.handleContextMenu}
                      contextMenuColumn={true}
                      hideColumnSelector

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list