admin-on-rest, как реализовать пользовательскую сагу для автоматического обновления

В примере, представленном в readme для aor-realtime

import realtimeSaga from 'aor-realtime';

const observeRequest = (fetchType, resource, params) => {
    // Use your apollo client methods here or sockets or whatever else including the following very naive polling mechanism
    return {
        subscribe(observer) {
            const intervalId = setInterval(() => {
                fetchData(fetchType, resource, params)
                    .then(results => observer.next(results)) // New data received, notify the observer
                    .catch(error => observer.error(error)); // Ouch, an error occured, notify the observer
            }, 5000);

            const subscription = {
                unsubscribe() {
                    // Clean up after ourselves
                    clearInterval(intervalId);
                    // Notify the saga that we cleaned up everything
                    observer.complete();
                }
            };

            return subscription;
        },
    };
};

const customSaga = realtimeSaga(observeRequest);

Функция fetchData упоминается, но она недоступна из этой области, это просто символический/абстрактный вызов?

Если бы я действительно хотел обновить данные на основе какого-либо триггера в реальном времени, как я мог бы отправить команду выборки данных из этой области?


person MhdSyrwan    schedule 10.05.2017    source источник


Ответы (1)


Вы правы, это символический/абстрактный вызов. Вы должны реализовать observeRequest, например, инициализировав его с помощью restClient и соответственно вызвав методы клиента, используя параметры fetchType, resource и params.

В настоящее время мы используем эту сагу только с клиентом aor-simple-graphql-client.

person Gildas Garcia    schedule 11.05.2017
comment
Но если бы я использовал restClient напрямую, он не обновил бы пользовательский интерфейс (текущая отображаемая запись/список). Я думаю, что я должен отправить действие CRUD_GET_LIST (в случае просмотра списка). Как я могу отправить такое избыточное действие из контекста саги в реальном времени? - person MhdSyrwan; 11.05.2017
comment
Чтобы быть более ясным, я пытаюсь добавить функцию автоматического обновления в json rest-client с помощью веб-сокетов. - person MhdSyrwan; 11.05.2017
comment
Когда вы вызываете observer.next с новыми данными, сага вызывает соответствующий тип действия (либо CRUD_GET_LIST_SUCCESS, либо CRUD_GET_ONE_SUCCESS. Кстати, я также обновил README для github.com/marmelab/aor-realtime для использования существующего клиента - person Gildas Garcia; 11.05.2017