enumOptions and enum reader used everywhere

This commit is contained in:
2026-06-04 16:17:03 +05:30
parent d6506e854a
commit 80ca1ac9a9
8 changed files with 77 additions and 48 deletions

View File

@@ -96,7 +96,7 @@ export default function EnhancedTable({
};
}
if (muiType === 'singleSelect' && field.options) {
if (muiType === 'singleSelect') {
col.valueOptions = toGridValueOptions(getFieldOptions(field));
}
@@ -381,7 +381,7 @@ function FieldRenderer({ params, field, fieldKey, config, onNavigate, navigate,
if (field.type === 'datetime' || field.type === 'date') return value ? new Date(value).toLocaleString() : '';
if (field.type === 'enum' && field.options) {
if (field.type === 'enum') {
const opt = getFieldOptions(field).find(o => o.key === value);
return opt?.value ?? value;
}

View File

@@ -111,8 +111,8 @@ function extractOptions(
): string[] {
const values = new Set<string>();
if (field.type === 'enum' && field.options) {
return getFieldOptions(field).map(o => o.key);
if (field.type === 'enum') {
return getFieldOptions(field).map(o => o.value);
}
if (!data) return [];

View File

@@ -16,11 +16,16 @@ interface ResourceViewProps {
import { GridPaginationModel } from '@mui/x-data-grid';
function getFilterDisplayFields(field: ResourceField): string[] {
if (!field.displayField) return [];
return (Array.isArray(field.displayField) ? field.displayField : [field.displayField]).filter(
(df): df is string => !!df
);
function getDisplayString(item: any, field: ResourceField): string {
if (item == null || typeof item !== 'object') return String(item ?? '');
if (field.enumOption?.value) return resolveTemplate(field.enumOption.value, item);
const df = field.displayField;
if (!df) return item.name ?? item.title ?? item.label ?? item.id ?? JSON.stringify(item);
if (Array.isArray(df)) {
const parts = df.map((k: string) => item[k]).filter((v: any) => v != null);
return parts.length > 0 ? parts.join(' ') : '';
}
return String(item[df] ?? '');
}
function applyClientFilters(
@@ -60,20 +65,12 @@ function applyClientFilters(
if (Array.isArray(filterValue)) {
if (field.type === "array" && Array.isArray(itemValue)) {
return itemValue.some((el: any) => {
if (el != null && typeof el === "object") {
if (field.enumOption?.value) return filterValue.includes(resolveTemplate(field.enumOption.value, el));
const dispFields = getFilterDisplayFields(field);
return dispFields.some((df) => filterValue.includes(String(el[df])));
}
return filterValue.includes(String(el));
});
return itemValue.some((el: any) =>
filterValue.includes(getDisplayString(el, field))
);
}
if (itemValue && typeof itemValue === "object") {
if (field.enumOption?.value) return filterValue.includes(resolveTemplate(field.enumOption.value, itemValue));
const dispFields = getFilterDisplayFields(field);
const itemDisplay = dispFields.map((df) => itemValue[df]).filter((v) => v != null).join(" ");
return filterValue.includes(itemDisplay);
return filterValue.includes(getDisplayString(itemValue, field));
}
return filterValue.includes(String(itemValue));
}
@@ -85,20 +82,13 @@ function applyClientFilters(
}
if (field.type === "array" && Array.isArray(itemValue)) {
return itemValue.some((el: any) => {
if (el != null && typeof el === "object") {
if (field.enumOption?.value) return resolveTemplate(field.enumOption.value, el) === String(filterValue);
const dispFields = getFilterDisplayFields(field);
return dispFields.some((df) => String(el[df]) === String(filterValue));
}
return String(el) === String(filterValue);
});
return itemValue.some((el: any) =>
getDisplayString(el, field) === String(filterValue)
);
}
if (itemValue && typeof itemValue === "object") {
if (field.enumOption?.value) return resolveTemplate(field.enumOption.value, itemValue) === String(filterValue);
const dispFields = getFilterDisplayFields(field);
return dispFields.some((df) => String(itemValue[df]) === String(filterValue));
return getDisplayString(itemValue, field) === String(filterValue);
}
return String(itemValue) === String(filterValue);

View File

@@ -149,7 +149,7 @@ export default function FormField({
}
// 5. Enum Handling
if (field.type === 'enum' && field.options) {
if (field.type === 'enum') {
const options = getFieldOptions(field);
return (
<FormControl fullWidth>