Это будет быстрый ответ, который я оставлю для дальнейшего улучшения.
Если я правильно понимаю ваш вопрос, вы обновили некоторые из ваших ресурсов (сущностей) и хотите, чтобы с ним реагировал admin-adminи обновлять его хранилище, соответственно вызывая обновления в представлениях приложений, если это необходимо.
Первое, что мы должны получить, - это функция dispatch
хранилища реагирования-администрирования.В моем случае источником обновления ресурса был компонент React, поэтому я использовал withDataProvider
decorator для получения ссылки на функцию dispatch
.
Как только вы получите dispatch
функция, которую вы отправляете, например, CRUD_UPDATE_SUCCESS
действие для определенного обновления ресурса в хранилище реагирующих администраторов.
import { CRUD_UPDATE_SUCCESS, FETCH_END, UPDATE } from 'react-admin';
dispatch({
type: CRUD_UPDATE_SUCCESS,
payload: { data },
meta: {
resource,
notification: {
body: 'ra.notification.dataSaved',
level: 'info'
},
fetchResponse: UPDATE,
fetchStatus: FETCH_END
}
});
Вы также можете использовать создателей действий из реагирующего администратора.Как, например, showNotification
.
import { showNotification } from 'react-admin';
dispatch(showNotification(errorMessage, 'warning', { autoHideDuration: 10000 }));
Немного более последовательный фрагмент кода, чтобы показать, как все это может работать вместе.Компонент Updater
здесь визуализирует свои дочерние компоненты, передавая им ресурс record
, и подписывается на их onSubmit
обратный вызов для выполнения сохранения сущности и обновления хранилища response-admin.
import React from 'react';
import {
CRUD_UPDATE_SUCCESS, FETCH_END, UPDATE, withDataProvider, showNotification
} from 'react-admin';
class Updater extends React.Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleUpdate(record) {
const { resource, dataProvider, dispatch } = this.props;
const payload = {
id: record.id,
};
payload.data = {...record};
return new Promise((resolve, reject) => {
dataProvider(UPDATE, resource, payload)
.then(({data}) => {
dispatch({
type: CRUD_UPDATE_SUCCESS,
payload: { data },
meta: {
resource,
notification: {
body: 'ra.notification.dataSaved',
level: 'info'
},
fetchResponse: UPDATE,
fetchStatus: FETCH_END
}
});
resolve(data);
})
.catch(e => {
const errorMessage = e.message || e;
this.setState({ errorMessage });
dispatch(
showNotification(errorMessage, 'warning', { autoHideDuration: 10000 })
);
reject(errorMessage);
});
});
}
render() {
const { record, children } = this.props;
const { errorMessage } = this.state;
return React.Children.only(React.cloneElement(children, {
record,
errorMessage,
onUpdate: this.handleUpdate
}));
}
}
export default withDataProvider(Updater);
HTH, Ed