-
-
Notifications
You must be signed in to change notification settings - Fork 5.3k
/
Copy pathindex.ts
56 lines (51 loc) · 2.29 KB
/
index.ts
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
import { DataProvider } from 'react-admin';
import fakeServerFactory from '../fakeServer';
export default (type: string) => {
// The fake servers require to generate data, which can take some time.
// Here we start the server initialization but we don't wait for it to finish
let dataProviderPromise = getDataProvider(type);
// Instead we return this proxy which may be called immediately by react-admin if the
// user is already signed-in. In this case, we simply wait for the dataProvider promise
// to complete before requesting it the data.
// If the user isn't signed in, we already started the server initialization while they see
// the login page. By the time they come back to the admin as a signed-in user,
// the fake server will be initialized.
const dataProviderWithGeneratedData = new Proxy(defaultDataProvider, {
get(_, name) {
return (resource: string, params: any) => {
return dataProviderPromise.then(dataProvider => {
return dataProvider[name.toString()](resource, params);
});
};
},
});
return dataProviderWithGeneratedData;
};
const getDataProvider = async (type: string): Promise<DataProvider> => {
await fakeServerFactory(process.env.REACT_APP_DATA_PROVIDER || '');
/**
* This demo can work with either a fake REST server, or a fake GraphQL server.
*
* To avoid bundling both libraries, the dataProvider and fake server factories
* use the import() function, so they are asynchronous.
*/
if (type === 'graphql') {
return import('./graphql').then(factory => factory.default());
}
return import('./rest').then(provider => provider.default);
};
const defaultDataProvider: DataProvider = {
// @ts-ignore
create: () => Promise.resolve({ data: { id: 0 } }),
// @ts-ignore
delete: () => Promise.resolve({ data: {} }),
deleteMany: () => Promise.resolve({}),
getList: () => Promise.resolve({ data: [], total: 0 }),
getMany: () => Promise.resolve({ data: [] }),
getManyReference: () => Promise.resolve({ data: [], total: 0 }),
// @ts-ignore
getOne: () => Promise.resolve({ data: {} }),
// @ts-ignore
update: () => Promise.resolve({ data: {} }),
updateMany: () => Promise.resolve({}),
};