From 98f9d9edeceeaf5b3f61a5d68d346a2741a526f0 Mon Sep 17 00:00:00 2001 From: Pawel Kowalczyk Date: Mon, 23 Jul 2018 17:27:54 +0200 Subject: [PATCH] refactor-and-unify-icons-on-tree-component Feature #13885 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- src/components/side-panel/side-panel.tsx | 10 +-- src/components/tree/tree.tsx | 83 +++++++++++++----------- 2 files changed, 51 insertions(+), 42 deletions(-) diff --git a/src/components/side-panel/side-panel.tsx b/src/components/side-panel/side-panel.tsx index 4240b1bfd2..6a579e8c4e 100644 --- a/src/components/side-panel/side-panel.tsx +++ b/src/components/side-panel/side-panel.tsx @@ -107,11 +107,11 @@ export const SidePanel = withStyles(styles)( } getToggableIconClassNames = (isOpen?: boolean, isActive ?: boolean) => { - const { classes } = this.props; - return classnames(classes.toggableIcon, { - [classes.iconOpen]: isOpen, - [classes.iconClose]: !isOpen, - [classes.active]: isActive + const { iconOpen, iconClose, active, toggableIcon } = this.props.classes; + return classnames(toggableIcon, { + [iconOpen]: isOpen, + [iconClose]: !isOpen, + [active]: isActive }); } diff --git a/src/components/tree/tree.tsx b/src/components/tree/tree.tsx index e4d8c72ce6..2a9041c689 100644 --- a/src/components/tree/tree.tsx +++ b/src/components/tree/tree.tsx @@ -9,37 +9,41 @@ import { StyleRulesCallback, withStyles, WithStyles } from '@material-ui/core/st import { ReactElement } from "react"; import Collapse from "@material-ui/core/Collapse/Collapse"; import CircularProgress from '@material-ui/core/CircularProgress'; +import * as classnames from "classnames"; +import { ListItemIcon } from '@material-ui/core/'; + import { ArvadosTheme } from '../../common/custom-theme'; +import { SidePanelRightArrowIcon } from '../icon/icon'; -type CssRules = 'list' | 'activeArrow' | 'inactiveArrow' | 'arrowRotate' | 'arrowTransition' | 'loader' | 'arrowVisibility'; +type CssRules = 'list' | 'active' | 'loader' | 'toggableIconContainer' | 'iconClose' | 'iconOpen' | 'toggableIcon'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ list: { paddingBottom: '3px', paddingTop: '3px', }, - activeArrow: { - color: theme.palette.primary.main, + loader: { position: 'absolute', + transform: 'translate(0px)', + top: '3px' }, - inactiveArrow: { + toggableIconContainer: { color: theme.palette.grey["700"], - position: 'absolute', + height: '14px', + position: 'absolute' }, - arrowTransition: { - transition: 'all 0.1s ease', + toggableIcon: { + fontSize: '14px' }, - arrowRotate: { - transition: 'all 0.1s ease', - transform: 'rotate(-90deg)', + active: { + color: theme.palette.primary.main, }, - arrowVisibility: { - opacity: 0, + iconClose: { + transition: 'all 0.1s ease', }, - loader: { - position: 'absolute', - transform: 'translate(0px)', - top: '3px' + iconOpen: { + transition: 'all 0.1s ease', + transform: 'rotate(90deg)', } }); @@ -73,39 +77,44 @@ export const Tree = withStyles(styles)( render(): ReactElement { const level = this.props.level ? this.props.level : 0; const { classes, render, toggleItemOpen, items, toggleItemActive, onContextMenu } = this.props; - const { list, inactiveArrow, activeArrow, loader } = classes; + const { list, loader, toggableIconContainer } = classes; return {items && items.map((it: TreeItem, idx: number) =>
toggleItemActive(it.id, it.status)} - onContextMenu={this.handleRowContextMenu(it)}> + onClick={() => toggleItemActive(it.id, it.status)} + onContextMenu={this.handleRowContextMenu(it)}> {it.status === TreeItemStatus.Pending ? - : null} - {it.toggled && it.items && it.items.length === 0 ? null : this.renderArrow(it.status, it.active ? activeArrow : inactiveArrow, it.open, it.id)} + : null} + this.props.toggleItemOpen(it.id, it.status)} + className={toggableIconContainer}> + + {it.toggled && it.items && it.items.length === 0 ? : } + + {render(it, level)} {it.items && it.items.length > 0 && - - - } + + + }
)}
; } - renderArrow(status: TreeItemStatus, arrowClass: string, open: boolean, id: string) { - const { arrowTransition, arrowVisibility, arrowRotate } = this.props.classes; - return this.props.toggleItemOpen(id, status)} - className={` - ${arrowClass} - ${status === TreeItemStatus.Pending ? arrowVisibility : ''} - ${open ? `fas fa-caret-down ${arrowTransition}` : `fas fa-caret-down ${arrowRotate}`}`}/>; + getToggableIconClassNames = (isOpen?: boolean, isActive?: boolean) => { + const { iconOpen, iconClose, active, toggableIcon } = this.props.classes; + return classnames(toggableIcon, { + [iconOpen]: isOpen, + [iconClose]: !isOpen, + [active]: isActive + }); } handleRowContextMenu = (item: TreeItem) => -- 2.30.2