1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
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";
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';
36 export enum GroupsPanelColumnNames {
42 export const groupsPanelColumns: DataColumns<string> = [
44 name: GroupsPanelColumnNames.GROUP,
47 sortDirection: SortDirection.ASC,
48 filters: createTree(),
49 render: uuid => <ResourceName uuid={uuid} />
52 name: GroupsPanelColumnNames.OWNER,
55 filters: createTree(),
56 render: uuid => <ResourceOwner uuid={uuid} />,
59 name: GroupsPanelColumnNames.MEMBERS,
62 filters: createTree(),
63 render: uuid => <span>0</span>,
67 export interface GroupsPanelProps {
68 onNewGroup: () => void;
71 export class GroupsPanel extends React.Component<GroupsPanelProps> {
78 onRowDoubleClick={noop}
80 contextMenuColumn={true}
83 <Grid container justify='flex-end'>
87 onClick={this.props.onNewGroup}>