X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/6fddc846a57888e77f95c7377469f681596cedbb..87dad7df1d3e32afccf7357df1b1d39af5a98154:/src/views-components/details-panel/details-panel.tsx diff --git a/src/views-components/details-panel/details-panel.tsx b/src/views-components/details-panel/details-panel.tsx index d0bc974d..34195784 100644 --- a/src/views-components/details-panel/details-panel.tsx +++ b/src/views-components/details-panel/details-panel.tsx @@ -13,7 +13,6 @@ import Typography from '@material-ui/core/Typography'; import Grid from '@material-ui/core/Grid'; import * as classnames from "classnames"; import { connect, Dispatch } from 'react-redux'; -import EmptyState from '../../components/empty-state/empty-state'; import { RootState } from '../../store/store'; import actions from "../../store/details-panel/details-panel-action"; import { ProjectResource } from '../../models/project'; @@ -21,13 +20,13 @@ import { CollectionResource } from '../../models/collection'; import IconBase, { IconTypes } from '../../components/icon/icon'; import { ProcessResource } from '../../models/process'; import DetailsPanelFactory from '../../components/details-panel-factory/details-panel-factory'; +import AbstractItem from '../../components/details-panel-factory/items/abstract-item'; +import { EmptyResource } from '../../models/empty'; export interface DetailsPanelDataProps { onCloseDrawer: () => void; isOpened: boolean; - icon: IconTypes; - title: string; - details: React.ReactElement; + item: AbstractItem; } type DetailsPanelProps = DetailsPanelDataProps & WithStyles; @@ -47,20 +46,26 @@ class DetailsPanel extends React.Component { render() { - const { classes, onCloseDrawer, isOpened, icon, title, details } = this.props; + const { classes, onCloseDrawer, isOpened, item } = this.props; const { tabsValue } = this.state; return ( - - - {title} - - - - + + + + + + {item.getTitle()} + + + + + + + @@ -69,7 +74,7 @@ class DetailsPanel extends React.Component { {tabsValue === 0 && this.renderTabContainer( - {details} + {item.buildDetails()} )} {tabsValue === 1 && this.renderTabContainer( @@ -102,7 +107,8 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ }, headerContainer: { color: theme.palette.grey["600"], - margin: `${theme.spacing.unit}px 0` + margin: `${theme.spacing.unit}px 0`, + textAlign: 'center' }, headerIcon: { fontSize: "34px" @@ -112,37 +118,22 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ } }); -// TODO: move to models -type DetailsPanelResource = ProjectResource | CollectionResource | ProcessResource; -const getEmptyState = () => { - return ; -}; +export type DetailsPanelResource = ProjectResource | CollectionResource | ProcessResource | EmptyResource; const getItem = (res: DetailsPanelResource) => { - const item = DetailsPanelFactory.createItem(res); - return { - title: item.getTitle(), - icon: item.getIcon(), - details: item.buildDetails() - }; + return DetailsPanelFactory.createItem(res); }; const getDefaultItem = () => { - return { - title: 'Projects', - icon: IconTypes.FOLDER, - details: getEmptyState() - }; + return DetailsPanelFactory.createItem({ kind: undefined, name: 'Projects' }); }; const mapStateToProps = ({ detailsPanel }: RootState) => { const { isOpened, item } = detailsPanel; - const newItem = item ? getItem(item as DetailsPanelResource) : getDefaultItem(); return { isOpened, - ...newItem + item: item ? getItem(item as DetailsPanelResource) : getDefaultItem() }; };