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.