From e1ec6668577e1452d560f0fe946289b616fcb90e Mon Sep 17 00:00:00 2001 From: Aaron Knudtson <87577305+knudtty@users.noreply.github.com> Date: Thu, 18 Sep 2025 17:05:29 -0400 Subject: [PATCH 1/3] fix: json getKeyValues (useful for autocomplete) --- .changeset/early-items-design.md | 6 ++++++ .../app/src/hooks/useAutoCompleteOptions.tsx | 21 +++++++++++-------- packages/app/src/hooks/useMetadata.tsx | 10 +-------- packages/common-utils/src/metadata.ts | 5 +---- 4 files changed, 20 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 000000000..86bf82478 --- /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/useAutoCompleteOptions.tsx b/packages/app/src/hooks/useAutoCompleteOptions.tsx index b0a37a1a6..f1a8212f0 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,15 +72,17 @@ 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 ? [mergePath(searchField.path, jsonColumns)] : []), [searchField], ); diff --git a/packages/app/src/hooks/useMetadata.tsx b/packages/app/src/hooks/useMetadata.tsx index c398be295..f4134a8af 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 44e01e2b1..a0d6f3f90 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 d70ecbe1cbae8aca3dc2dfdb24c8a0bf90ab0750 Mon Sep 17 00:00:00 2001 From: Aaron Knudtson <87577305+knudtty@users.noreply.github.com> Date: Fri, 19 Sep 2025 10:18:32 -0400 Subject: [PATCH 2/3] fix unit tests --- .../src/hooks/__tests__/useAutoCompleteOptions.test.tsx | 7 ++++++- packages/app/src/hooks/useAutoCompleteOptions.tsx | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/app/src/hooks/__tests__/useAutoCompleteOptions.test.tsx b/packages/app/src/hooks/__tests__/useAutoCompleteOptions.test.tsx index 4c78e4f8c..539746c2e 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 f1a8212f0..24836fc31 100644 --- a/packages/app/src/hooks/useAutoCompleteOptions.tsx +++ b/packages/app/src/hooks/useAutoCompleteOptions.tsx @@ -82,7 +82,7 @@ export function useAutoCompleteOptions( }), ); const searchKeys = useMemo( - () => (searchField ? [mergePath(searchField.path, jsonColumns)] : []), + () => (searchField ? [mergePath(searchField.path, jsonColumns ?? [])] : []), [searchField], ); From 7ff6ea748ec7de2b5b75ac6fe681fea82361e19d Mon Sep 17 00:00:00 2001 From: Aaron Knudtson <87577305+knudtty@users.noreply.github.com> Date: Fri, 19 Sep 2025 12:18:24 -0400 Subject: [PATCH 3/3] only call mergepath when jsonColumns is defined --- packages/app/src/hooks/useAutoCompleteOptions.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/app/src/hooks/useAutoCompleteOptions.tsx b/packages/app/src/hooks/useAutoCompleteOptions.tsx index 24836fc31..5a63a4ffb 100644 --- a/packages/app/src/hooks/useAutoCompleteOptions.tsx +++ b/packages/app/src/hooks/useAutoCompleteOptions.tsx @@ -82,8 +82,11 @@ export function useAutoCompleteOptions( }), ); const searchKeys = useMemo( - () => (searchField ? [mergePath(searchField.path, jsonColumns ?? [])] : []), - [searchField], + () => + searchField && jsonColumns + ? [mergePath(searchField.path, jsonColumns)] + : [], + [searchField, jsonColumns], ); // hooks to get key values