feat: update endpoints (#45688)

This commit is contained in:
Naomi Carrigan
2022-05-19 09:22:38 -07:00
committed by GitHub
parent 2b223704f6
commit b9f3345721
7 changed files with 201 additions and 37 deletions
@@ -26,7 +26,16 @@ import {
userTokenSelector
} from '../redux';
import { User } from '../redux/prop-types';
import { submitNewAbout, updateUserFlag, verifyCert } from '../redux/settings';
import {
submitNewAbout,
updateMyHonesty,
updateMyPortfolio,
updateMyQuincyEmail,
updateMySound,
updateMyTheme,
updateUserFlag,
verifyCert
} from '../redux/settings';
const { apiLocation } = envData;
@@ -66,13 +75,13 @@ const mapDispatchToProps = {
createFlashMessage,
navigate,
submitNewAbout,
toggleNightMode: (theme: Themes) => updateUserFlag({ theme }),
toggleSoundMode: (sound: boolean) => updateUserFlag({ sound }),
toggleNightMode: (theme: Themes) => updateMyTheme({ theme }),
toggleSoundMode: (sound: boolean) => updateMySound({ sound }),
updateInternetSettings: updateUserFlag,
updateIsHonest: updateUserFlag,
updatePortfolio: updateUserFlag,
updateIsHonest: updateMyHonesty,
updatePortfolio: updateMyPortfolio,
updateQuincyEmail: (sendQuincyEmail: boolean) =>
updateUserFlag({ sendQuincyEmail }),
updateMyQuincyEmail({ sendQuincyEmail }),
verifyCert
};
+12 -2
View File
@@ -19,7 +19,6 @@ import hardGoToEpic from './hard-go-to-epic';
import { createReportUserSaga } from './report-user-saga';
import { actionTypes as settingsTypes } from './settings/action-types';
import { createShowCertSaga } from './show-cert-saga';
import { createSoundModeSaga } from './sound-mode-saga';
import updateCompleteEpic from './update-complete-epic';
import { createUserTokenSaga } from './user-token-saga';
import { createSaveChallengeSaga } from './save-challenge-saga';
@@ -82,7 +81,6 @@ export const sagas = [
...createFetchUserSaga(actionTypes),
...createShowCertSaga(actionTypes),
...createReportUserSaga(actionTypes),
...createSoundModeSaga({ ...actionTypes, ...settingsTypes }),
...createUserTokenSaga(actionTypes),
...createSaveChallengeSaga(actionTypes)
];
@@ -746,6 +744,18 @@ export const reducer = handleActions(
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.updateMyEmailComplete]: (state, { payload }) =>
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.updateMySocialsComplete]: (state, { payload }) =>
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.updateMySoundComplete]: (state, { payload }) =>
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.updateMyThemeComplete]: (state, { payload }) =>
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.updateMyHonestyComplete]: (state, { payload }) =>
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.updateMyQuincyEmailComplete]: (state, { payload }) =>
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.updateMyPortfolioComplete]: (state, { payload }) =>
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.updateUserFlagComplete]: (state, { payload }) =>
payload ? spreadThePayloadOnUser(state, payload) : state,
[settingsTypes.verifyCertComplete]: (state, { payload }) =>
@@ -9,6 +9,12 @@ export const actionTypes = createTypes(
...createAsyncTypes('submitNewUsername'),
...createAsyncTypes('updateMyEmail'),
...createAsyncTypes('updateUserFlag'),
...createAsyncTypes('updateMySocials'),
...createAsyncTypes('updateMySound'),
...createAsyncTypes('updateMyTheme'),
...createAsyncTypes('updateMyHonesty'),
...createAsyncTypes('updateMyQuincyEmail'),
...createAsyncTypes('updateMyPortfolio'),
...createAsyncTypes('submitProfileUI'),
...createAsyncTypes('verifyCert'),
...createAsyncTypes('resetProgress'),
+46
View File
@@ -63,6 +63,52 @@ export const updateUserFlagComplete = createAction(
);
export const updateUserFlagError = createAction(types.updateUserFlagError);
export const updateMySocials = createAction(types.updateMySocials);
export const updateMySocialsComplete = createAction(
types.updateMySocialsComplete,
checkForSuccessPayload
);
export const updateMySocialsError = createAction(types.updateMySocialsError);
export const updateMySound = createAction(types.updateMySound);
export const updateMySoundComplete = createAction(
types.updateMySoundComplete,
checkForSuccessPayload
);
export const updateMySoundError = createAction(types.updateMySoundError);
export const updateMyTheme = createAction(types.updateMyTheme);
export const updateMyThemeComplete = createAction(
types.updateMyThemeComplete,
checkForSuccessPayload
);
export const updateMyThemeError = createAction(types.updateMyThemeError);
export const updateMyHonesty = createAction(types.updateMyHonesty);
export const updateMyHonestyComplete = createAction(
types.updateMyHonestyComplete,
checkForSuccessPayload
);
export const updateMyHonestyError = createAction(types.updateMyHonestyError);
export const updateMyQuincyEmail = createAction(types.updateMyQuincyEmail);
export const updateMyQuincyEmailComplete = createAction(
types.updateMyQuincyEmailComplete,
checkForSuccessPayload
);
export const updateMyQuincyEmailError = createAction(
types.updateMyQuincyEmailError
);
export const updateMyPortfolio = createAction(types.updateMyPortfolio);
export const updateMyPortfolioComplete = createAction(
types.updateMyPortfolioComplete,
checkForSuccessPayload
);
export const updateMyPortfolioError = createAction(
types.updateMyPortfolioError
);
export const validateUsername = createAction(types.validateUsername);
export const validateUsernameComplete = createAction(
types.validateUsernameComplete
+86 -2
View File
@@ -15,7 +15,13 @@ import {
putUpdateMyProfileUI,
putUpdateMyUsername,
putUpdateUserFlag,
putVerifyCert
putUpdateMySocials,
putUpdateMyHonesty,
putUpdateMyQuincyEmail,
putVerifyCert,
putUpdateMyPortfolio,
putUpdateMyTheme,
putUpdateMySound
} from '../../utils/ajax';
import { certMap } from '../../resources/cert-and-project-map';
import { completedChallengesSelector } from '..';
@@ -31,7 +37,19 @@ import {
submitProfileUIComplete,
submitProfileUIError,
verifyCertComplete,
verifyCertError
verifyCertError,
updateMySocialsComplete,
updateMySocialsError,
updateMyHonestyError,
updateMyHonestyComplete,
updateMyQuincyEmailComplete,
updateMyQuincyEmailError,
updateMyPortfolioError,
updateMyPortfolioComplete,
updateMyThemeComplete,
updateMyThemeError,
updateMySoundComplete,
updateMySoundError
} from './';
function* submitNewAboutSaga({ payload }) {
@@ -76,6 +94,66 @@ function* updateUserFlagSaga({ payload: update }) {
}
}
function* updateMySocialsSaga({ payload: update }) {
try {
const response = yield call(putUpdateMySocials, update);
yield put(updateMySocialsComplete({ ...response, payload: update }));
yield put(createFlashMessage({ ...response }));
} catch (e) {
yield put(updateMySocialsError);
}
}
function* updateMySoundSaga({ payload: update }) {
try {
const response = yield call(putUpdateMySound, update);
yield put(updateMySoundComplete({ ...response, payload: update }));
yield put(createFlashMessage({ ...response }));
} catch (e) {
yield put(updateMySoundError);
}
}
function* updateMyThemeSaga({ payload: update }) {
try {
const response = yield call(putUpdateMyTheme, update);
yield put(updateMyThemeComplete({ ...response, payload: update }));
yield put(createFlashMessage({ ...response }));
} catch (e) {
yield put(updateMyThemeError);
}
}
function* updateMyHonestySaga({ payload: update }) {
try {
const response = yield call(putUpdateMyHonesty, update);
yield put(updateMyHonestyComplete({ ...response, payload: update }));
yield put(createFlashMessage({ ...response }));
} catch (e) {
yield put(updateMyHonestyError);
}
}
function* updateMyQuincyEmailSaga({ payload: update }) {
try {
const response = yield call(putUpdateMyQuincyEmail, update);
yield put(updateMyQuincyEmailComplete({ ...response, payload: update }));
yield put(createFlashMessage({ ...response }));
} catch (e) {
yield put(updateMyQuincyEmailError);
}
}
function* updateMyPortfolioSaga({ payload: update }) {
try {
const response = yield call(putUpdateMyPortfolio, update);
yield put(updateMyPortfolioComplete({ ...response, payload: update }));
yield put(createFlashMessage({ ...response }));
} catch (e) {
yield put(updateMyPortfolioError);
}
}
function* validateUsernameSaga({ payload }) {
try {
const { exists } = yield call(getUsernameExists, payload);
@@ -134,6 +212,12 @@ function* verifyCertificationSaga({ payload }) {
export function createSettingsSagas(types) {
return [
takeEvery(types.updateUserFlag, updateUserFlagSaga),
takeEvery(types.updateMySocials, updateMySocialsSaga),
takeEvery(types.updateMyHonesty, updateMyHonestySaga),
takeEvery(types.updateMySound, updateMySoundSaga),
takeEvery(types.updateMyTheme, updateMyThemeSaga),
takeEvery(types.updateMyQuincyEmail, updateMyQuincyEmailSaga),
takeEvery(types.updateMyPortfolio, updateMyPortfolioSaga),
takeLatest(types.submitNewAbout, submitNewAboutSaga),
takeLatest(types.submitNewUsername, submitNewUsernameSaga),
debounce(2000, types.validateUsername, validateUsernameSaga),
-27
View File
@@ -1,27 +0,0 @@
/* eslint-disable require-yield */
import { takeEvery } from 'redux-saga/effects';
import store from 'store';
const soundKey = 'fcc-sound';
export function setSound(setting) {
store.set(soundKey, setting);
}
function* updateLocalSoundSaga({ payload }) {
const { user, sound } = payload ?? {};
if (user) {
const { sound = false } = user;
setSound(sound);
} else if (typeof sound !== 'undefined') {
setSound(sound);
}
}
export function createSoundModeSaga(types) {
return [
takeEvery(types.fetchUserComplete, updateLocalSoundSaga),
takeEvery(types.updateUserFlagComplete, updateLocalSoundSaga)
];
}
+36
View File
@@ -262,6 +262,42 @@ export function putUpdateUserFlag(
return put('/update-user-flag', update);
}
export function putUpdateMySocials(
update: Record<string, string>
): Promise<void> {
return put('/update-my-socials', update);
}
export function putUpdateMySound(
update: Record<string, string>
): Promise<void> {
return put('/update-my-sound', update);
}
export function putUpdateMyTheme(
update: Record<string, string>
): Promise<void> {
return put('/update-my-theme', update);
}
export function putUpdateMyHonesty(
update: Record<string, string>
): Promise<void> {
return put('/update-my-honesty', update);
}
export function putUpdateMyQuincyEmail(
update: Record<string, string>
): Promise<void> {
return put('/update-my-quincy-email', update);
}
export function putUpdateMyPortfolio(
update: Record<string, string>
): Promise<void> {
return put('/update-my-portfolio', update);
}
export function putUserAcceptsTerms(quincyEmails: boolean): Promise<void> {
return put('/update-privacy-terms', { quincyEmails });
}