diff --git a/client/app/scripts/components/matched-results.js b/client/app/scripts/components/matched-results.js index 5f97384d7..48ed8f3fd 100644 --- a/client/app/scripts/components/matched-results.js +++ b/client/app/scripts/components/matched-results.js @@ -18,7 +18,8 @@ class MatchedResults extends React.Component { {match.label}: - + ); diff --git a/client/app/scripts/components/matched-text.js b/client/app/scripts/components/matched-text.js index 2b00f29b9..f444ba722 100644 --- a/client/app/scripts/components/matched-text.js +++ b/client/app/scripts/components/matched-text.js @@ -82,15 +82,20 @@ function truncateChunks(chunks, text, maxLength) { class MatchedText extends React.Component { render() { - const { match, text, maxLength } = this.props; + const { match, text, truncate, maxLength } = this.props; + + const showFullValue = !truncate || match && match.start + match.length > truncate; + const displayText = showFullValue ? text : text.slice(0, truncate); if (!match) { - return {text}; + return {displayText}; } + const chunks = chunkText(displayText, match); + return ( - {truncateChunks(chunkText(text, match), text, maxLength).map((chunk, index) => { + {truncateChunks(chunks, displayText, maxLength).map((chunk, index) => { if (chunk.match) { return ( diff --git a/client/app/scripts/components/node-details/node-details-info.js b/client/app/scripts/components/node-details/node-details-info.js index 5804c0904..e21a9664d 100644 --- a/client/app/scripts/components/node-details/node-details-info.js +++ b/client/app/scripts/components/node-details/node-details-info.js @@ -42,7 +42,10 @@ export default class NodeDetailsInfo extends React.Component { {field.label}
- +
))} diff --git a/client/app/scripts/utils/search-utils.js b/client/app/scripts/utils/search-utils.js index 93c537c8a..77d67cc35 100644 --- a/client/app/scripts/utils/search-utils.js +++ b/client/app/scripts/utils/search-utils.js @@ -64,7 +64,7 @@ function matchPrefix(label, prefix) { * no match). * Returns a new instance of nodeMatches. */ -function findNodeMatch(nodeMatches, keyPath, text, query, prefix, label) { +function findNodeMatch(nodeMatches, keyPath, text, query, prefix, label, truncate) { if (!prefix || matchPrefix(label, prefix)) { const queryRe = makeRegExp(query); const matches = text.match(queryRe); @@ -72,7 +72,7 @@ function findNodeMatch(nodeMatches, keyPath, text, query, prefix, label) { const firstMatch = matches[0]; const index = text.search(queryRe); nodeMatches = nodeMatches.setIn(keyPath, - {text, label, start: index, length: firstMatch.length}); + {text, label, start: index, length: firstMatch.length, truncate}); } } return nodeMatches; @@ -135,7 +135,7 @@ export function searchTopology(nodes, { prefix, query, metric, comp, value }) { node.get('metadata').forEach(field => { const keyPath = [nodeId, 'metadata', field.get('id')]; nodeMatches = findNodeMatch(nodeMatches, keyPath, field.get('value'), - query, prefix, field.get('label')); + query, prefix, field.get('label'), field.get('truncate')); }); } diff --git a/report/metadata_template.go b/report/metadata_template.go index 42d872b21..1775eb4a4 100644 --- a/report/metadata_template.go +++ b/report/metadata_template.go @@ -45,13 +45,11 @@ func (t MetadataTemplate) MetadataRows(n Node) []MetadataRow { from = fromCounters } if val, ok := from(n, t.ID); ok { - if t.Truncate > 0 && len(val) > t.Truncate { - val = val[:t.Truncate] - } return []MetadataRow{{ ID: t.ID, Label: t.Label, Value: val, + Truncate: t.Truncate, Datatype: t.Datatype, Priority: t.Priority, }} @@ -89,6 +87,7 @@ type MetadataRow struct { Value string `json:"value"` Priority float64 `json:"priority,omitempty"` Datatype string `json:"dataType,omitempty"` + Truncate int `json:"truncate,omitempty"` } // Copy returns a value copy of a metadata row.