feat: include tap attributes in cmd-K full-text search
Add attributes_text flattened field to OpenSearch indexing for both execution and processor levels. Include in full-text search queries, wildcard matching, and highlighting. Merge processor-level attributes into ExecutionSummary. Add 'attribute' category to CommandPalette (design-system 0.1.17) with per-key-value results in the search UI. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
8
ui/package-lock.json
generated
8
ui/package-lock.json
generated
@@ -8,7 +8,7 @@
|
||||
"name": "ui",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"@cameleer/design-system": "^0.1.16",
|
||||
"@cameleer/design-system": "^0.1.17",
|
||||
"@tanstack/react-query": "^5.90.21",
|
||||
"openapi-fetch": "^0.17.0",
|
||||
"react": "^19.2.4",
|
||||
@@ -276,9 +276,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cameleer/design-system": {
|
||||
"version": "0.1.16",
|
||||
"resolved": "https://gitea.siegeln.net/api/packages/cameleer/npm/%40cameleer%2Fdesign-system/-/0.1.16/design-system-0.1.16.tgz",
|
||||
"integrity": "sha512-8ahFv2cirfV2ZZUoELl4ac2iSCOCpKQf4MznwJwoe9WJDYgmQf81m4Qi5uY+rQDVGpECI2MnLjPQ00HQLi5ybQ==",
|
||||
"version": "0.1.17",
|
||||
"resolved": "https://gitea.siegeln.net/api/packages/cameleer/npm/%40cameleer%2Fdesign-system/-/0.1.17/design-system-0.1.17.tgz",
|
||||
"integrity": "sha512-THK6yN+xSrxEJadEQ4AZiVhPvoI2rq6gvmMonpxVhUw93dOPO5p06pRS5csJc1miFD1thOrazsoDzSTAbNaELw==",
|
||||
"dependencies": {
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"generate-api:live": "curl -s http://localhost:8081/api/v1/api-docs -o src/api/openapi.json && openapi-typescript src/api/openapi.json -o src/api/schema.d.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@cameleer/design-system": "^0.1.16",
|
||||
"@cameleer/design-system": "^0.1.17",
|
||||
"@tanstack/react-query": "^5.90.21",
|
||||
"openapi-fetch": "^0.17.0",
|
||||
"react": "^19.2.4",
|
||||
|
||||
@@ -140,8 +140,30 @@ function LayoutContent() {
|
||||
serverFiltered: true,
|
||||
matchContext: e.highlight ?? undefined,
|
||||
}));
|
||||
return [...catalogData, ...exchangeItems];
|
||||
}, [catalogData, exchangeResults]);
|
||||
|
||||
const attributeItems: SearchResult[] = [];
|
||||
if (debouncedQuery) {
|
||||
const q = debouncedQuery.toLowerCase();
|
||||
for (const e of exchangeResults?.data || []) {
|
||||
if (!e.attributes) continue;
|
||||
for (const [key, value] of Object.entries(e.attributes as Record<string, string>)) {
|
||||
if (key.toLowerCase().includes(q) || String(value).toLowerCase().includes(q)) {
|
||||
attributeItems.push({
|
||||
id: `${e.executionId}-attr-${key}`,
|
||||
category: 'attribute' as const,
|
||||
title: `${key} = "${value}"`,
|
||||
badges: [{ label: e.status, color: statusToColor(e.status) }],
|
||||
meta: `${e.executionId} · ${e.routeId} · ${e.applicationName ?? ''}`,
|
||||
path: `/exchanges/${e.executionId}`,
|
||||
serverFiltered: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [...catalogData, ...exchangeItems, ...attributeItems];
|
||||
}, [catalogData, exchangeResults, debouncedQuery]);
|
||||
|
||||
const breadcrumb = useMemo(() => {
|
||||
const LABELS: Record<string, string> = {
|
||||
|
||||
Reference in New Issue
Block a user