Open
Description
Just wondered if there was an idiomatic way to configure one Admiral frontend instance to talk to multiple backend APIs?
In my case, I have a bunch of different microservices all sharing an authentication method (JWT).
The best way I've found is to do something like the following:
const multiDataProvider = (resourceMap: { [key: string]: DataProvider }) : DataProvider => {
return {
getList: (resource: string, params: object) => resourceMap[resource].getList(resource, params),
getOne: (resource: string, params: GetOneParams) => resourceMap[resource].getOne(resource, params),
getCreateFormData: (resource: string) => resourceMap[resource].getCreateFormData(resource),
getFiltersFormData: (resource: string) => resourceMap[resource].getFiltersFormData(resource),
create: (resource: string, params: CreateParams) => resourceMap[resource].create(resource, params),
getUpdateFormData: (resource: string, params: GetOneParams) => resourceMap[resource].getUpdateFormData(resource, params),
update: (resource: string, params: UpdateParams) => resourceMap[resource].update(resource, params),
deleteOne: (resource: string, params: DeleteParams) => resourceMap[resource].deleteOne(resource, params),
reorderList: (resource: string, params: ReorderParams) => resourceMap[resource].reorderList(resource, params)
}
}
const usersDataProvider = dataProvider(usersUrl);
const replaysDataProvider = dataProvider(replaysUrl);
const mdp = multiDataProvider({
'users': usersDataProvider,
'replays': replaysDataProvider,
'errors': replaysDataProvider
})
then supplying mdp
to <Admin>
as its dataProvider
prop.
Is there a better/easier/more Admiral-ish way?
Metadata
Assignees
Labels
No labels