types of field for filtering
This commit is contained in:
@@ -52,13 +52,34 @@ export default function EnhancedTable({
|
|||||||
|
|
||||||
const columns: GridColDef[] = React.useMemo(() => {
|
const columns: GridColDef[] = React.useMemo(() => {
|
||||||
const cols: GridColDef[] = Object.entries(config.fields).map(([key, field]) => {
|
const cols: GridColDef[] = Object.entries(config.fields).map(([key, field]) => {
|
||||||
|
let muiType: 'string' | 'number' | 'boolean' | 'date' | 'dateTime' | 'singleSelect' = 'string';
|
||||||
|
if (field.type === 'number') muiType = 'number';
|
||||||
|
if (field.type === 'boolean') muiType = 'boolean';
|
||||||
|
if (field.type === 'date') muiType = 'date';
|
||||||
|
if (field.type === 'datetime') muiType = 'dateTime';
|
||||||
|
if (field.type === 'enum') muiType = 'singleSelect';
|
||||||
|
|
||||||
const col: GridColDef = {
|
const col: GridColDef = {
|
||||||
field: key,
|
field: key,
|
||||||
headerName: field.label,
|
headerName: field.label,
|
||||||
|
type: muiType,
|
||||||
flex: 1,
|
flex: 1,
|
||||||
minWidth: 150,
|
minWidth: 150,
|
||||||
renderCell: (params: GridRenderCellParams) => <FieldRenderer params={params} field={field} fieldKey={key} config={config} onNavigate={onNavigateToResource} navigate={navigate} />
|
renderCell: (params: GridRenderCellParams) => <FieldRenderer params={params} field={field} fieldKey={key} config={config} onNavigate={onNavigateToResource} navigate={navigate} />
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (muiType === 'date' || muiType === 'dateTime') {
|
||||||
|
col.valueGetter = (value: any) => {
|
||||||
|
if (!value) return null;
|
||||||
|
const date = new Date(value);
|
||||||
|
return isNaN(date.getTime()) ? null : date;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (muiType === 'singleSelect' && field.options) {
|
||||||
|
col.valueOptions = field.options;
|
||||||
|
}
|
||||||
|
|
||||||
return col;
|
return col;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user