From 945aeb91b0be627487441f6cc1e9d8d3b88c9321 Mon Sep 17 00:00:00 2001 From: Aaron Knudtson <87577305+knudtty@users.noreply.github.com> Date: Tue, 23 Sep 2025 13:38:14 -0400 Subject: [PATCH 1/2] =?UTF-8?q?Revert=20"Revert=20"fix:=20json=20getKeyVal?= =?UTF-8?q?ues=20(useful=20for=20autocomplete)=20(#1186)"=20(#1=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 68f46e0a728335c05e234e53b3e9cbd5ccae1960. --- .changeset/early-items-design.md | 6 +++++ .../__tests__/useAutoCompleteOptions.test.tsx | 7 +++++- .../app/src/hooks/useAutoCompleteOptions.tsx | 22 ++++++++++++------- packages/app/src/hooks/useMetadata.tsx | 10 +-------- packages/common-utils/src/metadata.ts | 5 +---- 5 files changed, 28 insertions(+), 22 deletions(-) create mode 100644 .changeset/early-items-design.md diff --git a/.changeset/early-items-design.md b/.changeset/early-items-design.md new file mode 100644 index 0000000000..86bf824783 --- /dev/null +++ b/.changeset/early-items-design.md @@ -0,0 +1,6 @@ +--- +"@hyperdx/common-utils": patch +"@hyperdx/app": patch +--- + +fix: json getKeyValues (useful for autocomplete) diff --git a/packages/app/src/hooks/__tests__/useAutoCompleteOptions.test.tsx b/packages/app/src/hooks/__tests__/useAutoCompleteOptions.test.tsx index 4c78e4f8ca..539746c2e0 100644 --- a/packages/app/src/hooks/__tests__/useAutoCompleteOptions.test.tsx +++ b/packages/app/src/hooks/__tests__/useAutoCompleteOptions.test.tsx @@ -4,7 +4,7 @@ import { renderHook } from '@testing-library/react'; import { LuceneLanguageFormatter } from '../../SearchInputV2'; import { useAutoCompleteOptions } from '../useAutoCompleteOptions'; -import { useAllFields, useGetKeyValues } from '../useMetadata'; +import { useAllFields, useGetKeyValues, useJsonColumns } from '../useMetadata'; if (!globalThis.structuredClone) { globalThis.structuredClone = (obj: any) => { @@ -17,6 +17,7 @@ jest.mock('../useMetadata', () => ({ ...jest.requireActual('../useMetadata.tsx'), useAllFields: jest.fn(), useGetKeyValues: jest.fn(), + useJsonColumns: jest.fn(), })); const luceneFormatter = new LuceneLanguageFormatter(); @@ -60,6 +61,10 @@ describe('useAutoCompleteOptions', () => { (useGetKeyValues as jest.Mock).mockReturnValue({ data: null, }); + + (useJsonColumns as jest.Mock).mockReturnValue({ + data: null, + }); }); it('should return field options with correct lucene formatting', () => { diff --git a/packages/app/src/hooks/useAutoCompleteOptions.tsx b/packages/app/src/hooks/useAutoCompleteOptions.tsx index b0a37a1a6d..5a63a4ffbc 100644 --- a/packages/app/src/hooks/useAutoCompleteOptions.tsx +++ b/packages/app/src/hooks/useAutoCompleteOptions.tsx @@ -6,8 +6,9 @@ import { deduplicate2dArray, useAllFields, useGetKeyValues, + useJsonColumns, } from '@/hooks/useMetadata'; -import { toArray } from '@/utils'; +import { mergePath, toArray } from '@/utils'; export interface ILanguageFormatter { formatFieldValue: (f: Field) => string; @@ -71,16 +72,21 @@ export function useAutoCompleteOptions( setSearchField(null); } }, [searchField, setSearchField, value, formatter]); + const { data: jsonColumns } = useJsonColumns( + Array.isArray(tableConnections) + ? tableConnections[0] + : (tableConnections ?? { + tableName: '', + databaseName: '', + connectionId: '', + }), + ); const searchKeys = useMemo( () => - searchField - ? [ - searchField.path.length > 1 - ? `${searchField.path[0]}['${searchField.path[1]}']` - : searchField.path[0], - ] + searchField && jsonColumns + ? [mergePath(searchField.path, jsonColumns)] : [], - [searchField], + [searchField, jsonColumns], ); // hooks to get key values diff --git a/packages/app/src/hooks/useMetadata.tsx b/packages/app/src/hooks/useMetadata.tsx index c398be2958..f4134a8af7 100644 --- a/packages/app/src/hooks/useMetadata.tsx +++ b/packages/app/src/hooks/useMetadata.tsx @@ -48,15 +48,7 @@ export function useColumns( } export function useJsonColumns( - { - databaseName, - tableName, - connectionId, - }: { - databaseName: string; - tableName: string; - connectionId: string; - }, + { databaseName, tableName, connectionId }: TableConnection, options?: Partial>, ) { return useQuery({ diff --git a/packages/common-utils/src/metadata.ts b/packages/common-utils/src/metadata.ts index 44e01e2b1a..a0d6f3f90c 100644 --- a/packages/common-utils/src/metadata.ts +++ b/packages/common-utils/src/metadata.ts @@ -357,10 +357,7 @@ export class Metadata { ); } keys.push({ - key: key - .split('.') - .map(v => `\`${v}\``) - .join('.'), + key: key, chType: typeArr[0], }); } From 62f8233ed96846a41dd7ba1fa907701623160fff Mon Sep 17 00:00:00 2001 From: Aaron Knudtson <87577305+knudtty@users.noreply.github.com> Date: Tue, 23 Sep 2025 13:46:50 -0400 Subject: [PATCH 2/2] fix dashboard array length 0 issue --- .../app/src/hooks/useAutoCompleteOptions.tsx | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/app/src/hooks/useAutoCompleteOptions.tsx b/packages/app/src/hooks/useAutoCompleteOptions.tsx index 5a63a4ffbc..68d144a138 100644 --- a/packages/app/src/hooks/useAutoCompleteOptions.tsx +++ b/packages/app/src/hooks/useAutoCompleteOptions.tsx @@ -72,14 +72,17 @@ export function useAutoCompleteOptions( setSearchField(null); } }, [searchField, setSearchField, value, formatter]); - const { data: jsonColumns } = useJsonColumns( - Array.isArray(tableConnections) + const tcForJson = Array.isArray(tableConnections) + ? tableConnections.length > 0 ? tableConnections[0] - : (tableConnections ?? { - tableName: '', - databaseName: '', - connectionId: '', - }), + : undefined + : tableConnections; + const { data: jsonColumns } = useJsonColumns( + tcForJson ?? { + tableName: '', + databaseName: '', + connectionId: '', + }, ); const searchKeys = useMemo( () =>