Add new group button
[arvados-workbench2.git] / src / views / groups-panel / groups-panel.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import * as React from 'react';
6 import withStyles from "@material-ui/core/styles/withStyles";
7 import { DispatchProp, connect } from 'react-redux';
8 import { RouteComponentProps } from 'react-router';
9 import { StyleRulesCallback, WithStyles, Typography, Grid, Button } from "@material-ui/core";
10
11 import { DataExplorer } from "~/views-components/data-explorer/data-explorer";
12 import { DataColumns } from '~/components/data-table/data-table';
13 import { RootState } from '~/store/store';
14 import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters';
15 import { ContainerRequestState } from '~/models/container-request';
16 import { SortDirection } from '~/components/data-table/data-column';
17 import { ResourceKind, Resource } from '~/models/resource';
18 import { ResourceFileSize, ResourceLastModifiedDate, ProcessStatus, ResourceType, ResourceOwner } from '~/views-components/data-explorer/renderers';
19 import { ProjectIcon, AddIcon } from '~/components/icon/icon';
20 import { ResourceName } from '~/views-components/data-explorer/renderers';
21 import { ResourcesState, getResource } from '~/store/resources/resources';
22 import { loadDetailsPanel } from '~/store/details-panel/details-panel-action';
23 import { resourceKindToContextMenuKind, openContextMenu } from '~/store/context-menu/context-menu-actions';
24 import { ProjectResource } from '~/models/project';
25 import { navigateTo } from '~/store/navigation/navigation-action';
26 import { getProperty } from '~/store/properties/properties';
27 import { PROJECT_PANEL_CURRENT_UUID } from '~/store/project-panel/project-panel-action';
28 import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
29 import { ArvadosTheme } from "~/common/custom-theme";
30 import { createTree } from '~/models/tree';
31 import { getInitialResourceTypeFilters } from '~/store/resource-type-filters/resource-type-filters';
32 import { GROUPS_PANEL_ID } from '~/store/groups-panel/groups-panel-actions';
33 import { noop } from 'lodash/fp';
34 import { GroupResource } from '~/models/group';
35
36 export enum GroupsPanelColumnNames {
37     GROUP = "Name",
38     OWNER = "Owner",
39     MEMBERS = "Members",
40 }
41
42 export const groupsPanelColumns: DataColumns<string> = [
43     {
44         name: GroupsPanelColumnNames.GROUP,
45         selected: true,
46         configurable: true,
47         sortDirection: SortDirection.ASC,
48         filters: createTree(),
49         render: uuid => <ResourceName uuid={uuid} />
50     },
51     {
52         name: GroupsPanelColumnNames.OWNER,
53         selected: true,
54         configurable: true,
55         filters: createTree(),
56         render: uuid => <ResourceOwner uuid={uuid} />,
57     },
58     {
59         name: GroupsPanelColumnNames.MEMBERS,
60         selected: true,
61         configurable: true,
62         filters: createTree(),
63         render: uuid => <span>0</span>,
64     },
65 ];
66
67 export interface GroupsPanelProps {
68     onNewGroup: () => void;
69 }
70
71 export class GroupsPanel extends React.Component<GroupsPanelProps> {
72
73     render() {
74         return (
75             <DataExplorer
76                 id={GROUPS_PANEL_ID}
77                 onRowClick={noop}
78                 onRowDoubleClick={noop}
79                 onContextMenu={noop}
80                 contextMenuColumn={true}
81                 hideColumnSelector
82                 actions={
83                     <Grid container justify='flex-end'>
84                         <Button
85                             variant="contained"
86                             color="primary"
87                             onClick={this.props.onNewGroup}>
88                             <AddIcon /> New group
89                         </Button>
90                     </Grid>
91                 } />
92         );
93     }
94 }