feat(data-grid): 优化字段跳转列匹配与回车定位

- 提取字段跳转目标解析逻辑,优先精确匹配再回退模糊匹配
- 旧版跳转列保留补全下拉,选中或回车即可定位
- 移除旧版多余跳转按钮,统一为输入即补全的交互
- 补充 DataGrid 与 dataGridFind 定向回归覆盖
- Refs #509
This commit is contained in:
Syngnat
2026-05-31 13:32:50 +08:00
parent bea938bc34
commit bea16b72df
4 changed files with 83 additions and 64 deletions

View File

@@ -6,6 +6,7 @@ import {
findDataGridTextRanges,
hasDataGridFindRenderVersionChanged,
normalizeDataGridFindQuery,
resolveDataGridColumnQuickFindTarget,
resolveDataGridFindNavigationIndex,
summarizeDataGridFindMatches,
} from './dataGridFind';
@@ -89,6 +90,15 @@ describe('dataGridFind', () => {
expect(resolveDataGridFindNavigationIndex(0, 0, 'next')).toBe(-1);
});
it('prefers an exact quick-find column match over earlier fuzzy matches', () => {
const columnNames = ['user_id', 'username', 'created_at'];
expect(resolveDataGridColumnQuickFindTarget(columnNames, 'username')).toBe('username');
expect(resolveDataGridColumnQuickFindTarget(columnNames, 'user')).toBe('user_id');
expect(resolveDataGridColumnQuickFindTarget(columnNames, ' ')).toBe('');
expect(resolveDataGridColumnQuickFindTarget(columnNames, 'missing')).toBe('');
});
it('tracks render version changes without exposing metadata as row data', () => {
const rows = [{ id: 1, name: 'Alpha' }];

View File

@@ -143,3 +143,20 @@ export const resolveDataGridFindNavigationIndex = (
}
return currentIndex < 0 || currentIndex >= matchCount - 1 ? 0 : currentIndex + 1;
};
export const resolveDataGridColumnQuickFindTarget = (
columnNames: string[],
query: string,
): string => {
const normalizedQuery = normalizeDataGridFindQuery(query);
if (!normalizedQuery) return '';
const exactMatch = columnNames.find((columnName) => (
normalizeDataGridFindQuery(columnName) === normalizedQuery
));
if (exactMatch) return exactMatch;
return columnNames.find((columnName) => (
normalizeDataGridFindQuery(columnName).includes(normalizedQuery)
)) || '';
};