From f523522e3b9024b706da52bcddbce42a58c56296 Mon Sep 17 00:00:00 2001 From: Lisa Knox Date: Mon, 22 Apr 2024 10:55:12 -0400 Subject: [PATCH] 21224: merge stable Arvados-DCO-1.1-Signed-off-by: Lisa Knox --- .../src/components/data-explorer/data-explorer.tsx | 14 +++++++++++++- .../multiselect-toolbar/MultiselectToolbar.tsx | 6 +++--- .../context-menu/context-menu-action-set.ts | 1 + .../context-menu/menu-item-sort.ts | 2 ++ .../data-explorer/data-explorer.tsx | 3 ++- .../views-components/data-explorer/renderers.tsx | 2 +- .../ms-user-details-action-set.ts | 9 +++++---- .../sharing-invitation-form-component.tsx | 2 +- .../src/views/project-panel/project-panel.tsx | 1 - 9 files changed, 28 insertions(+), 12 deletions(-) diff --git a/services/workbench2/src/components/data-explorer/data-explorer.tsx b/services/workbench2/src/components/data-explorer/data-explorer.tsx index 4737ed06dc..b596683fad 100644 --- a/services/workbench2/src/components/data-explorer/data-explorer.tsx +++ b/services/workbench2/src/components/data-explorer/data-explorer.tsx @@ -130,6 +130,9 @@ type DataExplorerProps = DataExplorerDataProps & DataExplorerActionProps extends React.Component> { + state = { + msToolbarInDetailsCard: true, + }; multiSelectToolbarInTitle = !this.props.title && !this.props.progressBar; @@ -139,6 +142,15 @@ export const DataExplorer = withStyles(styles)( } } + componentDidUpdate( prevProps: Readonly>, prevState: Readonly<{}>, snapshot?: any ): void { + const { selectedResourceUuid, currentRouteUuid } = this.props; + if(selectedResourceUuid !== prevProps.selectedResourceUuid || currentRouteUuid !== prevProps.currentRouteUuid) { + this.setState({ + multiSelectToolbarInTitle: selectedResourceUuid === this.props.currentRouteUuid, + }) + } + } + render() { const { columns, @@ -204,7 +216,7 @@ export const DataExplorer = withStyles(styles)( )} {!!progressBar && progressBar} - {this.multiSelectToolbarInTitle && } + {this.multiSelectToolbarInTitle && !this.state.msToolbarInDetailsCard && } {(!hideColumnSelector || !hideSearchInput || !!actions) && ( @@ -349,12 +349,12 @@ function mapDispatchToProps(dispatch: Dispatch) { switch (selectedAction.name) { case ContextMenuActionNames.MOVE_TO: case ContextMenuActionNames.REMOVE: - const firstResource = getResource(selectedToArray(checkedList)[0])(resources) as ContainerRequestResource | Resource; + const firstResource = getResource(currentList[0])(resources) as ContainerRequestResource | Resource; const action = findActionByName(selectedAction.name as string, kindToActionSet[firstResource.kind]); if (action) action.execute(dispatch, kindGroups[firstResource.kind]); break; case ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD: - const selectedResources = selectedToArray(checkedList).map(uuid => getResource(uuid)(resources)); + const selectedResources = currentList.map(uuid => getResource(uuid)(resources)); dispatch(copyToClipboardAction(selectedResources)); break; default: diff --git a/services/workbench2/src/views-components/context-menu/context-menu-action-set.ts b/services/workbench2/src/views-components/context-menu/context-menu-action-set.ts index 38de735e29..fc1028aa68 100644 --- a/services/workbench2/src/views-components/context-menu/context-menu-action-set.ts +++ b/services/workbench2/src/views-components/context-menu/context-menu-action-set.ts @@ -57,6 +57,7 @@ export enum ContextMenuActionNames { SETUP_USER = 'Setup user', SHARE = 'Share', UNSELECT_ALL = 'Unselect all', + USER_ACCOUNT = 'User account', VIEW_DETAILS = 'View details', WRITE = 'Write', } diff --git a/services/workbench2/src/views-components/context-menu/menu-item-sort.ts b/services/workbench2/src/views-components/context-menu/menu-item-sort.ts index f331c60247..0e06be1685 100644 --- a/services/workbench2/src/views-components/context-menu/menu-item-sort.ts +++ b/services/workbench2/src/views-components/context-menu/menu-item-sort.ts @@ -11,6 +11,7 @@ import { MultiSelectMenuAction } from 'views-components/multiselect-toolbar/ms-m export enum ContextMenuKind { API_CLIENT_AUTHORIZATION = "ApiClientAuthorization", ROOT_PROJECT = "RootProject", + ROOT_PROJECT_ADMIN = "RootProjectAdmin", PROJECT = "Project", FILTER_GROUP = "FilterGroup", READONLY_PROJECT = "ReadOnlyProject", @@ -47,6 +48,7 @@ export enum ContextMenuKind { VIRTUAL_MACHINE = "VirtualMachine", KEEP_SERVICE = "KeepService", USER = "User", + USER_DETAILS = "UserDetails", GROUPS = "Group", GROUP_MEMBER = "GroupMember", PERMISSION_EDIT = "PermissionEdit", diff --git a/services/workbench2/src/views-components/data-explorer/data-explorer.tsx b/services/workbench2/src/views-components/data-explorer/data-explorer.tsx index 034399b124..37a15bcf77 100644 --- a/services/workbench2/src/views-components/data-explorer/data-explorer.tsx +++ b/services/workbench2/src/views-components/data-explorer/data-explorer.tsx @@ -23,7 +23,7 @@ interface Props { working?: boolean; } -const mapStateToProps = ({ progressIndicator, dataExplorer, router, multiselect, detailsPanel, properties}: RootState, { id }: Props) => { +const mapStateToProps = ({ progressIndicator, dataExplorer, router, multiselect, selectedResourceUuid, properties}: RootState, { id }: Props) => { const working = !!progressIndicator.some(p => p.id === id && p.working); const dataExplorerState = getDataExplorer(dataExplorer, id); const currentRoute = router.location ? router.location.pathname : ""; @@ -34,6 +34,7 @@ const mapStateToProps = ({ progressIndicator, dataExplorer, router, multiselect, paperKey: currentRoute, currentRouteUuid: properties.currentRouteUuid, isMSToolbarVisible, + selectedResourceUuid, checkedList: multiselect.checkedList, working, }; diff --git a/services/workbench2/src/views-components/data-explorer/renderers.tsx b/services/workbench2/src/views-components/data-explorer/renderers.tsx index bb49b6cf42..853fd8c0e3 100644 --- a/services/workbench2/src/views-components/data-explorer/renderers.tsx +++ b/services/workbench2/src/views-components/data-explorer/renderers.tsx @@ -55,6 +55,7 @@ import { ProjectResource } from "models/project"; import { ProcessResource } from "models/process"; import { ServiceRepository } from "services/services"; import { loadUsersPanel } from "store/users/users-actions"; +import { InlinePulser } from "components/loading/inline-pulser"; export const toggleIsAdmin = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { @@ -65,7 +66,6 @@ export const toggleIsAdmin = (uuid: string) => dispatch(loadUsersPanel()); return newActivity; }; -import { InlinePulser } from "components/loading/inline-pulser"; const renderName = (dispatch: Dispatch, item: GroupContentsResource) => { const navFunc = "groupClass" in item && item.groupClass === GroupClass.ROLE ? navigateToGroupDetails : navigateTo; diff --git a/services/workbench2/src/views-components/multiselect-toolbar/ms-user-details-action-set.ts b/services/workbench2/src/views-components/multiselect-toolbar/ms-user-details-action-set.ts index 33698259c1..d9ef110741 100644 --- a/services/workbench2/src/views-components/multiselect-toolbar/ms-user-details-action-set.ts +++ b/services/workbench2/src/views-components/multiselect-toolbar/ms-user-details-action-set.ts @@ -6,12 +6,13 @@ import { AdvancedIcon, AttributesIcon, UserPanelIcon } from 'components/icon/ico import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab'; import { openUserAttributes } from 'store/users/users-actions'; import { navigateToUserProfile } from 'store/navigation/navigation-action'; -import { MultiSelectMenuActionSet, MultiSelectMenuActionNames } from './ms-menu-actions'; +import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set"; +import { MultiSelectMenuActionSet } from './ms-menu-actions'; export const UserDetailsActionSet: MultiSelectMenuActionSet= [ [ { - name: MultiSelectMenuActionNames.ATTRIBUTES, + name: ContextMenuActionNames.ATTRIBUTES, icon: AttributesIcon, hasAlts: false, isForMulti: false, @@ -20,7 +21,7 @@ export const UserDetailsActionSet: MultiSelectMenuActionSet= [ }, }, { - name: MultiSelectMenuActionNames.API_DETAILS, + name: ContextMenuActionNames.API_DETAILS, icon: AdvancedIcon, hasAlts: false, isForMulti: false, @@ -29,7 +30,7 @@ export const UserDetailsActionSet: MultiSelectMenuActionSet= [ }, }, { - name: MultiSelectMenuActionNames.USER_ACCOUNT, + name: ContextMenuActionNames.USER_ACCOUNT, icon: UserPanelIcon, hasAlts: false, isForMulti: false, diff --git a/services/workbench2/src/views-components/sharing-dialog/sharing-invitation-form-component.tsx b/services/workbench2/src/views-components/sharing-dialog/sharing-invitation-form-component.tsx index 19fcf58849..cf463fa76a 100644 --- a/services/workbench2/src/views-components/sharing-dialog/sharing-invitation-form-component.tsx +++ b/services/workbench2/src/views-components/sharing-dialog/sharing-invitation-form-component.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { Field, WrappedFieldProps, FieldArray, WrappedFieldArrayProps } from 'redux-form'; -import { Grid, FormControl, InputLabel, StyleRulesCallback, Divider } from '@material-ui/core'; +import { Grid, FormControl, InputLabel, StyleRulesCallback } from '@material-ui/core'; import { PermissionSelect, parsePermissionLevel, formatPermissionLevel } from './permission-select'; import { ParticipantSelect, Participant } from './participant-select'; import { WithStyles } from '@material-ui/core/styles'; diff --git a/services/workbench2/src/views/project-panel/project-panel.tsx b/services/workbench2/src/views/project-panel/project-panel.tsx index 0425335e42..433cb11209 100644 --- a/services/workbench2/src/views/project-panel/project-panel.tsx +++ b/services/workbench2/src/views/project-panel/project-panel.tsx @@ -278,7 +278,6 @@ export const ProjectPanel = withStyles(styles)( contextMenuColumn={true} defaultViewIcon={ProjectIcon} defaultViewMessages={DEFAULT_VIEW_MESSAGES} - selectedResourceUuid={this.props.currentItemId} /> } -- 2.39.5