refine
refine copied to clipboard
[BUG] Inferencer not working as expected
Describe the bug
The inferencer with a custom rest-api produces an exception
Steps To Reproduce
Using the tutorial code with a different rest-api having these two endpoints:
// /api/users
[
{
"date_joined": "2023-06-15T15:48:25",
"email": "[email protected]",
"first_name": "aaaaa",
"groups": [
{
"id": 1,
"name": "Group 2",
"permissions": [],
"resource_uri": "/api/v1/groups/1"
},
{
"id": 4,
"name": "Group 9",
"permissions": [],
"resource_uri": "/api/v1/groups/4"
}
],
"id": 1,
"is_active": true,
"is_staff": true,
"is_superuser": true,
"last_login": null,
"last_name": "bbbb",
"resource_uri": "/api/v1/users/1",
"user_permissions": [],
"username": "admin"
}
]
// /api/groups
[
{
"id": 3,
"name": "Group 8",
"permissions": [],
"resource_uri": "/api/v1/groups/3"
},
{
"id": 5,
"name": "Group 12345",
"permissions": [],
"resource_uri": "/api/v1/groups/5"
},
{
"id": 2,
"name": "Changed from Refine",
"permissions": [],
"resource_uri": "/api/v1/groups/2"
},
{
"id": 1,
"name": "Group 2",
"permissions": [],
"resource_uri": "/api/v1/groups/1"
},
{
"id": 4,
"name": "Group 9",
"permissions": [],
"resource_uri": "/api/v1/groups/4"
}
]
**Listing groups works fine but Listing users produces this Exception: **
Unhandled Runtime Error
ReferenceError: groupsIsLoading is not defined
After checking the Chrome devtools I notice the app tries to perform some unexpected fetch requests like :
- /api/first_names/aaaaa (why would refine try to get this as it's not a relation)
- /api/last_names/bbbb (same here)
- api/groups?id=Group%202 (This should use the value of "id" field not the "name" field !)
- ...
Expected behavior
In this case List Inferencer should display the list of users.
Screenshot
Desktop
No response
Mobile
No response
Additional Context
Generated code with inferencer :
import React from "react";
import {
IResourceComponentsProps,
BaseRecord,
useTranslate,
} from "@refinedev/core";
import {
useTable,
List,
EditButton,
ShowButton,
DeleteButton,
DateField,
TagField,
EmailField,
BooleanField,
} from "@refinedev/antd";
import { Table, Space } from "antd";
export const UserList: React.FC<IResourceComponentsProps> = () => {
const translate = useTranslate();
const { tableProps } = useTable({
syncWithLocation: true,
});
return (
<List>
<Table {...tableProps} rowKey="id">
<Table.Column
dataIndex={["date_joined"]}
title={translate("users.fields.date_joined")}
render={(value: any) => <DateField value={value} />}
/>
<Table.Column
dataIndex={["email"]}
title={translate("users.fields.email")}
render={(value: any) => <EmailField value={value} />}
/>
<Table.Column
dataIndex="first_name"
title={translate("users.fields.first_name")}
/>
<Table.Column
dataIndex="groups"
title={translate("users.fields.groups")}
render={(value: any[]) =>
groupsIsLoading ? (
<>Loading...</>
) : (
<>
{value?.map((item, index) => (
<TagField key={index} value={item} />
))}
</>
)
}
/>
<Table.Column
dataIndex="id"
title={translate("users.fields.id")}
/>
<Table.Column
dataIndex={["is_active"]}
title={translate("users.fields.is_active")}
render={(value: any) => <BooleanField value={value} />}
/>
<Table.Column
dataIndex={["is_staff"]}
title={translate("users.fields.is_staff")}
render={(value: any) => <BooleanField value={value} />}
/>
<Table.Column
dataIndex={["is_superuser"]}
title={translate("users.fields.is_superuser")}
render={(value: any) => <BooleanField value={value} />}
/>
<Table.Column
dataIndex="last_name"
title={translate("users.fields.last_name")}
/>
<Table.Column
dataIndex="resource_uri"
title={translate("users.fields.resource_uri")}
/>
<Table.Column
dataIndex="username"
title={translate("users.fields.username")}
/>
<Table.Column
title={translate("table.actions")}
dataIndex="actions"
render={(_, record: BaseRecord) => (
<Space>
<EditButton
hideText
size="small"
recordItemId={record.id}
/>
<ShowButton
hideText
size="small"
recordItemId={record.id}
/>
<DeleteButton
hideText
size="small"
recordItemId={record.id}
/>
</Space>
)}
/>
</Table>
</List>
);
};