X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9230902521944497f96976064c5c7ae824786084..10ce16c28de952f6533ca3cc9df909269e3d2a53:/src/components/side-panel/side-panel.tsx diff --git a/src/components/side-panel/side-panel.tsx b/src/components/side-panel/side-panel.tsx index 165bd5651c..4240b1bfd2 100644 --- a/src/components/side-panel/side-panel.tsx +++ b/src/components/side-panel/side-panel.tsx @@ -6,75 +6,10 @@ import * as React from 'react'; import { ReactElement } from 'react'; import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'; import { ArvadosTheme } from '../../common/custom-theme'; -import { List, ListItem, ListItemText, ListItemIcon, Collapse, Typography } from "@material-ui/core"; +import { List, ListItem, ListItemIcon, Collapse } from "@material-ui/core"; import { SidePanelRightArrowIcon, IconType } from '../icon/icon'; import * as classnames from "classnames"; -import ListItemTextIcon from '../list-item-text-icon/list-item-text-icon'; - -export interface SidePanelItem { - id: string; - name: string; - icon: IconType; - active?: boolean; - open?: boolean; - margin?: boolean; - openAble?: boolean; -} - -interface SidePanelProps { - toggleOpen: (id: string) => void; - toggleActive: (id: string) => void; - sidePanelItems: SidePanelItem[]; - onContextMenu: (event: React.MouseEvent, item: SidePanelItem) => void; -} - -class SidePanel extends React.Component> { - render(): ReactElement { - const { classes, toggleOpen, toggleActive, sidePanelItems, children } = this.props; - const { root, row, list, toggableIconContainer } = classes; - return ( -
- - {sidePanelItems.map(it => ( - - toggleActive(it.id)} onContextMenu={this.handleRowContextMenu(it)}> - - {it.openAble ? ( - toggleOpen(it.id)} className={toggableIconContainer}> - - < SidePanelRightArrowIcon /> - - - ) : null} - - - - {it.openAble ? ( - - {children} - - ) : null} - - ))} - -
- ); - } - - getToggableIconClassNames = (isOpen?: boolean, isActive ?: boolean) => { - const { classes } = this.props; - return classnames(classes.toggableIcon, { - [classes.iconOpen]: isOpen, - [classes.iconClose]: !isOpen, - [classes.active]: isActive - }); - } - - handleRowContextMenu = (item: SidePanelItem) => - (event: React.MouseEvent) => - item.openAble ? this.props.onContextMenu(event, item) : null - -} +import { ListItemTextIcon } from '../list-item-text-icon/list-item-text-icon'; type CssRules = 'active' | 'row' | 'root' | 'list' | 'iconClose' | 'iconOpen' | 'toggableIconContainer' | 'toggableIcon'; @@ -115,4 +50,73 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ } }); -export default withStyles(styles)(SidePanel); \ No newline at end of file +export interface SidePanelItem { + id: string; + name: string; + icon: IconType; + active?: boolean; + open?: boolean; + margin?: boolean; + openAble?: boolean; +} + +interface SidePanelDataProps { + toggleOpen: (id: string) => void; + toggleActive: (id: string) => void; + sidePanelItems: SidePanelItem[]; + onContextMenu: (event: React.MouseEvent, item: SidePanelItem) => void; +} + +type SidePanelProps = SidePanelDataProps & WithStyles; + +export const SidePanel = withStyles(styles)( + class extends React.Component { + render(): ReactElement { + const { classes, toggleOpen, toggleActive, sidePanelItems, children } = this.props; + const { root, row, list, toggableIconContainer } = classes; + return ( +
+ + {sidePanelItems.map(it => ( + + toggleActive(it.id)} + onContextMenu={this.handleRowContextMenu(it)}> + + {it.openAble ? ( + toggleOpen(it.id)} className={toggableIconContainer}> + + < SidePanelRightArrowIcon/> + + + ) : null} + + + + {it.openAble ? ( + + {children} + + ) : null} + + ))} + +
+ ); + } + + getToggableIconClassNames = (isOpen?: boolean, isActive ?: boolean) => { + const { classes } = this.props; + return classnames(classes.toggableIcon, { + [classes.iconOpen]: isOpen, + [classes.iconClose]: !isOpen, + [classes.active]: isActive + }); + } + + handleRowContextMenu = (item: SidePanelItem) => + (event: React.MouseEvent) => + item.openAble ? this.props.onContextMenu(event, item) : null + } +);