import * as React from "react";
import { TreeItem } from "../tree/tree";
-import { ProjectIcon, MoreOptionsIcon } from "../icon/icon";
-import { Typography, IconButton, StyleRulesCallback, withStyles, WithStyles } from "@material-ui/core";
-import { formatFileSize } from "../../common/formatters";
+import { ProjectIcon, MoreOptionsIcon, DefaultIcon, CollectionIcon } 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";
+import { FileThumbnail } from '~/components/file-tree/file-thumbnail';
-type CssRules = "root" | "spacer" | "sizeInfo" | "button";
+type CssRules = "root" | "spacer" | "sizeInfo" | "button" | "moreOptions";
const fileTreeItemStyle: StyleRulesCallback<CssRules> = theme => ({
root: {
flex: "1"
},
sizeInfo: {
- marginRight: `${theme.spacing.unit * 3}px`
+ width: `${theme.spacing.unit * 8}px`
},
button: {
width: theme.spacing.unit * 3,
- height: theme.spacing.unit * 3
+ height: theme.spacing.unit * 3,
+ marginRight: theme.spacing.unit,
+ },
+ moreOptions: {
+ position: 'absolute'
}
});
class extends React.Component<FileTreeItemProps & WithStyles<CssRules>> {
render() {
const { classes, item } = this.props;
- return <div className={classes.root}>
- <ListItemTextIcon
- icon={ProjectIcon}
- name={item.data.name} />
- <div className={classes.spacer} />
- <Typography
- className={classes.sizeInfo}
- variant="caption">{formatFileSize(item.data.size)}</Typography>
- <IconButton
- className={classes.button}
- onClick={this.handleClick}>
- <MoreOptionsIcon />
- </IconButton>
- </div >;
+ 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
+ className={classes.button}
+ onClick={this.handleClick}>
+ <MoreOptionsIcon className={classes.moreOptions} />
+ </IconButton>
+ </Tooltip>
+ </div >
+ </>;
}
handleClick = (event: React.MouseEvent<any>) => {
}
});
+export const getIcon = (type: string) => {
+ switch (type) {
+ case 'directory':
+ return ProjectIcon;
+ case 'file':
+ return CollectionIcon;
+ default:
+ return DefaultIcon;
+ }
+};
+