Files
freeCodeCamp/client/src/redux/codeally-saga.js
2022-03-15 14:11:43 +05:30

42 lines
1.1 KiB
JavaScript

import { call, put, select, takeEvery } from 'redux-saga/effects';
import { createFlashMessage } from '../components/Flash/redux';
import { FlashMessages } from '../components/Flash/redux/flash-messages';
import { postUserToken } from '../utils/ajax';
import {
isSignedInSelector,
showCodeAlly,
updateUserToken,
userTokenSelector
} from './';
const startProjectErrMessage = {
type: 'danger',
message: FlashMessages.StartProjectErr
};
function* tryToShowCodeAllySaga() {
const isSignedIn = yield select(isSignedInSelector);
const hasUserToken = !!(yield select(userTokenSelector));
if (!isSignedIn || hasUserToken) {
yield put(showCodeAlly());
} else {
try {
const response = yield call(postUserToken);
if (response?.userToken) {
yield put(updateUserToken(response.userToken));
yield put(showCodeAlly());
} else {
yield put(createFlashMessage(startProjectErrMessage));
}
} catch (e) {
yield put(createFlashMessage(startProjectErrMessage));
}
}
}
export function createCodeAllySaga(types) {
return [takeEvery(types.tryToShowCodeAlly, tryToShowCodeAllySaga)];
}