export const DataExplorer = withStyles(styles)(
class DataExplorerGeneric<T> extends React.Component<DataExplorerProps<T>> {
+ state = {
+ msToolbarInDetailsCard: true,
+ };
multiSelectToolbarInTitle = !this.props.title && !this.props.progressBar;
}
}
+ componentDidUpdate( prevProps: Readonly<DataExplorerProps<T>>, 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,
</Grid>
)}
{!!progressBar && progressBar}
- {this.multiSelectToolbarInTitle && <MultiselectToolbar injectedStyles={classes.msToolbarStyles} />}
+ {this.multiSelectToolbarInTitle && !this.state.msToolbarInDetailsCard && <MultiselectToolbar injectedStyles={classes.msToolbarStyles} />}
{(!hideColumnSelector || !hideSearchInput || !!actions) && (
<Grid
className={classes.headerMenu}
return (
<React.Fragment>
<Toolbar
- className={classes.root}
+ className={classNames(classes.root, injectedStyles)}
style={{ width: `${(actions.length * 2.5) + 6}rem`}}
data-cy='multiselect-toolbar'
>
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<any>(copyToClipboardAction(selectedResources));
break;
default:
SETUP_USER = 'Setup user',
SHARE = 'Share',
UNSELECT_ALL = 'Unselect all',
+ USER_ACCOUNT = 'User account',
VIEW_DETAILS = 'View details',
WRITE = 'Write',
}
export enum ContextMenuKind {
API_CLIENT_AUTHORIZATION = "ApiClientAuthorization",
ROOT_PROJECT = "RootProject",
+ ROOT_PROJECT_ADMIN = "RootProjectAdmin",
PROJECT = "Project",
FILTER_GROUP = "FilterGroup",
READONLY_PROJECT = "ReadOnlyProject",
VIRTUAL_MACHINE = "VirtualMachine",
KEEP_SERVICE = "KeepService",
USER = "User",
+ USER_DETAILS = "UserDetails",
GROUPS = "Group",
GROUP_MEMBER = "GroupMember",
PERMISSION_EDIT = "PermissionEdit",
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 : "";
paperKey: currentRoute,
currentRouteUuid: properties.currentRouteUuid,
isMSToolbarVisible,
+ selectedResourceUuid,
checkedList: multiselect.checkedList,
working,
};
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) => {
dispatch<any>(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;
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,
},
},
{
- name: MultiSelectMenuActionNames.API_DETAILS,
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
hasAlts: false,
isForMulti: false,
},
},
{
- name: MultiSelectMenuActionNames.USER_ACCOUNT,
+ name: ContextMenuActionNames.USER_ACCOUNT,
icon: UserPanelIcon,
hasAlts: false,
isForMulti: false,
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';
contextMenuColumn={true}
defaultViewIcon={ProjectIcon}
defaultViewMessages={DEFAULT_VIEW_MESSAGES}
- selectedResourceUuid={this.props.currentItemId}
/>
</div>
}