).name)
: option) as string
-export const highlightSearch = (text: string, search: string, matchClassName = "match") =>
- text && search
- ? text.replaceAll(search, `$&`)
- : (text ?? "")
+export const highlightSearch = (
+ text: string,
+ search: string,
+ matchClassName = "match",
+): ReactNode => {
+ if (!text || !search) return text ?? ""
+
+ const parts = text.split(search)
+ if (parts.length === 1) return text
+
+ return parts.flatMap((part, index) =>
+ index < parts.length - 1
+ ? [
+ part,
+
+ {search}
+ ,
+ ]
+ : [part],
+ )
+}
/**
* Navigate from inside a Radix-based overlay (Sheet, Dialog, DropdownMenu).
diff --git a/console/src/views/users/rules/FilterRuleEdit.tsx b/console/src/views/users/rules/FilterRuleEdit.tsx
index c69a7388..8f1f56a4 100644
--- a/console/src/views/users/rules/FilterRuleEdit.tsx
+++ b/console/src/views/users/rules/FilterRuleEdit.tsx
@@ -123,13 +123,7 @@ export default function FilterRuleEdit({
required
inputClassName="rounded-none border-l-0"
buttonClassName="rounded-none"
- renderOption={(option, search) => (
-
- )}
+ renderOption={(option, search) => highlightSearch(option.path, search)}
/>
diff --git a/console/src/views/users/rules/JourneyRuleEdit.tsx b/console/src/views/users/rules/JourneyRuleEdit.tsx
index 8c3feb01..38fd7e27 100644
--- a/console/src/views/users/rules/JourneyRuleEdit.tsx
+++ b/console/src/views/users/rules/JourneyRuleEdit.tsx
@@ -103,13 +103,7 @@ export default function JourneyRuleEdit({
required
inputClassName="rounded-none border-l-0"
buttonClassName="rounded-none"
- renderOption={(option, search) => (
-
- )}
+ renderOption={(option, search) => highlightSearch(option.path, search)}
/>
diff --git a/console/src/views/users/rules/MemberConditionEdit.tsx b/console/src/views/users/rules/MemberConditionEdit.tsx
index 462157a4..e61af9a2 100644
--- a/console/src/views/users/rules/MemberConditionEdit.tsx
+++ b/console/src/views/users/rules/MemberConditionEdit.tsx
@@ -113,13 +113,9 @@ export default function MemberConditionEdit({
required
inputClassName="rounded-none border-l-0"
buttonClassName="rounded-none"
- renderOption={(option, search) => (
-
- )}
+ renderOption={(option, search) =>
+ highlightSearch(option.name || option.path, search)
+ }
/>