1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React from 'react';
6 import { LINK_PANEL_ID } from 'store/link-panel/link-panel-actions';
7 import { DataExplorer } from 'views-components/data-explorer/data-explorer';
8 import { DataColumns, SortDirection } from 'components/data-table/data-column';
9 import { ResourcesState } from 'store/resources/resources';
10 import { ShareMeIcon } from 'components/icon/icon';
11 import { createTree } from 'models/tree';
13 ResourceLinkUuid, ResourceLinkHead, ResourceLinkTail,
14 ResourceLinkClass, ResourceLinkName }
15 from 'views-components/data-explorer/renderers';
16 import { CustomStyleRulesCallback } from 'common/custom-theme';
17 import { WithStyles } from '@mui/styles';
18 import withStyles from '@mui/styles/withStyles';
19 import { ArvadosTheme } from 'common/custom-theme';
20 import { LinkResource } from 'models/link';
22 type CssRules = "root";
24 const styles: CustomStyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
30 export enum LinkPanelColumnNames {
32 LINK_CLASS = "Link Class",
38 export const linkPanelColumns: DataColumns<string, LinkResource> = [
40 name: LinkPanelColumnNames.NAME,
43 sort: {direction: SortDirection.NONE, field: "name"},
44 filters: createTree(),
45 render: uuid => <ResourceLinkName uuid={uuid} />
48 name: LinkPanelColumnNames.LINK_CLASS,
51 filters: createTree(),
52 render: uuid => <ResourceLinkClass uuid={uuid} />
55 name: LinkPanelColumnNames.TAIL,
58 filters: createTree(),
59 render: uuid => <ResourceLinkTail uuid={uuid} />
62 name: LinkPanelColumnNames.HEAD,
65 filters: createTree(),
66 render: uuid => <ResourceLinkHead uuid={uuid} />
69 name: LinkPanelColumnNames.UUID,
72 filters: createTree(),
73 render: uuid => <ResourceLinkUuid uuid={uuid} />
77 export interface LinkPanelRootDataProps {
78 resources: ResourcesState;
81 export interface LinkPanelRootActionProps {
82 onItemClick: (item: string) => void;
83 onContextMenu: (event: React.MouseEvent<HTMLElement>, item: string) => void;
84 onItemDoubleClick: (item: string) => void;
87 export type LinkPanelRootProps = LinkPanelRootDataProps & LinkPanelRootActionProps & WithStyles<CssRules>;
89 export const LinkPanelRoot = withStyles(styles)((props: LinkPanelRootProps) => {
90 return <div className={props.classes.root}><DataExplorer
92 onRowClick={props.onItemClick}
93 onRowDoubleClick={props.onItemDoubleClick}
94 onContextMenu={props.onContextMenu}
95 contextMenuColumn={true}
98 defaultViewIcon={ShareMeIcon}
99 defaultViewMessages={['Your link list is empty.']} />