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);
}
dispatch(dialogActions.CLOSE_DIALOG({ id: ADD_GROUP_MEMBERS_FORM }));
- dispatch(GroupDetailsPanelActions.REQUEST_ITEMS());
+ dispatch(GroupMembersPanelActions.REQUEST_ITEMS());
}
};
});
dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Removed.', hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
- dispatch(GroupDetailsPanelActions.REQUEST_ITEMS());
+ dispatch(GroupMembersPanelActions.REQUEST_ITEMS());
}
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 {
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());
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 }));
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';
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>
);
}
});
}
}
- });
+ handleChange = (event: React.MouseEvent<HTMLElement>, value: number) => {
+ this.setState({ value });
+ }
+ });