Skip to content

Instantly share code, notes, and snippets.

@tlaitinen
Last active August 1, 2018 11:39
Show Gist options
  • Save tlaitinen/3e5b60f179402d2a526ab8131bed6c15 to your computer and use it in GitHub Desktop.
Save tlaitinen/3e5b60f179402d2a526ab8131bed6c15 to your computer and use it in GitHub Desktop.
import {select, put, call, takeEvery} from 'redux-saga/effects';
import {Request} from '../../backend/db/requests-api-types';
import {getType, ActionType} from 'typesafe-actions';
import {actions} from './requests';
import {actions as uiActions} from './ui';
import * as client from '../client/requests';
import {i18nSelector} from './locale';
function* onSuccess(request:Request, _response:Response) {
const i18n = yield select(i18nSelector);
let successText:string | undefined;
switch(request.type) {
case 'fuu':
case 'bar':
yield load_fuu_bar_stuff(request.props.baz);
successText = i18n.gettext('Fuu/Bar OK!');
break;
}
if (successText) {
yield put(uiActions.showMessage({
bsStyle: 'success',
text: successMessage
}));
}
}
export function* request(action:ActionType<typeof actions['request']>) {
const request = action.payload;
try {
const response = yield call(client.request, request);
yield onSuccess(request, response);
} catch (e) {
yield put(uiActions.showMessage({
bsStyle: 'danger',
text: e.message
}));
}
}
export function* rootSaga() {
yield takeEvery(getType(actions.request), request);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment