* 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>
107 lines
2.9 KiB
JavaScript
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)
|
|
];
|
|
}
|