Files
freeCodeCamp/client/src/redux/settings/settings-sagas.js
Shaun Hamilton 23e241bbc0 chore(client): tidy Flash by tidying tone (#44320)
* chore(client): tidy Flash by tidying tone

* add store import

* fix enum, remove default switch case

Co-authored-by: Nicholas Carrigan <nhcarrigan@gmail.com>

* typo galore

Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com>

* rejig everything, because refactoring is fun 🙃

* refactor: DRY playTone

* fix url to foss library

Co-authored-by: Nicholas Carrigan <nhcarrigan@gmail.com>

* alphabetasize FlashMessage enum

* add all FlashMessages to tone/index.ts

* remove redundant type

* my code is correctnpm run develop:client

* fix: remove circular dependency

* fix: typo

* remove logs, play special tones for nightmode

* play sound on challengeComplete

Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com>

Co-authored-by: Nicholas Carrigan <nhcarrigan@gmail.com>
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
2021-12-01 10:45:17 -08:00

107 lines
2.9 KiB
JavaScript

import { call, delay, put, takeLatest, takeEvery } from 'redux-saga/effects';
import { createFlashMessage } from '../../components/Flash/redux';
import {
getUsernameExists,
putUpdateMyAbout,
putUpdateMyProfileUI,
putUpdateMyUsername,
putUpdateUserFlag,
putVerifyCert
} from '../../utils/ajax';
import {
updateUserFlagComplete,
updateUserFlagError,
validateUsernameComplete,
validateUsernameError,
submitNewAboutComplete,
submitNewAboutError,
submitNewUsernameComplete,
submitNewUsernameError,
submitProfileUIComplete,
submitProfileUIError,
verifyCertComplete,
verifyCertError
} from './';
function* submitNewAboutSaga({ payload }) {
try {
const response = yield call(putUpdateMyAbout, payload);
yield put(submitNewAboutComplete({ ...response, payload }));
yield put(createFlashMessage(response));
} catch (e) {
yield put(submitNewAboutError(e));
}
}
function* submitNewUsernameSaga({ payload: username }) {
try {
const response = yield call(putUpdateMyUsername, username);
yield put(submitNewUsernameComplete({ ...response, username }));
yield put(createFlashMessage(response));
} catch (e) {
yield put(submitNewUsernameError(e));
}
}
function* submitProfileUISaga({ payload }) {
try {
const response = yield call(putUpdateMyProfileUI, payload);
yield put(submitProfileUIComplete({ ...response, payload }));
yield put(createFlashMessage(response));
} catch (e) {
yield put(submitProfileUIError);
}
}
function* updateUserFlagSaga({ payload: update }) {
try {
const response = yield call(putUpdateUserFlag, update);
yield put(updateUserFlagComplete({ ...response, payload: update }));
yield put(
createFlashMessage({ ...response, variables: { theme: update.theme } })
);
} catch (e) {
yield put(updateUserFlagError(e));
}
}
function* validateUsernameSaga({ payload }) {
try {
yield delay(500);
const { exists } = yield call(getUsernameExists, payload);
yield put(validateUsernameComplete(exists));
} catch (e) {
yield put(validateUsernameError(e));
}
}
function* verifyCertificationSaga({ payload }) {
try {
const { response, isCertMap, completedChallenges } = yield call(
putVerifyCert,
payload
);
yield put(
verifyCertComplete({
...response,
payload: { ...isCertMap, completedChallenges }
})
);
yield put(createFlashMessage(response));
} catch (e) {
yield put(verifyCertError(e));
}
}
export function createSettingsSagas(types) {
return [
takeEvery(types.updateUserFlag, updateUserFlagSaga),
takeLatest(types.submitNewAbout, submitNewAboutSaga),
takeLatest(types.submitNewUsername, submitNewUsernameSaga),
takeLatest(types.validateUsername, validateUsernameSaga),
takeLatest(types.submitProfileUI, submitProfileUISaga),
takeEvery(types.verifyCert, verifyCertificationSaga)
];
}