diff --git a/frontend/src/component/common/Highlighter/Highlighter.test.tsx b/frontend/src/component/common/Highlighter/Highlighter.test.tsx index 2382f86ced..2245c00b49 100644 --- a/frontend/src/component/common/Highlighter/Highlighter.test.tsx +++ b/frontend/src/component/common/Highlighter/Highlighter.test.tsx @@ -41,3 +41,21 @@ test('respects case sensitivity when specified', () => { expect(container.innerHTML).not.toContain(''); }); + +test('highlights multiple search terms', () => { + const { container } = render( + Test Text, + ); + + expect(container.innerHTML).toContain('Test'); + expect(container.innerHTML).toContain('Text'); +}); + +test('highlights first match on conflict', () => { + const { container } = render( + TestText, + ); + + expect(container.innerHTML).toContain('Test'); + expect(container.innerHTML).not.toContain('stText'); +}); diff --git a/frontend/src/component/common/Highlighter/Highlighter.tsx b/frontend/src/component/common/Highlighter/Highlighter.tsx index b9a2a39e9b..6e612b5835 100644 --- a/frontend/src/component/common/Highlighter/Highlighter.tsx +++ b/frontend/src/component/common/Highlighter/Highlighter.tsx @@ -27,7 +27,11 @@ export const Highlighter: VFC = ({ return <>{children}; } - const regex = safeRegExp(search, caseSensitive ? 'g' : 'gi'); + const searchTerms = search.split(',').map((term) => term.trim()); + const searchRegex = searchTerms + .map((term) => safeRegExp(term, '').source) + .join('|'); + const regex = new RegExp(searchRegex, caseSensitive ? 'g' : 'gi'); const parts = children.split(regex);