// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; import { connect } from 'react-redux'; import { DataExplorer } from "views-components/data-explorer/data-explorer"; import { DataColumns } from 'components/data-table/data-table'; import { ResourceFullName, ResourceUuid, ResourceEmail, ResourceUsername } from 'views-components/data-explorer/renderers'; import { createTree } from 'models/tree'; import { noop } from 'lodash/fp'; import { RootState } from 'store/store'; 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'; import { PermissionResource } from 'models/permission'; import { Grid, Button, Tabs, Tab, Paper } from '@material-ui/core'; import { AddIcon } from 'components/icon/icon'; export enum GroupDetailsPanelColumnNames { FULL_NAME = "Name", UUID = "UUID", EMAIL = "Email", USERNAME = "Username", } export const groupDetailsPanelColumns: DataColumns = [ { name: GroupDetailsPanelColumnNames.FULL_NAME, selected: true, configurable: true, filters: createTree(), render: uuid => }, { name: GroupDetailsPanelColumnNames.USERNAME, selected: true, configurable: true, filters: createTree(), render: uuid => }, { name: GroupDetailsPanelColumnNames.UUID, selected: true, configurable: true, filters: createTree(), render: uuid => }, { name: GroupDetailsPanelColumnNames.EMAIL, selected: true, configurable: true, filters: createTree(), render: uuid => }, ]; const mapStateToProps = (state: RootState) => { return { resources: state.resources }; }; const mapDispatchToProps = { onContextMenu: openContextMenu, onAddUser: openAddGroupMembersDialog, }; export interface GroupDetailsPanelProps { onContextMenu: (event: React.MouseEvent, item: any) => void; onAddUser: () => void; resources: ResourcesState; } export const GroupDetailsPanel = connect( mapStateToProps, mapDispatchToProps )( class GroupDetailsPanel extends React.Component { state = { value: 0, }; componentDidMount() { this.setState({ value: 0 }); } render() { const { value } = this.state; return ( {value === 0 && } paperProps={{ elevation: 0, }} /> } {value === 1 && } paperProps={{ elevation: 0, }} /> } ); } handleContextMenu = (event: React.MouseEvent, resourceUuid: string) => { const resource = getResource(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, value: number) => { this.setState({ value }); } });