diff --git a/src/list/ListGuesser.tsx b/src/list/ListGuesser.tsx
index 64a67602..87c22f1e 100644
--- a/src/list/ListGuesser.tsx
+++ b/src/list/ListGuesser.tsx
@@ -1,10 +1,30 @@
+import type { ReactElement } from 'react';
import React, { useEffect, useState } from 'react';
import {
+ ArrayField,
+ BooleanField,
+ ChipField,
Datagrid,
DatagridBody,
+ DateField,
EditButton,
+ EmailField,
+ FileField,
+ FunctionField,
+ ImageField,
List,
+ NumberField,
+ ReferenceArrayField,
+ ReferenceField,
+ ReferenceManyField,
+ ReferenceOneField,
+ RichTextField,
+ SelectField,
ShowButton,
+ TextField,
+ TranslatableFields,
+ UrlField,
+ WrapperField,
useResourceContext,
useResourceDefinition,
} from 'react-admin';
@@ -21,6 +41,7 @@ import type {
IntrospectedListGuesserProps,
ListGuesserProps,
} from '../types.js';
+import EnumField from '../field/EnumField';
const getOverrideCode = (schema: Resource, fields: Field[]) => {
let code = `If you want to override at least one field, create a ${schema.title}List component with this content:\n`;
@@ -61,6 +82,30 @@ export const DatagridBodyWithMercure = (props: DatagridBodyProps) => {
return ;
};
+const reactAdminFieldTypes = [
+ ArrayField,
+ BooleanField,
+ ChipField,
+ DateField,
+ EmailField,
+ EnumField,
+ FieldGuesser,
+ FileField,
+ FunctionField,
+ ImageField,
+ NumberField,
+ ReferenceArrayField,
+ ReferenceField,
+ ReferenceManyField,
+ ReferenceOneField,
+ RichTextField,
+ SelectField,
+ TextField,
+ TranslatableFields,
+ UrlField,
+ WrapperField,
+];
+
export const IntrospectedListGuesser = ({
fields,
readableFields,
@@ -97,8 +142,8 @@ export const IntrospectedListGuesser = ({
const displayOverrideCode = useDisplayOverrideCode();
- let fieldChildren = children;
- if (!fieldChildren) {
+ let fieldChildren;
+ if (!children) {
fieldChildren = readableFields.map((field) => {
const orderField = orderParameters.find(
(orderParameter) => orderParameter.split('.')[0] === field.name,
@@ -116,6 +161,29 @@ export const IntrospectedListGuesser = ({
});
displayOverrideCode(getOverrideCode(schema, readableFields));
+ } else {
+ // Add missing sort properties on react-admin fields, that have been added manually in the ListGuesser
+ fieldChildren = children.map((field: ReactElement): ReactElement => {
+ if (!reactAdminFieldTypes.includes(field.type)) {
+ return field;
+ }
+
+ const orderField =
+ field.props.sortBy ??
+ orderParameters.find(
+ (orderParameter) =>
+ orderParameter.split('.')[0] === field.props.source,
+ );
+
+ const fieldProps = {
+ ...field.props,
+ key: field.props.source + (orderField ? `-${orderField}` : ''),
+ sortBy: orderField,
+ sortable: !!orderField,
+ };
+
+ return ;
+ });
}
return (