diff --git a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/duck.tsx b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/duck.tsx index 2d351a5649..6cf5ad38fe 100644 --- a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/duck.tsx +++ b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/duck.tsx @@ -157,7 +157,7 @@ function setTrace(state: TTraceTimeline, { uiFind, trace }: TTraceUiFindValue) { return Object.assign( { ...newInitialState(), spanNameColumnWidth, traceID }, - uiFind ? calculateFocusedFindRowStates(uiFind, spans) : null + uiFind ? calculateFocusedFindRowStates(uiFind, spans, false) : null ); } diff --git a/packages/jaeger-ui/src/utils/filter-spans.tsx b/packages/jaeger-ui/src/utils/filter-spans.tsx index 5817f65cbc..b9902d377d 100644 --- a/packages/jaeger-ui/src/utils/filter-spans.tsx +++ b/packages/jaeger-ui/src/utils/filter-spans.tsx @@ -26,17 +26,18 @@ export default function filterSpans(textFilter: string, spans: Span[] | TNil) { // values with keys that include text in any one of the excludeKeys will be ignored const excludeKeys: string[] = []; - // split textFilter by whitespace, remove empty strings, and extract includeFilters and excludeKeys - textFilter - .split(/\s+/) - .filter(Boolean) - .forEach(w => { - if (w[0] === '-') { - excludeKeys.push(w.substr(1).toLowerCase()); - } else { - includeFilters.push(w.toLowerCase()); - } - }); + // split textFilter by whitespace, but not that in double quotes, remove empty strings, and extract includeFilters and excludeKeys + const regex = /"[^"]+"|[^\s]+/g; + const match = textFilter.match(regex); + const results = match ? match.map(e => e.replace(/"(.*)"/, '$1')) : []; + + results.filter(Boolean).forEach(w => { + if (w[0] === '-') { + excludeKeys.push(w.substr(1).toLowerCase()); + } else { + includeFilters.push(w.toLowerCase()); + } + }); const isTextInFilters = (filters: Array, text: string) => filters.some(filter => text.toLowerCase().includes(filter));