Skip to content

Commit 85c77f9

Browse files
Copilothotlong
andcommitted
fix: improve filter type inference order and option label generation
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent d8e08bc commit 85c77f9

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

packages/fields/src/widgets/RecordPickerDialog.tsx

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -358,23 +358,32 @@ export function RecordPickerDialog({
358358
// Auto-derive from lookupFilters: each filter entry becomes a filterable field
359359
if (lookupFilters && lookupFilters.length > 0) {
360360
return lookupFilters.map(f => {
361+
// Infer filter input type from value type first, then fall back to operator
361362
let type: RecordPickerFilterColumn['type'] = 'text';
362-
if (f.operator === 'gt' || f.operator === 'lt' || f.operator === 'gte' || f.operator === 'lte') {
363-
type = 'number';
364-
} else if (f.operator === 'in' || f.operator === 'notIn') {
365-
type = 'select';
366-
} else if (typeof f.value === 'boolean') {
363+
if (typeof f.value === 'boolean') {
367364
type = 'boolean';
365+
} else if (Array.isArray(f.value)) {
366+
type = 'select';
368367
} else if (typeof f.value === 'number') {
369368
type = 'number';
369+
} else if (f.operator === 'gt' || f.operator === 'lt' || f.operator === 'gte' || f.operator === 'lte') {
370+
type = 'number';
371+
} else if (f.operator === 'in' || f.operator === 'notIn') {
372+
type = 'select';
370373
}
371374
return {
372375
field: f.field,
373376
label: fieldToLabel(f.field),
374377
type,
375-
// For 'in' filters, derive options from the value array
378+
// For array values (in/notIn), derive selectable options
376379
...(Array.isArray(f.value) ? {
377-
options: (f.value as any[]).map(v => ({ label: String(v), value: v })),
380+
options: (f.value as any[]).map(v => {
381+
if (v != null && typeof v === 'object') {
382+
const obj = v as Record<string, unknown>;
383+
return { label: String(obj.name || obj.label || obj.title || v), value: v };
384+
}
385+
return { label: String(v), value: v };
386+
}),
378387
} : {}),
379388
};
380389
});

0 commit comments

Comments
 (0)