X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d5e09062859cc29dff60b16be912ff3743173b34..7622261116e685cad4af9cf6a4d1dd9c58cd1605:/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 f47dfa0650..13498f3317 100644 --- a/src/views-components/details-panel/details-panel.tsx +++ b/src/views-components/details-panel/details-panel.tsx @@ -13,13 +13,20 @@ import Tab from '@material-ui/core/Tab'; 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 IconBase from '../../components/icon/icon'; +import { RootState } from '../../store/store'; +import actions from "../../store/details-panel/details-panel-action"; +import { Resource } from '../../common/api/common-resource-service'; +import { ResourceKind } from '../../models/kinds'; +import { ProjectResource } from '../../models/project'; +import { CollectionResource } from '../../models/collection'; export interface DetailsPanelDataProps { onCloseDrawer: () => void; isOpened: boolean; - renderHeader?: React.ComponentType<{}>; + header: React.ReactElement; renderDetails?: React.ComponentType<{}>; renderActivity?: React.ComponentType<{}>; } @@ -27,47 +34,41 @@ export interface DetailsPanelDataProps { type DetailsPanelProps = DetailsPanelDataProps & WithStyles; class DetailsPanel extends React.Component { - state = { + state = { tabsValue: 0 - }; + }; - handleChange = (event: any, value: boolean) => { - this.setState({ tabsValue: value }); - } - - renderTabContainer = (children: React.ReactElement) => + handleChange = (event: any, value: boolean) => { + this.setState({ tabsValue: value }); + } + + renderTabContainer = (children: React.ReactElement) => {children} - - render() { - const { classes, onCloseDrawer, isOpened, renderHeader, renderDetails, renderActivity } = this.props; + + render() { + const { classes, onCloseDrawer, isOpened, header, renderDetails, renderActivity } = this.props; const { tabsValue } = this.state; return ( - - - {renderHeader} - {/* TODO: renderHeader */} - - - Tutorial pipeline - - {/* End */} + + + {header} - - - - - - - + + + + + + + {tabsValue === 0 && this.renderTabContainer( {renderDetails} - @@ -77,14 +78,14 @@ class DetailsPanel extends React.Component { - - )} + + )} {tabsValue === 1 && this.renderTabContainer( {renderActivity} - )} + )} ); @@ -96,9 +97,9 @@ type CssRules = 'drawerPaper' | 'container' | 'opened' | 'headerContainer' | 'ta const drawerWidth = 320; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ - container: { + container: { width: 0, - position: 'relative', + position: 'relative', height: 'auto', transition: 'width 0.5s ease', '&$opened': { @@ -109,18 +110,58 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ drawerPaper: { position: 'relative', width: drawerWidth - }, - headerContainer: { + }, + headerContainer: { 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 - } + }, + tabContainer: { + padding: theme.spacing.unit * 3 + } }); -export default withStyles(styles)(DetailsPanel); \ No newline at end of file +const renderCollectionHeader = (collection: CollectionResource) => + <> + + + {collection.name} + + ; + +const renderProjectHeader = (project: ProjectResource) => + <> + + + {project.name} + + ; + +const renderHeader = (resource: Resource) => { + switch(resource.kind) { + case ResourceKind.Project: + return renderProjectHeader(resource as ProjectResource); + case ResourceKind.Collection: + return renderCollectionHeader(resource as CollectionResource); + default: + return null; + } +}; + +const mapStateToProps = ({detailsPanel}: RootState) => ({ + isOpened: detailsPanel.isOpened, + header: detailsPanel.item ? renderHeader(detailsPanel.item) : null +}); + +const mapDispatchToProps = (dispatch: Dispatch) => ({ + onCloseDrawer: () => { + dispatch(actions.TOGGLE_DETAILS_PANEL()); + } +}); + +const DetailsPanelContainer = connect(mapStateToProps, mapDispatchToProps)(DetailsPanel); + +export default withStyles(styles)(DetailsPanelContainer); \ No newline at end of file