X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/33608c44bf33ab330ad1267ab8d56c08634673b5..215016dc53873f311b5eb3e7e86f2d967ec447fe:/src/components/details-attribute/details-attribute.tsx diff --git a/src/components/details-attribute/details-attribute.tsx b/src/components/details-attribute/details-attribute.tsx index 32ab1671..aa177882 100644 --- a/src/components/details-attribute/details-attribute.tsx +++ b/src/components/details-attribute/details-attribute.tsx @@ -3,10 +3,14 @@ // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; +import { connect } from 'react-redux'; import Typography from '@material-ui/core/Typography'; import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'; import { ArvadosTheme } from '~/common/custom-theme'; import * as classnames from "classnames"; +import { Link } from 'react-router-dom'; +import { RootState } from "~/store/store"; +import { FederationConfig, getNavUrl } from "~/routes/routes"; type CssRules = 'attribute' | 'label' | 'value' | 'lowercaseValue' | 'link'; @@ -17,14 +21,15 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ marginBottom: theme.spacing.unit }, label: { + boxSizing: 'border-box', color: theme.palette.grey["500"], width: '40%' }, value: { + boxSizing: 'border-box', width: '60%', display: 'flex', - alignItems: 'flex-start', - textTransform: 'capitalize' + alignItems: 'flex-start' }, lowercaseValue: { textTransform: 'lowercase' @@ -33,31 +38,57 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ width: '60%', color: theme.palette.primary.main, textDecoration: 'none', - overflowWrap: 'break-word' + overflowWrap: 'break-word', + cursor: 'pointer' } }); interface DetailsAttributeDataProps { label: string; classLabel?: string; - value?: string | number; + value?: React.ReactNode; classValue?: string; lowercaseValue?: boolean; link?: string; children?: React.ReactNode; + onValueClick?: () => void; + linkToUuid?: string; } -type DetailsAttributeProps = DetailsAttributeDataProps & WithStyles; +type DetailsAttributeProps = DetailsAttributeDataProps & WithStyles & FederationConfig; + +const mapStateToProps = ({ auth }: RootState): FederationConfig => ({ + localCluster: auth.localCluster, + remoteHostsConfig: auth.remoteHostsConfig, + sessions: auth.sessions +}); -export const DetailsAttribute = withStyles(styles)( - ({ label, link, value, children, classes, classLabel, classValue, lowercaseValue }: DetailsAttributeProps) => - +export const DetailsAttribute = connect(mapStateToProps)(withStyles(styles)( + ({ label, link, value, children, classes, classLabel, + classValue, lowercaseValue, onValueClick, linkToUuid, + localCluster, remoteHostsConfig, sessions }: DetailsAttributeProps) => { + let insertLink: React.ReactNode; + if (linkToUuid) { + const linkUrl = getNavUrl(linkToUuid || "", { localCluster, remoteHostsConfig, sessions }); + if (linkUrl[0] === '/') { + insertLink = {value}; + } else { + insertLink = {value}; + } + } else if (link) { + insertLink = {value}; + } + return {label} - { link - ? {value} - : - {value} - {children} - } - -); + {insertLink} + {!insertLink && + {value} + {children} + + } + ; + } +));