Skip to content

Commit 7441d43

Browse files
Copilothotlong
andcommitted
refactor: address code review - rename variables, extract mapFieldTypeToFilterType helper
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent e89e4a6 commit 7441d43

2 files changed

Lines changed: 26 additions & 6 deletions

File tree

packages/fields/src/widgets/LookupField.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,27 @@ function recordToOption(
5656
return { value: val, label: String(label), description, ...record };
5757
}
5858

59+
/**
60+
* Map a LookupColumnDef.type to a filter input type for the filter bar.
61+
* Returns undefined if the field type is not filterable.
62+
*/
63+
function mapFieldTypeToFilterType(
64+
fieldType: string,
65+
): RecordPickerFilterColumn['type'] | undefined {
66+
const mapping: Record<string, RecordPickerFilterColumn['type']> = {
67+
text: 'text',
68+
number: 'number',
69+
currency: 'number',
70+
percent: 'number',
71+
select: 'select',
72+
status: 'select',
73+
date: 'date',
74+
datetime: 'date',
75+
boolean: 'boolean',
76+
};
77+
return mapping[fieldType];
78+
}
79+
5980
/**
6081
* Lookup field for selecting related records.
6182
* Supports single and multi-select with search.
@@ -111,8 +132,7 @@ export function LookupField({ value, onChange, field, readonly, ...props }: Fiel
111132
const cols: RecordPickerFilterColumn[] = [];
112133
for (const c of lookupColumns) {
113134
if (typeof c === 'object' && c.type) {
114-
const filterType = (['text', 'number', 'select', 'date', 'boolean'] as const)
115-
.find(t => t === c.type || (c.type === 'currency' && t === 'number') || (c.type === 'percent' && t === 'number'));
135+
const filterType = mapFieldTypeToFilterType(c.type);
116136
if (filterType) {
117137
cols.push({
118138
field: c.field,

packages/fields/src/widgets/RecordPickerDialog.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ export function RecordPickerDialog({
279279

280280
// Fetch records
281281
const fetchRecords = useCallback(
282-
async (search?: string, page = 1, sort?: { field: string; direction: 'asc' | 'desc' } | null, filterOverride?: Record<string, any>) => {
282+
async (search?: string, page = 1, sort?: { field: string; direction: 'asc' | 'desc' } | null, customFilter?: Record<string, any>) => {
283283
if (!dataSource || !objectName) return;
284284

285285
setLoading(true);
@@ -297,9 +297,9 @@ export function RecordPickerDialog({
297297
params.$orderby = { [sort.field]: sort.direction };
298298
}
299299
// Inject filters (lookup_filters + filter bar values)
300-
const activeFilter = filterOverride !== undefined ? filterOverride : mergedFilter;
301-
if (activeFilter && Object.keys(activeFilter).length > 0) {
302-
params.$filter = activeFilter;
300+
const effectiveFilter = customFilter !== undefined ? customFilter : mergedFilter;
301+
if (effectiveFilter && Object.keys(effectiveFilter).length > 0) {
302+
params.$filter = effectiveFilter;
303303
}
304304

305305
const result = await dataSource.find(objectName, params);

0 commit comments

Comments
 (0)