#13704: add attribute comonent and clean code
[arvados-workbench2.git] / src / views-components / details-panel / details-panel.tsx
index 4b55d3f5923982afb524d34afc24e58f48cc7391..be257e8382ac4b6e935fdc980c8ae5343e081395 100644 (file)
@@ -6,23 +6,18 @@ import * as React from 'react';
 import Drawer from '@material-ui/core/Drawer';
 import IconButton from "@material-ui/core/IconButton";
 import CloseIcon from '@material-ui/icons/Close';
-import { StyleRulesCallback, WithStyles, withStyles, Theme } from "@material-ui/core/styles";
+import FolderIcon from '@material-ui/icons/Folder';
+import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles';
+import { ArvadosTheme } from '../../common/custom-theme';
+import Attribute from '../../components/attribute/attribute';
 import Tabs from '@material-ui/core/Tabs';
 import Tab from '@material-ui/core/Tab';
 import Typography from '@material-ui/core/Typography';
-import * as classnames from "classnames";
 import Grid from '@material-ui/core/Grid';
-
-function TabContainer(props: any) {
-       return (
-               <Typography component="div" style={{ padding: 8 * 3 }}>
-                       {props.children}
-               </Typography>
-       );
-}
+import * as classnames from "classnames";
 
 export interface DetailsPanelProps {
-    toggleDrawer: (isOpened: boolean) => void;
+    onCloseDrawer: () => void;
     isOpened: boolean;
 }
 
@@ -34,70 +29,55 @@ class DetailsPanel extends React.Component<DetailsPanelProps & WithStyles<CssRul
        handleChange = (event: any, value: boolean) => {
                this.setState({ tabsValue: value });
        }
-       
+    
+    renderTabContainer = (children: React.ReactElement<any>) => 
+        <Typography className={this.props.classes.tabContainer} component="div">
+            {children}
+        </Typography>
+
        render() {
-               const { classes, toggleDrawer, isOpened } = this.props;
+        const { classes, onCloseDrawer, isOpened } = this.props;
                const { tabsValue } = this.state;
         return (
-            <div className={classes.container}>
-                               <Drawer variant="persistent" anchor="right" open={isOpened} onClose={() => toggleDrawer(false)}
-                    classes={{
-                        paper: classes.drawerPaper
-                    }}>
-                                       {/* className={classnames([classes.root, { [classes.active]: isActive }])} */}
+            <div className={classnames([classes.container, { [classes.opened]: isOpened }])}>
+                <Drawer variant="permanent" anchor="right" classes={{ paper: classes.drawerPaper }}>
                                        <Typography component="div" className={classes.headerContainer}>
                                                <Grid container alignItems='center' justify='space-around'>
-                                                       <Typography variant="title" className={classes.headerTitle} gutterBottom>
+                            <i className="fas fa-cogs fa-lg" />
+                                                       <Typography variant="title">
                                                                Tutorial pipeline
                                                        </Typography>
-                                                       <IconButton color="inherit" onClick={() => toggleDrawer(false)}>
+                            <IconButton color="inherit" onClick={onCloseDrawer}>
                                                                <CloseIcon />
                                                        </IconButton>
                                                </Grid>
                                        </Typography>
-                                       <Tabs value={tabsValue} onChange={this.handleChange}
-                                               classes={{ indicator: classes.tabsIndicator }}>
-                                               <Tab
-                                                       disableRipple
-                                                       classes={{ root: classes.tabRoot, selected: classes.tabSelected }}
-                                                       label="Details" />
-                                               <Tab
-                                                       disableRipple
-                                                       classes={{ root: classes.tabRoot, selected: classes.tabSelected }}
-                                                       label="Activity" />
+                                       <Tabs value={tabsValue} onChange={this.handleChange}>
+                                               <Tab disableRipple label="Details" />
+                                               <Tab disableRipple label="Activity" />
                                        </Tabs>
-                                       {tabsValue === 0 && <TabContainer>
-                                               <Grid container>
-                                                       <Grid item xs={6} sm={4} className={classes.gridLabel}>
-                                                               <p>Type</p>
-                                                               <p>Size</p>
-                                                               <p>Location</p>
-                                                               <p>Owner</p>
-                                                       </Grid>
-                                                       <Grid item xs={6} sm={4}>                                                               
-                                                               <p>Process</p>
-                                                               <p>---</p>
-                                                               <p>Projects</p>
-                                                               <p>me</p>
-                                                       </Grid>
-                                               </Grid>
-                                       </TabContainer>}
-                                       {tabsValue === 1 && <TabContainer>
-                                               <Grid container>
-                                                       <Grid item xs={6} sm={4} className={classes.gridLabel}>
-                                                               <p>Type</p>
-                                                               <p>Size</p>
-                                                               <p>Location</p>
-                                                               <p>Owner</p>
-                                                       </Grid>
-                                                       <Grid item xs={6} sm={4}>
-                                                               <p>Process</p>
-                                                               <p>---</p>
-                                                               <p>Projects</p>
-                                                               <p>me</p>
-                                                       </Grid>
+                    {tabsValue === 0 && this.renderTabContainer(
+                        <Grid container direction="column">
+                            <Attribute label="Type">Process</Attribute>
+                            <Attribute label="Size">---</Attribute>
+                            <Attribute label="Location">
+                                <FolderIcon />
+                                Projects
+                            </Attribute>
+                            <Attribute label="Owner">me</Attribute>
                                                </Grid>
-                                       </TabContainer>}
+                                       )}
+                    {tabsValue === 1 && this.renderTabContainer(
+                        <Grid container direction="column">
+                            <Attribute label="Type">Process</Attribute>
+                            <Attribute label="Size">---</Attribute>
+                            <Attribute label="Location">
+                                <FolderIcon />
+                                Projects
+                            </Attribute>
+                            <Attribute label="Owner">me</Attribute>
+                        </Grid>
+                                       )}
                 </Drawer>
             </div>
         );
@@ -105,43 +85,34 @@ class DetailsPanel extends React.Component<DetailsPanelProps & WithStyles<CssRul
 
 }
 
-type CssRules = 'drawerPaper' | 'container' | 'headerContainer' | 'headerTitle' 
-       | 'tabsIndicator' | 'tabRoot' | 'tabContainer' | 'tabSelected' | 'gridLabel';
+type CssRules = 'drawerPaper' | 'container' | 'opened' | 'headerContainer' | 'tabContainer';
 
 const drawerWidth = 320;
-const purple = '#692498';
-const styles: StyleRulesCallback<CssRules> = (theme: Theme) => ({
+const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
        container: {
+        width: 0,
                position: 'relative',
-               height: 'auto'
-       },
+        height: 'auto',
+        transition: 'width 0.5s ease',
+        '&$opened': {
+            width: drawerWidth
+        }
+    },
+    opened: {},
     drawerPaper: {
         position: 'relative',
         width: drawerWidth
        },
        headerContainer: {
-               color: '#A1A1A1',
-               margin: `${theme.spacing.unit}px 0`
-       },
-       headerTitle: {
-               marginBottom: 0
-       },
-       tabsIndicator: {
-               backgroundColor: purple
-       },
-       tabRoot: {
-               color: '#333333',
-               '&$tabSelected': {
-                       fontWeight: 700,
-                       color: purple
-               }
+        color: theme.palette.grey["600"],
+        margin: `${theme.spacing.unit}px 0`,
+        '& .fa-cogs': {
+            fontSize: "24px",
+            color: theme.customs.colors.green700
+        }
        },
        tabContainer: {
                padding: theme.spacing.unit * 3
-       },
-       tabSelected: {},
-       gridLabel: {
-               color: '#999999',
        }
 });