1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import Drawer from '@material-ui/core/Drawer';
7 import IconButton from "@material-ui/core/IconButton";
8 import CloseIcon from '@material-ui/icons/Close';
9 import { StyleRulesCallback, WithStyles, withStyles, Theme } from "@material-ui/core/styles";
10 import Tabs from '@material-ui/core/Tabs';
11 import Tab from '@material-ui/core/Tab';
12 import Typography from '@material-ui/core/Typography';
13 import Grid from '@material-ui/core/Grid';
14 import * as classnames from "classnames";
16 export interface DetailsPanelProps {
17 closeDrawer: () => void;
21 class DetailsPanel extends React.Component<DetailsPanelProps & WithStyles<CssRules>, {}> {
26 handleChange = (event: any, value: boolean) => {
27 this.setState({ tabsValue: value });
30 renderTabContainer = (children: React.ReactElement<any>) => {
32 <Typography className={this.props.classes.tabContainer} component="div">
39 const { classes, closeDrawer, isOpened } = this.props;
40 const { tabsValue } = this.state;
42 <div className={classnames([classes.container, { [classes.opened]: isOpened }])}>
43 <Drawer variant="permanent" anchor="right" classes={{ paper: classes.drawerPaper }}>
44 <Typography component="div" className={classes.headerContainer}>
45 <Grid container alignItems='center' justify='space-around'>
46 <Typography variant="title">
49 <IconButton color="inherit" onClick={closeDrawer}>
54 <Tabs value={tabsValue} onChange={this.handleChange}
55 classes={{ indicator: classes.tabsIndicator }}>
58 classes={{ root: classes.tabRoot, selected: classes.tabSelected }}
62 classes={{ root: classes.tabRoot, selected: classes.tabSelected }}
65 {tabsValue === 0 && this.renderTabContainer(
67 <Grid item xs={6} sm={4} className={classes.gridLabel}>
73 <Grid item xs={6} sm={4}>
81 {tabsValue === 1 && this.renderTabContainer(
83 <Grid item xs={6} sm={4} className={classes.gridLabel}>
89 <Grid item xs={6} sm={4}>
104 type CssRules = 'drawerPaper' | 'container' | 'opened' | 'headerContainer'
105 | 'tabsIndicator' | 'tabRoot' | 'tabContainer' | 'tabSelected' | 'gridLabel';
107 const drawerWidth = 320;
108 const colorPurple = '#692498';
109 const colorLightGray = '#A1A1A1';
110 const colorVeryLightGray = '#999999';
111 const colorGray = '#333';
113 const styles: StyleRulesCallback<CssRules> = (theme: Theme) => ({
116 position: 'relative',
118 transition: 'width 0.5s ease',
125 position: 'relative',
129 color: colorLightGray,
130 margin: `${theme.spacing.unit}px 0`
133 backgroundColor: colorPurple
143 padding: theme.spacing.unit * 3
147 color: colorVeryLightGray,
151 export default withStyles(styles)(DetailsPanel);