X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/73da4aae95f9186c71533e3c26cecce23f52fc02..3ad7e33a2d50e9ed2298624ea5cac7cb5cd21a6f:/src/components/tree/tree.tsx diff --git a/src/components/tree/tree.tsx b/src/components/tree/tree.tsx index 0be5499f..d8397d66 100644 --- a/src/components/tree/tree.tsx +++ b/src/components/tree/tree.tsx @@ -5,9 +5,29 @@ import * as React from 'react'; import List from "@material-ui/core/List/List"; import ListItem from "@material-ui/core/ListItem/ListItem"; +import { StyleRulesCallback, Theme, withStyles, WithStyles } from '@material-ui/core/styles'; import { ReactElement } from "react"; import Collapse from "@material-ui/core/Collapse/Collapse"; +type CssRules = 'list' | 'activeArrow' | 'arrow' | 'arrowRotate'; + +const styles: StyleRulesCallback = (theme: Theme) => ({ + list: { + paddingBottom: '3px', + paddingTop: '3px', + }, + activeArrow: { + color: '#4285F6', + position: 'absolute', + }, + arrow: { + position: 'absolute', + }, + arrowRotate: { + transform: 'rotate(-90deg)', + } +}); + export interface TreeItem { data: T; id: string; @@ -18,30 +38,32 @@ export interface TreeItem { interface TreeProps { items?: Array>; - render: (item: TreeItem) => ReactElement<{}>; + render: (item: TreeItem, level?: number) => ReactElement<{}>; toggleItem: (id: string) => any; level?: number; } -function colorArrows(open: boolean, color: string){ - return -} - -class Tree extends React.Component, {}> { +class Tree extends React.Component & WithStyles, {}> { + renderArrow (items: boolean, arrowClass: string, open: boolean){ + return + } render(): ReactElement { const level = this.props.level ? this.props.level : 0; - return - {this.props.items && this.props.items.map((it: TreeItem, idx: number) => -
- this.props.toggleItem(it.id)} style={{paddingLeft: (level + 1) * 15, paddingBottom: '3px', paddingTop: '3px'}}> - {it.active ? colorArrows(it.open, "#4285F6") : colorArrows(it.open, "#333")} - {this.props.render(it)} + const {classes, render, toggleItem, items} = this.props; + const {list, arrow, activeArrow} = classes; + return + {items && items.map((it: TreeItem, idx: number) => +
+ toggleItem(it.id)} className={list} style={{paddingLeft: (level + 1) * 20}}> + {this.renderArrow(true, it.active ? activeArrow : arrow, it.open)} + {render(it, level)} {it.items && it.items.length > 0 && - }
)} @@ -49,4 +71,5 @@ class Tree extends React.Component, {}> { } } -export default Tree; +const StyledTree = withStyles(styles)(Tree); +export default StyledTree