Add GroupDetailsPanel view
[arvados-workbench2.git] / src / views / group-details-panel / group-details-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 { connect } from 'react-redux';
7
8 import { DataExplorer } from "~/views-components/data-explorer/data-explorer";
9 import { DataColumns } from '~/components/data-table/data-table';
10 import { ResourceUuid, ResourceFirstName, ResourceLastName, ResourceEmail, ResourceUsername } from '~/views-components/data-explorer/renderers';
11 import { createTree } from '~/models/tree';
12 import { noop } from 'lodash/fp';
13 import { RootState } from '~/store/store';
14 import { GROUP_DETAILS_PANEL_ID } from '~/store/group-details-panel/group-details-panel-actions';
15
16 export enum GroupDetailsPanelColumnNames {
17     FIRST_NAME = "First name",
18     LAST_NAME = "Last name",
19     UUID = "UUID",
20     EMAIL = "Email",
21     USERNAME = "Username",
22 }
23
24 export const groupDetailsPanelColumns: DataColumns<string> = [
25     {
26         name: GroupDetailsPanelColumnNames.FIRST_NAME,
27         selected: true,
28         configurable: true,
29         filters: createTree(),
30         render: uuid => <ResourceFirstName uuid={uuid} />
31     },
32     {
33         name: GroupDetailsPanelColumnNames.LAST_NAME,
34         selected: true,
35         configurable: true,
36         filters: createTree(),
37         render: uuid => <ResourceLastName uuid={uuid} />
38     },
39     {
40         name: GroupDetailsPanelColumnNames.UUID,
41         selected: true,
42         configurable: true,
43         filters: createTree(),
44         render: uuid => <ResourceUuid uuid={uuid} />
45     },
46     {
47         name: GroupDetailsPanelColumnNames.EMAIL,
48         selected: true,
49         configurable: true,
50         filters: createTree(),
51         render: uuid => <ResourceEmail uuid={uuid} />
52     },
53     {
54         name: GroupDetailsPanelColumnNames.USERNAME,
55         selected: true,
56         configurable: true,
57         filters: createTree(),
58         render: uuid => <ResourceUsername uuid={uuid} />
59     },
60 ];
61
62 const mapStateToProps = (state: RootState) => {
63     return {
64         resources: state.resources
65     };
66 };
67
68 const mapDispatchToProps = {};
69
70 export interface GroupDetailsPanelProps { }
71
72 export const GroupDetailsPanel = connect(
73     mapStateToProps, mapDispatchToProps
74 )(
75     class GroupDetailsPanel extends React.Component<GroupDetailsPanelProps> {
76
77         render() {
78             return (
79                 <DataExplorer
80                     id={GROUP_DETAILS_PANEL_ID}
81                     onRowClick={noop}
82                     onRowDoubleClick={noop}
83                     onContextMenu={noop}
84                     contextMenuColumn={true}
85                     hideColumnSelector />
86             );
87         }
88     });
89