vincentlu
2025-02-05 9d79b8c8d34077ebf782a7b61d54ee4e1debdba1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import { HttpError } from "react-admin";
import { ABORT_SIGNAL, DATA_PROVIDER_SPRING } from "./setting";
 
export default (adapter) => {
    let dataProviderPromise = getDataProvider(adapter);
 
    const dataProviderWithGeneratedData = new Proxy(defaultDataProvider, {
        get: function (target, property) {
            if (typeof property === 'symbol' || property === 'then') {
                return;
            }
            if (property === 'supportAbortSignal') {
                return ABORT_SIGNAL;
            }
 
            return async (resource, params) => {
                return await dataProviderPromise.then(dataProvider => {
 
                    try {
                        if (typeof dataProvider[property] === 'function') {
                            return dataProvider[property](resource, params);
                        } else {
                            console.error('dataProvider[property] not a function:', property);
                            return Promise.reject(new Error(`function ${property} can not found`));
                        }
                    } catch (error) {
                        console.error('wrong to use dataProvider function:', error);
                        return Promise.reject(error);
                    }
                }).catch(error => {
                    console.error('dataProviderPromise fail:', error);
                    return Promise.reject(error);
                });
            }
        }
    });
 
    return dataProviderWithGeneratedData;
}
 
const getDataProvider = async (adapter) => {
    let dataProviderModule;
    if (adapter === DATA_PROVIDER_SPRING) {
        dataProviderModule = await import('./MyDataProvider');
    } else {
        dataProviderModule = defaultDataProvider;
    }
    return dataProviderModule.default;
}
 
 
const defaultDataProvider = {
    // get a list of records based on sort, filter, and pagination
    getList: (resource, params) => {
        return Promise.resolve();
    },
 
    // get a single record by id
    getOne: (resource, params) => {
        return Promise.resolve();
    },
 
    // get a list of records based on an array of ids
    getMany: (resource, params) => {
        return Promise.resolve();
    },
 
    // get the records referenced to another record, e.g. comments for a post
    getManyReference: (resource, params) => {
        return Promise.resolve();
    },
 
    // create a record
    create: (resource, params) => {
        return Promise.resolve();
    },
 
    // update a record based on a patch
    update: (resource, params) => {
        return Promise.resolve();
    },
 
    // update a list of records based on an array of ids and a common patch
    updateMany: (resource, params) => {
        return Promise.resolve();
    },
 
    // delete a record by id
    delete: (resource, params) => {
        return Promise.resolve();
    },
 
    // delete a list of records based on an array of ids
    deleteMany: (resource, params) => {
        return Promise.resolve();
    },
 
}