diff --git a/frontend/src/components/DataGrid.tsx b/frontend/src/components/DataGrid.tsx index 6b11a13b..06d538b7 100644 --- a/frontend/src/components/DataGrid.tsx +++ b/frontend/src/components/DataGrid.tsx @@ -114,6 +114,7 @@ import { collectDataGridFindResult, findDataGridTextRanges, hasDataGridFindRenderVersionChanged, + matchesDataGridColumnQuickFind, normalizeDataGridFindQuery, resolveDataGridColumnQuickFindTarget, resolveDataGridFindNavigationIndex, @@ -4446,7 +4447,7 @@ const DataGrid: React.FC = ({ const visibleColumnQuickFindMatches = useMemo(() => { if (!normalizedColumnQuickFindText) return []; return displayColumnNames.filter((columnName) => ( - normalizeDataGridFindQuery(columnName).includes(normalizedColumnQuickFindText) + matchesDataGridColumnQuickFind(columnName, normalizedColumnQuickFindText) )); }, [displayColumnNames, normalizedColumnQuickFindText]); diff --git a/frontend/src/utils/dataGridFind.test.ts b/frontend/src/utils/dataGridFind.test.ts index 3b82352b..5ebc69b7 100644 --- a/frontend/src/utils/dataGridFind.test.ts +++ b/frontend/src/utils/dataGridFind.test.ts @@ -6,6 +6,7 @@ import { collectDataGridFindResult, findDataGridTextRanges, hasDataGridFindRenderVersionChanged, + matchesDataGridColumnQuickFind, normalizeDataGridFindQuery, resolveDataGridColumnQuickFindTarget, resolveDataGridFindNavigationIndex, @@ -120,6 +121,16 @@ describe('dataGridFind', () => { expect(resolveDataGridColumnQuickFindTarget(columnNames, 'missing')).toBe(''); }); + it('matches quick-find column names without case sensitivity', () => { + const columnNames = ['USER_NAME_ARCHIVE', 'USER_NAME', 'CREATED_AT']; + + expect(matchesDataGridColumnQuickFind('USER_NAME', 'user')).toBe(true); + expect(matchesDataGridColumnQuickFind('user_name', 'USER')).toBe(true); + expect(matchesDataGridColumnQuickFind('USER_NAME', 'missing')).toBe(false); + expect(resolveDataGridColumnQuickFindTarget(columnNames, 'user_name')).toBe('USER_NAME'); + expect(resolveDataGridColumnQuickFindTarget(columnNames, 'created')).toBe('CREATED_AT'); + }); + it('tracks render version changes without exposing metadata as row data', () => { const rows = [{ id: 1, name: 'Alpha' }]; diff --git a/frontend/src/utils/dataGridFind.ts b/frontend/src/utils/dataGridFind.ts index 8b3ea4ba..c767a705 100644 --- a/frontend/src/utils/dataGridFind.ts +++ b/frontend/src/utils/dataGridFind.ts @@ -179,6 +179,16 @@ export const resolveDataGridFindNavigationIndex = ( return currentIndex < 0 || currentIndex >= matchCount - 1 ? 0 : currentIndex + 1; }; +export const matchesDataGridColumnQuickFind = ( + columnName: string, + query: string, +): boolean => { + const normalizedQuery = normalizeDataGridFindQuery(query).toLocaleLowerCase(); + if (!normalizedQuery) return false; + + return normalizeDataGridFindQuery(columnName).toLocaleLowerCase().includes(normalizedQuery); +}; + export const resolveDataGridColumnQuickFindTarget = ( columnNames: string[], query: string, @@ -186,12 +196,13 @@ export const resolveDataGridColumnQuickFindTarget = ( const normalizedQuery = normalizeDataGridFindQuery(query); if (!normalizedQuery) return ''; + const lowerQuery = normalizedQuery.toLocaleLowerCase(); const exactMatch = columnNames.find((columnName) => ( - normalizeDataGridFindQuery(columnName) === normalizedQuery + normalizeDataGridFindQuery(columnName).toLocaleLowerCase() === lowerQuery )); if (exactMatch) return exactMatch; return columnNames.find((columnName) => ( - normalizeDataGridFindQuery(columnName).includes(normalizedQuery) + matchesDataGridColumnQuickFind(columnName, normalizedQuery) )) || ''; };