diff --git a/packages/tools/src/filterName.ts b/packages/tools/src/filterName.ts
index 72b434b1f..0676d701a 100644
--- a/packages/tools/src/filterName.ts
+++ b/packages/tools/src/filterName.ts
@@ -67,24 +67,56 @@ export function filterNameCompoud(
return 'none';
}
-export function tokenizeBySearchFilter(text: string, filter: string): { token: string; isMatch: boolean }[] {
- const tokens = filter.split(' ').map(x => x.trim());
-
- const result = [];
- let lastMatch = 0;
- for (const token of tokens) {
- const index = text.indexOf(token, lastMatch);
- if (index < 0) {
- result.push({ token, isMatch: false });
- continue;
+export function tokenizeBySearchFilter(text: string, filter: string): { text: string; isMatch: boolean }[] {
+ const camelTokens = [];
+ const stdTokens = [];
+ for (const token of filter.split(' ').map(x => x.trim())) {
+ if (token.replace(/[A-Z]/g, '').length == 0) {
+ camelTokens.push(token);
+ } else {
+ stdTokens.push(token.toUpperCase());
}
-
- result.push({ token: text.substring(lastMatch, index), isMatch: false });
- result.push({ token: text.substring(index, index + token.length), isMatch: true });
- lastMatch = index + token.length;
}
- result.push({ token: text.substring(lastMatch), isMatch: false });
+ let res = [
+ {
+ text,
+ isMatch: false,
+ },
+ ];
- return result;
+ for (const token of stdTokens) {
+ const nextres = [];
+ for (const item of res) {
+ const index = item.text?.toUpperCase().indexOf(token);
+ if (index < 0) {
+ nextres.push(item);
+ } else {
+ nextres.push({ text: item.text.substring(0, index), isMatch: false });
+ nextres.push({ text: item.text.substring(index, index + token.length), isMatch: true });
+ nextres.push({ text: item.text.substring(index + token.length), isMatch: false });
+ }
+ }
+ res = nextres;
+ }
+
+ return res;
+
+ // const result = [];
+ // let lastMatch = 0;
+ // for (const token of tokens) {
+ // const index = text.indexOf(token, lastMatch);
+ // if (index < 0) {
+ // result.push({ token, isMatch: false });
+ // continue;
+ // }
+
+ // result.push({ token: text.substring(lastMatch, index), isMatch: false });
+ // result.push({ token: text.substring(index, index + token.length), isMatch: true });
+ // lastMatch = index + token.length;
+ // }
+
+ // result.push({ token: text.substring(lastMatch), isMatch: false });
+
+ // return result;
}
diff --git a/packages/web/src/appobj/AppObjectCore.svelte b/packages/web/src/appobj/AppObjectCore.svelte
index 8545f5f3d..8b26e55a3 100644
--- a/packages/web/src/appobj/AppObjectCore.svelte
+++ b/packages/web/src/appobj/AppObjectCore.svelte
@@ -5,6 +5,7 @@
import CheckboxField from '../forms/CheckboxField.svelte';
import { copyTextToClipboard } from '../utility/clipboard';
import { showSnackbarSuccess } from '../utility/snackbar';
+ import TokenizedFilteredText from '../widgets/TokenizedFilteredText.svelte';
const dispatch = createEventDispatcher();
@@ -134,7 +135,7 @@
{#if colorMark}
{/if}
- {title}
+
{#if statusIconBefore}
@@ -156,7 +157,7 @@
{/if}
{#if extInfo}
- {extInfo}
+
{/if}
{#if onPin}
diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte
index 17c6783a9..7af64f669 100644
--- a/packages/web/src/widgets/SqlObjectList.svelte
+++ b/packages/web/src/widgets/SqlObjectList.svelte
@@ -274,7 +274,9 @@
? isExpandedBySearch
? SubProcedureLineList
: SubProcedureParamList
- : SubTableColumnList}
+ : isExpandedBySearch && (data.objectTypeField == 'views' || data.objectTypeField == 'matviews')
+ ? SubProcedureLineList
+ : SubTableColumnList}
isExpandable={data =>
data.objectTypeField == 'tables' ||
data.objectTypeField == 'views' ||
diff --git a/packages/web/src/widgets/TokenizedFilteredText.svelte b/packages/web/src/widgets/TokenizedFilteredText.svelte
new file mode 100644
index 000000000..3a7575a46
--- /dev/null
+++ b/packages/web/src/widgets/TokenizedFilteredText.svelte
@@ -0,0 +1,26 @@
+
+
+{#if tokenized}
+ {#each tokenized as token}
+ {#if token.isMatch}
+ {token.text}
+ {:else}
+ {token.text}
+ {/if}
+ {/each}
+{:else}
+ {text}
+{/if}
+
+