refine icon indicating copy to clipboard operation
refine copied to clipboard

[BUG] Inferencer not working as expected

Open merabtenei opened this issue 2 years ago • 0 comments

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

ssrefine

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>
    );
};

merabtenei avatar Jun 22 '23 08:06 merabtenei