Files
freeCodeCamp/client/src/redux/settings/danger-zone-saga.js

52 lines
1.4 KiB
JavaScript

import { navigate } from 'gatsby';
import { call, put, takeEvery, take } from 'redux-saga/effects';
import { deleteAccountError, resetProgressError } from './';
import { resetUserData, fetchUser, types as appTypes } from '../';
import { postResetProgress, postDeleteAccount } from '../../utils/ajax';
import { createFlashMessage } from '../../components/Flash/redux';
function* deleteAccountSaga() {
try {
yield call(postDeleteAccount);
yield put(
createFlashMessage({
type: 'info',
message: 'Your account has been successfully deleted'
})
);
// remove current user information from application state
yield put(resetUserData());
yield call(navigate, '/');
} catch (e) {
yield put(deleteAccountError(e));
}
}
function* resetProgressSaga() {
try {
yield call(postResetProgress);
yield put(
createFlashMessage({
type: 'info',
message: 'Your progress has been reset'
})
);
// refresh current user data in application state
yield put(fetchUser());
// wait for the refresh to complete
yield take(appTypes.fetchUserComplete);
// the complete action has been called
yield call(navigate, '/welcome');
} catch (e) {
yield put(resetProgressError(e));
}
}
export function createDangerZoneSaga(types) {
return [
takeEvery(types.deleteAccount, deleteAccountSaga),
takeEvery(types.resetProgress, resetProgressSaga)
];
}