From 796a3ce005800d37ef5711b367c926ac720577d5 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Tue, 12 Nov 2019 11:54:04 -0300 Subject: [PATCH] 15067: Renders properties' key/values by their labels when possible. Also, the "copy to clipboard" feature remain copying the key/value ids. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- src/models/vocabulary.ts | 16 ++++++++++- .../collection-panel/collection-panel.tsx | 27 ++++++++++++------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/models/vocabulary.ts b/src/models/vocabulary.ts index 158d8058..ebef70f0 100644 --- a/src/models/vocabulary.ts +++ b/src/models/vocabulary.ts @@ -50,6 +50,14 @@ export const getTagValueID = (tagKeyID:string, tagValueLabel:string, vocabulary: l => l.label === tagValueLabel) !== undefined) || '' : ''; +export const getTagValueLabel = (tagKeyID:string, tagValueID:string, vocabulary: Vocabulary) => + vocabulary.tags[tagKeyID] && + vocabulary.tags[tagKeyID].values && + vocabulary.tags[tagKeyID].values![tagValueID] && + vocabulary.tags[tagKeyID].values![tagValueID].labels.length > 0 + ? vocabulary.tags[tagKeyID].values![tagValueID].labels[0].label + : tagValueID; + const compare = (a: PropFieldSuggestion, b: PropFieldSuggestion) => { if (a.label < b.label) {return -1;} if (a.label > b.label) {return 1;} @@ -86,4 +94,10 @@ export const getTags = ({ tags }: Vocabulary) => { export const getTagKeyID = (tagKeyLabel:string, vocabulary: Vocabulary) => Object.keys(vocabulary.tags).find( k => vocabulary.tags[k].labels.find( - l => l.label === tagKeyLabel) !== undefined) || ''; + l => l.label === tagKeyLabel) !== undefined + ) || ''; + +export const getTagKeyLabel = (tagKeyID:string, vocabulary: Vocabulary) => + vocabulary.tags[tagKeyID] && vocabulary.tags[tagKeyID].labels.length > 0 + ? vocabulary.tags[tagKeyID].labels[0].label + : tagKeyID; diff --git a/src/views/collection-panel/collection-panel.tsx b/src/views/collection-panel/collection-panel.tsx index 77d91558..f4d6532e 100644 --- a/src/views/collection-panel/collection-panel.tsx +++ b/src/views/collection-panel/collection-panel.tsx @@ -7,6 +7,7 @@ import { StyleRulesCallback, WithStyles, withStyles, Card, CardHeader, IconButton, CardContent, Grid, Chip, Tooltip } from '@material-ui/core'; +import { compose } from "redux"; import { connect, DispatchProp } from "react-redux"; import { RouteComponentProps } from 'react-router'; import { ArvadosTheme } from '~/common/custom-theme'; @@ -26,6 +27,8 @@ import { ResourceData } from "~/store/resources-data/resources-data-reducer"; import { openDetailsPanel } from '~/store/details-panel/details-panel-action'; import * as CopyToClipboard from 'react-copy-to-clipboard'; import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions'; +import { connectVocabulary, VocabularyProp } from '~/views-components/resource-properties-form/property-field-common'; +import { getTagValueLabel, getTagKeyLabel } from '~/models/vocabulary'; type CssRules = 'card' | 'iconHeader' | 'tag' | 'label' | 'value' | 'link'; @@ -65,16 +68,19 @@ interface CollectionPanelDataProps { type CollectionPanelProps = CollectionPanelDataProps & DispatchProp & WithStyles & RouteComponentProps<{ id: string }>; -export const CollectionPanel = withStyles(styles)( - connect((state: RootState, props: RouteComponentProps<{ id: string }>) => { - const item = getResource(props.match.params.id)(state.resources); - const data = getResourceData(props.match.params.id)(state.resourcesData); - return { item, data }; - })( - class extends React.Component { +export const CollectionPanel = compose( + connectVocabulary, + withStyles(styles))( + connect((state: RootState, props: RouteComponentProps<{ id: string }> & VocabularyProp) => { + const item = getResource(props.match.params.id)(state.resources); + const data = getResourceData(props.match.params.id)(state.resourcesData); + const vocabulary = props.vocabulary; + return { item, data, vocabulary }; + })( + class extends React.Component { render() { - const { classes, item, data, dispatch } = this.props; + const { classes, item, data, dispatch, vocabulary } = this.props; return item ? <> @@ -132,8 +138,9 @@ export const CollectionPanel = withStyles(styles)( { Object.keys(item.properties).map(k => { - const label = `${k}: ${item.properties[k]}`; - return this.onCopy("Copied")}> + const ids = `${k}: ${item.properties[k]}`; + const label = `${getTagKeyLabel(k, vocabulary)}: ${getTagValueLabel(k, item.properties[k], vocabulary)}`; + return this.onCopy("Copied")}> -- 2.30.2