1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { DataExplorer } from "~/views-components/data-explorer/data-explorer";
7 import { connect, DispatchProp } from 'react-redux';
8 import { RootState } from '~/store/store';
9 import { WorkflowIcon } from '~/components/icon/icon';
10 import { ResourcesState, getResource } from '~/store/resources/resources';
11 import { navigateTo } from "~/store/navigation/navigation-action";
12 import { loadDetailsPanel } from "~/store/details-panel/details-panel-action";
13 import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
14 import { WORKFLOW_PANEL_ID } from '~/store/workflow-panel/workflow-panel-actions';
15 import { openContextMenu } from '~/store/context-menu/context-menu-actions';
16 import { GroupResource } from '~/models/group';
17 import { ContextMenuKind } from '~/views-components/context-menu/context-menu';
19 ResourceLastModifiedDate,
21 } from "~/views-components/data-explorer/renderers";
22 import { SortDirection } from '~/components/data-table/data-column';
23 import { DataColumns } from '~/components/data-table/data-table';
24 import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters';
25 import { Grid } from '@material-ui/core';
26 import { WorkflowDescriptionCard } from './workflow-description-card';
28 export enum WorkflowPanelColumnNames {
30 AUTHORISATION = "Authorisation",
31 LAST_MODIFIED = "Last modified",
34 interface WorkflowPanelDataProps {
35 resources: ResourcesState;
38 export enum ResourceStatus {
44 const resourceStatus = (type: string) => {
46 case ResourceStatus.PUBLIC:
48 case ResourceStatus.PRIVATE:
50 case ResourceStatus.SHARED:
57 export const workflowPanelColumns: DataColumns<string, DataTableFilterItem> = [
59 name: WorkflowPanelColumnNames.NAME,
62 sortDirection: SortDirection.ASC,
64 render: (uuid: string) => <ResourceName uuid={uuid} />
67 name: WorkflowPanelColumnNames.AUTHORISATION,
70 sortDirection: SortDirection.NONE,
73 name: resourceStatus(ResourceStatus.PUBLIC),
77 name: resourceStatus(ResourceStatus.PRIVATE),
81 name: resourceStatus(ResourceStatus.SHARED),
85 // do zmiany na ResourceAuthorisation
86 render: (uuid: string) => <ResourceName uuid={uuid} />,
89 name: WorkflowPanelColumnNames.LAST_MODIFIED,
92 sortDirection: SortDirection.NONE,
94 render: (uuid: string) => <ResourceLastModifiedDate uuid={uuid} />
98 type WorkflowPanelProps = WorkflowPanelDataProps & DispatchProp;
100 export const WorkflowPanel = connect((state: RootState) => ({
101 resources: state.resources
103 class extends React.Component<WorkflowPanelProps> {
105 return <Grid container spacing={16}>
108 id={WORKFLOW_PANEL_ID}
109 onRowClick={this.handleRowClick}
110 onRowDoubleClick={this.handleRowDoubleClick}
111 onContextMenu={this.handleContextMenu}
112 contextMenuColumn={false}
113 dataTableDefaultView={<DataTableDefaultView icon={WorkflowIcon} />} />
116 <WorkflowDescriptionCard />
121 handleContextMenu = (event: React.MouseEvent<HTMLElement>, resourceUuid: string) => {
122 const resource = getResource<GroupResource>(resourceUuid)(this.props.resources);
124 this.props.dispatch<any>(openContextMenu(event, {
127 ownerUuid: resource.ownerUuid,
128 isTrashed: resource.isTrashed,
130 menuKind: ContextMenuKind.PROJECT,
135 handleRowDoubleClick = (uuid: string) => {
136 this.props.dispatch<any>(navigateTo(uuid));
139 handleRowClick = (uuid: string) => {
140 this.props.dispatch(loadDetailsPanel(uuid));