Firebase Data Provider + пользовательский поставщик данных - React admin - PullRequest
0 голосов
/ 24 апреля 2020

Я отчаянно гуглю и переполняю стек в течение нескольких часов "Как использовать несколько поставщиков данных с React-admin". Я обнаружил, что многие вещи ожидают того, что мне действительно нужно. Как динамически использовать провайдер данных firebase + пользовательский провайдер данных с React admin v3? Я использую act-admin-firebase для постов, а также мне нужно использовать наши пользовательские API-интерфейсы для списка пользователей.

Это то, что я пробовал разными способами (если-то еще, переключатель заявления et c.):

For Example:

import { dataProvider as firebaseProvider } from "./firebase/firebase.utils";
import { usersMockData } from './api/mockData';

const superDataProvider = (type, resource, params) => {
  if (resource === 'users') {
    return new Promise(resolve => resolve(usersMockData));
  }

  return firebaseProvider;
};

  <Admin
  title="My site"
  authProvider={authProvider}
  dataProvider={superDataProvider}
  loginPage={LoginPage}
  >

  <Resource
    name="posts"
    options={{ label: "Posts" }}
    list={PostsList}
    edit={PostsEdit}
    show={PostsShow}
    create={PostsCreate}
    icon={PostsIcon}
  />

  <Resource
    name="users"
    options={{ label: "Users" }}
    list={usersList}
    show={usersShow}
    icon={usersIcon}
  />

</Admin>

// Output error when I try to reach page with posts from firebase: The dataProvider threw an error. It should return a rejected Promise instead.

На самом деле, пользователи загружаются, а сообщения из firebase - нет. Интересен тот факт, что когда я использую напрямую firebaseProvider в Admin prop, список сообщений работает. WTF? Большое спасибо

1 Ответ

0 голосов
/ 29 апреля 2020

О, давай, Коннор! Причина, почему это не работает, так проста! Вы просто возвращаете firebaseProvider, а не вызываете его и возвращаете РЕЗУЛЬТАТ! Так что попробуйте этот код, и он точно будет работать легко!

 const superDataProvider = (type, resource, params) => {
  if (resource === 'users') {
    return new Promise(resolve => resolve(usersMockData));
  }

  return firebaseProvider(type, resource, params);
};
...