Please refer Redux-Saga (opens in a new tab)
Example:
/**
* @type: saga
* name: blog.saga.updatedItem
*/
import { LocalAction, viewItem } from '@metafox/framework';
import { takeEvery } from 'redux-saga/effects';
function* updatedItem({ payload: { id } }: LocalAction<{ id: string }>) {
yield* viewItem('blog', 'blog', id);
}
const sagas = [takeEvery('@updatedItem/blog', updatedItem)];
export default sagas;
metafox build/start command collect all sagas file using annotation @type: saga
saga root pattern (opens in a new tab)
Whenever a new saga file be added or removed, run yarn metafox reload
to bundle saga file again.
All sagas bundled at file ./app/src/bundle/produce.tsx
, example files
import coreSagaHandleActionFeedbackSaga from
'@metafox/framework/sagas/handleActionFeedback';
import CoreRequestSaga from
'@metafox/framework/sagas/handleRequest';
import sagaReloadEntitySaga from
'@metafox/core/reducers/reloadEntity';
import abortControllerSaga from
'@metafox/core/sagas/abortController';
import coreChooseThemeSaga from
'@metafox/core/sagas/chooseTheme';
import sagaCoreCloseDialogSaga from
'@metafox/core/sagas/closeDialog';
const sagas = [
coreSagaHandleActionFeedbackSaga,
CoreRequestSaga,
sagaReloadEntitySaga,
abortControllerSaga,
coreChooseThemeSaga,
sagaCoreCloseDialogSaga
]
export default function injector(config: any) {
config.sagas=sagas;
}