+
+export const GroupsPanel = connect(
+ mapStateToProps, mapDispatchToProps
+)(
+ class GroupsPanel extends React.Component<GroupsPanelProps> {
+
+ render() {
+ return (
+ <DataExplorer
+ id={GROUPS_PANEL_ID}
+ onRowClick={noop}
+ onRowDoubleClick={this.props.onRowDoubleClick}
+ onContextMenu={this.handleContextMenu}
+ contextMenuColumn={true}
+ hideColumnSelector
+ actions={
+ <Grid container justify='flex-end'>
+ <Button
+ variant="contained"
+ color="primary"
+ onClick={this.props.onNewGroup}>
+ <AddIcon /> New group
+ </Button>
+ </Grid>
+ } />
+ );
+ }
+
+ handleContextMenu = (event: React.MouseEvent<HTMLElement>, resourceUuid: string) => {
+ const resource = getResource<GroupResource>(resourceUuid)(this.props.resources);
+ if (resource) {
+ this.props.onContextMenu(event, {
+ name: '',
+ uuid: resource.uuid,
+ ownerUuid: resource.ownerUuid,
+ kind: resource.kind,
+ menuKind: ContextMenuKind.GROUPS
+ });
+ }
+ }
+ });
+
+
+const GroupMembersCount = connect(
+ (state: RootState, props: { uuid: string }) => {
+
+ const permissions = filterResources((resource: LinkResource) =>
+ resource.kind === ResourceKind.LINK &&
+ resource.linkClass === LinkClass.PERMISSION &&
+ resource.tailUuid === props.uuid
+ )(state.resources);
+
+ return {
+ children: permissions.length,
+ };
+
+ }
+)(Typography);