X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/762c232937e6825839ada7d682542601aaffbd90..cf895a44aa0b2a175bc70056ce0bf1c66cb8192f:/src/components/breadcrumbs/breadcrumbs.tsx diff --git a/src/components/breadcrumbs/breadcrumbs.tsx b/src/components/breadcrumbs/breadcrumbs.tsx index 6c2d1fb2..baf84d1d 100644 --- a/src/components/breadcrumbs/breadcrumbs.tsx +++ b/src/components/breadcrumbs/breadcrumbs.tsx @@ -2,78 +2,112 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from 'react'; -import { Button, Grid, StyleRulesCallback, WithStyles } from '@material-ui/core'; +import React from 'react'; +import { Button, Grid, StyleRulesCallback, WithStyles, Typography, Tooltip } from '@material-ui/core'; import ChevronRightIcon from '@material-ui/icons/ChevronRight'; import { withStyles } from '@material-ui/core'; +import { IllegalNamingWarning } from '../warning/warning'; +import { IconType, FreezeIcon } from 'components/icon/icon'; +import grey from '@material-ui/core/colors/grey'; +import { ResourcesState } from 'store/resources/resources'; +import classNames from 'classnames'; +import { ArvadosTheme } from 'common/custom-theme'; export interface Breadcrumb { - label: string + label: string; + icon?: IconType; + uuid: string; } -interface BreadcrumbsDataProps { - items: Breadcrumb[] -} - -interface BreadcrumbsActionProps { - onClick: (breadcrumb: Breadcrumb) => any -} +type CssRules = "item" | "chevron" | "label" | "buttonLabel" | "icon" | "frozenIcon"; -type BreadcrumbsProps = BreadcrumbsDataProps & BreadcrumbsActionProps & WithStyles; +const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ + item: { + borderRadius: '16px', + height: '32px', + minWidth: '36px', + color: theme.customs.colors.grey700, + '&.parentItem': { + color: `${theme.palette.primary.main}`, + }, + }, + chevron: { + color: grey["600"], + }, + label: { + textTransform: "none", + paddingRight: '3px', + paddingLeft: '3px', + lineHeight: '1.4', + }, + buttonLabel: { + overflow: 'hidden', + justifyContent: 'flex-start', + }, + icon: { + fontSize: 20, + color: grey["600"], + marginRight: '5px', + }, + frozenIcon: { + fontSize: 20, + color: grey["600"], + marginLeft: '3px', + }, +}); -class Breadcrumbs extends React.Component { +export interface BreadcrumbsProps { + items: Breadcrumb[]; + resources: ResourcesState; + onClick: (breadcrumb: Breadcrumb) => void; + onContextMenu: (event: React.MouseEvent, breadcrumb: Breadcrumb) => void; +} - render() { - const { classes, onClick } = this.props; - return - { - this.getInactiveItems().map((item, index) => ( - +export const Breadcrumbs = withStyles(styles)( + ({ classes, onClick, onContextMenu, items, resources }: BreadcrumbsProps & WithStyles) => + + { + items.map((item, index) => { + const isLastItem = index === items.length - 1; + const isFirstItem = index === 0; + const Icon = item.icon || (() => (null)); + return ( + + {isFirstItem ? null : } + - - - )) - } - { - this.getActiveItem().map((item, index) => ( - - )) - } - - } - - getInactiveItems = () => { - return this.props.items.slice(0, -1) - } - - getActiveItem = () => { - return this.props.items.slice(-1) + + {!isLastItem && } + + ); + }) } - -} - -type CssRules = 'inactiveItem' - -const styles: StyleRulesCallback = theme => { - const { unit } = theme.spacing - return { - inactiveItem: { - opacity: 0.6 - } - } -} - -export default withStyles(styles)(Breadcrumbs) - + +);