Skip to main content

Controller data

NameTypeDescriptionDefault valueRequired
prefixstringPrefix should be unique for each controller.'c-state'Optional
actionsObject<{[string], string}> or Array<string>List of action types which will be generated.-Required
initialobjectInitial data for your redux state.-Required
subscriberfunctionRoot watcher saga of controller.-Required

Example action.

import { takeEvery } from 'redux-saga/effects';
import { Controller, ActionCreators, ActionCreator, create } from 'redux-saga-controller';

// You should add interface for actions its only one way to define payload annotation
interface IActions extends ActionCreators<IInitial> {
initialize: ActionCreator<InitializePayload>;
someAction: ActionCreator<SomePayload>;
getSelf: ActionCreator<GetSelfPayload>;
}

export const controller:Controller<IActions, IInitial> = create({
prefix: 'defaultPrefix',
actions: ['initialize', 'getSelf'],
initial: {
initialized: false,
disabled: true,
data: {
name: 'John',
age: 30,
}
},
subscriber: function * () {
yield takeEvery(controller.action.initialize.TYPE, initializeSaga);
yield takeEvery(controller.action.getSelf.TYPE, getSelfSaga);
},
});
import { takeEvery } from 'redux-saga/effects';
import createController, { Controller, ActionCreators, ActionCreator } from 'redux-saga-controller';

// You should add interface for actions its only one way to define payload annotation
interface IActions extends ActionCreators<IInitial> {
initialize: ActionCreator<InitializePayload>;
someAction: ActionCreator<SomePayload>;
getSelf: ActionCreator<GetSelfPayload>;
}

export const controller:Controller<IActions, IInitial> = createController(
{
initialize: 'init',
getSelf: 'getSelf',
someAction: 'someAction',
},
function * () {
yield takeEvery(controller.action.initialize.TYPE, initializeSaga);
yield takeEvery(controller.action.getSelf.TYPE, getSelfSaga);
},
{
initialized: false,
disabled: true,
data: {
name: 'John',
age: 30,
}
},
'defaultPrefix' // controller prefix
);