//
// SPDX-License-Identifier: AGPL-3.0
-import React from "react";
-import { TreeItem } from "../tree/tree";
-import { DirectoryIcon, MoreOptionsIcon, DefaultIcon, FileIcon } from "../icon/icon";
-import { Typography, IconButton, StyleRulesCallback, withStyles, WithStyles, Tooltip } from '@material-ui/core';
-import { formatFileSize } from "common/formatters";
-import { ListItemTextIcon } from "../list-item-text-icon/list-item-text-icon";
-import { FileTreeData } from "./file-tree-data";
-
-type CssRules = "root" | "spacer" | "sizeInfo" | "button" | "moreOptions";
-
-const fileTreeItemStyle: StyleRulesCallback<CssRules> = theme => ({
- root: {
- display: "flex",
- alignItems: "center",
- paddingRight: `${theme.spacing.unit * 1.5}px`
- },
- spacer: {
- flex: "1"
- },
- sizeInfo: {
- width: `${theme.spacing.unit * 8}px`
- },
- button: {
- width: theme.spacing.unit * 3,
- height: theme.spacing.unit * 3,
- marginRight: theme.spacing.unit,
- },
- moreOptions: {
- position: 'absolute'
- }
-});
-
-export interface FileTreeItemProps {
- item: TreeItem<FileTreeData>;
- onMoreClick: (event: React.MouseEvent<any>, item: TreeItem<FileTreeData>) => void;
-}
-export const FileTreeItem = withStyles(fileTreeItemStyle)(
- class extends React.Component<FileTreeItemProps & WithStyles<CssRules>> {
- render() {
- const { classes, item } = this.props;
- return <>
- <div className={classes.root}>
- <ListItemTextIcon
- icon={getIcon(item.data.type)}
- name={item.data.name} />
- <div className={classes.spacer} />
- <Typography
- className={classes.sizeInfo}
- variant="caption">{formatFileSize(item.data.size)}</Typography>
- <Tooltip title="More options" disableFocusListener>
- <IconButton
- data-cy='file-item-options-btn'
- className={classes.button}
- onClick={this.handleClick}>
- <MoreOptionsIcon className={classes.moreOptions} />
- </IconButton>
- </Tooltip>
- </div >
- </>;
- }
-
- handleClick = (event: React.MouseEvent<any>) => {
- this.props.onMoreClick(event, this.props.item);
- }
- });
+import { DirectoryIcon, DefaultIcon, FileIcon } from "../icon/icon";
export const getIcon = (type: string) => {
switch (type) {
+++ /dev/null
-// Copyright (C) The Arvados Authors. All rights reserved.
-//
-// SPDX-License-Identifier: AGPL-3.0
-
-import React from "react";
-import { TreeItem, TreeItemStatus } from "../tree/tree";
-import { VirtualTree as Tree } from "../tree/virtual-tree";
-import { FileTreeData } from "./file-tree-data";
-import { FileTreeItem } from "./file-tree-item";
-
-export interface FileTreeProps {
- items: Array<TreeItem<FileTreeData>>;
- onMenuOpen: (event: React.MouseEvent<HTMLElement>, item: TreeItem<FileTreeData>) => void;
- onSelectionToggle: (event: React.MouseEvent<HTMLElement>, item: TreeItem<FileTreeData>) => void;
- onCollapseToggle: (id: string, status: TreeItemStatus) => void;
- onFileClick: (id: string) => void;
- currentItemUuid?: string;
-}
-
-export class FileTree extends React.Component<FileTreeProps> {
- render() {
- return <Tree
- showSelection={true}
- items={this.props.items}
- disableRipple={true}
- render={this.renderItem}
- onContextMenu={this.handleContextMenu}
- toggleItemActive={this.handleToggleActive}
- toggleItemOpen={this.handleToggle}
- toggleItemSelection={this.handleSelectionChange}
- currentItemUuid={this.props.currentItemUuid} />;
- }
-
- handleContextMenu = (event: React.MouseEvent<any>, item: TreeItem<FileTreeData>) => {
- event.stopPropagation();
- this.props.onMenuOpen(event, item);
- }
-
- handleToggle = (event: React.MouseEvent<{}>, { id, status }: TreeItem<{}>) => {
- this.props.onCollapseToggle(id, status);
- }
-
- handleToggleActive = (_: React.MouseEvent<HTMLElement>, item: TreeItem<FileTreeData>) => {
- this.props.onFileClick(item.id);
- }
-
- handleSelectionChange = (event: React.MouseEvent<HTMLElement>, item: TreeItem<FileTreeData>) => {
- event.stopPropagation();
- this.props.onSelectionToggle(event, item);
- }
-
- renderItem = (item: TreeItem<FileTreeData>) =>
- <FileTreeItem
- item={item}
- onMoreClick={this.handleContextMenu} />
-
-}