From fedc823d99366e9ab2c04cd0b7c1c54e0ed917d0 Mon Sep 17 00:00:00 2001 From: shortcuts Date: Tue, 5 Jan 2021 13:42:33 +0100 Subject: [PATCH 1/3] Fix special char escaping for highlight on recent searches --- packages/autocomplete-js/src/highlight.ts | 2 +- .../src/usecases/localStorage/search.ts | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/autocomplete-js/src/highlight.ts b/packages/autocomplete-js/src/highlight.ts index 4deee863f..7a7032ae8 100644 --- a/packages/autocomplete-js/src/highlight.ts +++ b/packages/autocomplete-js/src/highlight.ts @@ -19,7 +19,7 @@ function concatParts( return ( acc + (current.isHighlighted - ? `${highlightPreTag}${current.value}${highlightPostTag}` + ? highlightPreTag + current.value + highlightPostTag : current.value) ); }, ''); diff --git a/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts b/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts index f6009b92e..07c6d5813 100644 --- a/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts +++ b/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts @@ -5,6 +5,20 @@ type HighlightParams = { query: string; }; +type EscapeAndReplace = { + query: string; + itemQuery: string; +}; + +const escapeSpecialChars = new RegExp(/[-/\\^$*+?.()|[\]{}]/g); + +function escapeAndReplace({ query, itemQuery }: EscapeAndReplace) { + return itemQuery.replace( + new RegExp(query.replace(escapeSpecialChars, '\\$&'), 'g'), + `__aa-highlight__${query}__/aa-highlight__` + ); +} + function highlight({ item, query, @@ -14,10 +28,7 @@ function highlight({ _highlightResult: { query: { value: query - ? item.query.replace( - new RegExp(query, 'g'), - `__aa-highlight__${query}__/aa-highlight__` - ) + ? escapeAndReplace({ query, itemQuery: item.query }) : item.query, }, }, From 44a9642811c6baa6ebcf24a89f5c799bff43bccb Mon Sep 17 00:00:00 2001 From: shortcuts Date: Tue, 5 Jan 2021 14:00:27 +0100 Subject: [PATCH 2/3] Fix query replacement in recent searches --- .../src/usecases/localStorage/search.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts b/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts index f6009b92e..27da1afbd 100644 --- a/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts +++ b/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts @@ -14,8 +14,8 @@ function highlight({ _highlightResult: { query: { value: query - ? item.query.replace( - new RegExp(query, 'g'), + ? item.query.replaceAll( + query, `__aa-highlight__${query}__/aa-highlight__` ) : item.query, From 9276504e21c5d5925c30b5d40c08b73aa25c13de Mon Sep 17 00:00:00 2001 From: shortcuts Date: Mon, 11 Jan 2021 17:54:33 +0100 Subject: [PATCH 3/3] Use RegExp instead of replaceAll --- .../src/usecases/localStorage/search.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts b/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts index 27da1afbd..086dbf831 100644 --- a/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts +++ b/packages/autocomplete-plugin-recent-searches/src/usecases/localStorage/search.ts @@ -14,8 +14,8 @@ function highlight({ _highlightResult: { query: { value: query - ? item.query.replaceAll( - query, + ? item.query.replace( + new RegExp(query.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), `__aa-highlight__${query}__/aa-highlight__` ) : item.query,