Create breadcrumbs component
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Fri, 8 Jun 2018 12:48:34 +0000 (14:48 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Fri, 8 Jun 2018 12:48:34 +0000 (14:48 +0200)
Feature #13590

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/components/main-app-bar/breadcrumbs/breadcrumbs.tsx [new file with mode: 0644]

diff --git a/src/components/main-app-bar/breadcrumbs/breadcrumbs.tsx b/src/components/main-app-bar/breadcrumbs/breadcrumbs.tsx
new file mode 100644 (file)
index 0000000..9803683
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from 'react';
+import { Button, Grid, StyleRulesCallback, WithStyles } from '@material-ui/core';
+import ChevronRightIcon from '@material-ui/icons/ChevronRight';
+import { withStyles } from '@material-ui/core';
+
+interface BreadcrumbsDataProps {
+    items: string[]
+}
+
+type BreadcrumbsProps = BreadcrumbsDataProps & WithStyles<CssRules>;
+
+class Breadcrumbs extends React.Component<BreadcrumbsProps> {
+
+    render() {
+        const { classes } = this.props;
+        return <Grid container alignItems="center">
+            {
+                this.getInactiveItems().map((item, index) => (
+                    <React.Fragment key={index}>
+                        <Button color="inherit" className={classes.inactiveItem}>{item}</Button>
+                        <ChevronRightIcon color="inherit" className={classes.inactiveItem} />
+                    </React.Fragment>
+                ))
+            }
+            {
+                this.getActiveItem().map((item, index) => (
+                    <Button key={index} color="inherit">{item}</Button>
+                ))
+            }
+        </Grid>
+    }
+
+    getInactiveItems = () => {
+        return this.props.items.slice(0, -1)
+    }
+
+    getActiveItem = () => {
+        return this.props.items.slice(-1)
+    }
+}
+
+type CssRules = 'inactiveItem'
+
+const styles: StyleRulesCallback<CssRules> = theme => {
+    const { unit } = theme.spacing
+    return {
+        inactiveItem: {
+            opacity: 0.6
+        }
+    }
+}
+
+export default withStyles(styles)(Breadcrumbs)
+