ReferenceInput:使用GET_ONE而不是GET_MANY,就像在休息时进行管理一样

时间:2019-05-17 08:49:10

标签: react-admin

我正在从休息管理员迁移到反应管理员

使用完全相同的Edit / SimpleForm / ReferenceInput组合,静态管理(似乎使用GET_ONE)和react-admin(似乎使用GET_MANY)之间的行为是不同的

问题是我的后端API不支持GET_MANY

这是否意味着我必须修改数据提供程序以某种方式将GET_MANY转换为多个GET_ONE调用?

如果是这样,您能否提供一个基本的示例来做到这一点。

请注意,这可能是https://marmelab.com/react-admin/Inputs.html#referenceinput文档的一部分,因为我认为这并不罕见

1 个答案:

答案 0 :(得分:0)

等待一个明确的答案,这是我在基于https://marmelab.com/react-admin/DataProviders.html#example-request-processing的数据提供者中所做的事情:

const convertRESTRequestToHTTP = (type, resource, params) => new Promise((resolve, reject) => {
    let url = '';
    const options = {};
    switch (type) {
        /* see other cases in the doc */
        case GET_MANY: {
            //our API does not support GET_MANY
            //=> we fallback to GET_ONE if there is a single id,
            //   otherwise we throw an error
            // also see convertHTTPResponseToREST to transform the JSON
            if (params.ids.length === 1) {
              url = `${apiUrl}/${resource}/${params.ids[0]}`;
              break;
            }
            throw new Error('the API does not support GET_MANY')
        }
    }
    resolve({ url, options });
});

const convertHTTPResponseToREST = (response, type, resource, params) => {
    const { json } = response;
    switch (type) {
        /* see other cases in the doc */
        case GET_MANY:
            //see explanantion in convertRESTRequestToHTTP
            if (params.ids.length !== 1) {
              throw new Error('the API does not support GET_MANY')
            }
            return { data: [json] };            
    }
};