Files
freeCodeCamp/client/src/redux/settings/index.js

140 lines
4.4 KiB
JavaScript
Raw Normal View History

2018-09-13 18:28:23 +01:00
import { createAction, handleActions } from 'redux-actions';
import { createTypes, createAsyncTypes } from '../../utils/createTypes';
2019-02-26 19:59:57 +05:30
import { createDangerZoneSaga } from './danger-zone-saga';
2018-09-13 18:28:23 +01:00
import { createSettingsSagas } from './settings-sagas';
import { createUpdateMyEmailSaga } from './update-email-saga';
2018-09-13 18:28:23 +01:00
// prettier-ignore
import { createUpdateLegacyCertSaga } from
'./update-legacy-certificate-saga';
2018-11-29 12:12:15 +00:00
export const ns = 'settings';
2018-09-13 18:28:23 +01:00
const defaultFetchState = {
pending: false,
complete: false,
errored: false,
error: null
};
const initialState = {
usernameValidation: {
isValidUsername: false,
fetchState: { ...defaultFetchState }
}
};
export const types = createTypes(
[
...createAsyncTypes('validateUsername'),
...createAsyncTypes('submitNewAbout'),
...createAsyncTypes('submitNewUsername'),
...createAsyncTypes('updateMyEmail'),
...createAsyncTypes('updateLegacyCert'),
2018-09-18 09:36:20 +01:00
...createAsyncTypes('updateUserFlag'),
2018-09-25 12:51:17 +01:00
...createAsyncTypes('submitProfileUI'),
2019-02-21 21:47:22 +05:30
...createAsyncTypes('verifyCert'),
...createAsyncTypes('resetProgress'),
...createAsyncTypes('deleteAccount')
2018-09-13 18:28:23 +01:00
],
ns
);
export const sagas = [
...createSettingsSagas(types),
2019-02-26 19:59:57 +05:30
...createUpdateMyEmailSaga(types),
...createDangerZoneSaga(types),
...createUpdateLegacyCertSaga(types)
];
const checkForSuccessPayload = ({ type, payload }) =>
type === 'success' ? payload : null;
2018-09-13 18:28:23 +01:00
export const submitNewAbout = createAction(types.submitNewAbout);
export const submitNewAboutComplete = createAction(
types.submitNewAboutComplete,
checkForSuccessPayload
);
export const submitNewAboutError = createAction(types.submitNewAboutError);
2018-09-13 18:28:23 +01:00
export const submitNewUsername = createAction(types.submitNewUsername);
export const submitNewUsernameComplete = createAction(
types.submitNewUsernameComplete,
({ type, username }) => (type === 'success' ? username : null)
);
export const submitNewUsernameError = createAction(
types.submitNewUsernameError
);
2018-09-18 09:36:20 +01:00
export const submitProfileUI = createAction(types.submitProfileUI);
export const submitProfileUIComplete = createAction(
types.submitProfileUIComplete,
checkForSuccessPayload
);
export const submitProfileUIError = createAction(types.submitProfileUIError);
export const updateMyEmail = createAction(types.updateMyEmail);
export const updateMyEmailComplete = createAction(types.updateMyEmailComplete);
export const updateMyEmailError = createAction(types.updateMyEmailError);
export const updateLegacyCert = createAction(types.updateLegacyCert);
export const updateLegacyCertComplete = createAction(
types.updateLegacyCertComplete
);
export const updateLegacyCertError = createAction(types.updateLegacyCertError);
export const updateUserFlag = createAction(types.updateUserFlag);
export const updateUserFlagComplete = createAction(
types.updateUserFlagComplete,
checkForSuccessPayload
);
export const updateUserFlagError = createAction(types.updateUserFlagError);
2018-09-13 18:28:23 +01:00
export const validateUsername = createAction(types.validateUsername);
export const validateUsernameComplete = createAction(
types.validateUsernameComplete
);
export const validateUsernameError = createAction(types.validateUsernameError);
2018-09-25 12:51:17 +01:00
export const verifyCert = createAction(types.verifyCert);
export const verifyCertComplete = createAction(
types.verifyCertComplete,
checkForSuccessPayload
);
export const verifyCertError = createAction(types.verifyCertError);
2019-02-21 21:47:22 +05:30
export const resetProgress = createAction(types.resetProgress);
export const resetProgressError = createAction(types.resetProgressError);
export const deleteAccount = createAction(types.deleteAccount);
export const deleteAccountError = createAction(types.deleteAccountError);
2018-09-13 18:28:23 +01:00
export const usernameValidationSelector = state => state[ns].usernameValidation;
export const reducer = handleActions(
{
[types.submitNewUsernameComplete]: state => ({
...state,
usernameValidation: { ...initialState.usernameValidation }
}),
[types.validateUsername]: state => ({
...state,
usernameValidation: {
...state.usernameValidation,
isValidUsername: false,
fetchState: { ...defaultFetchState, pending: true }
}
}),
[types.validateUsernameComplete]: (state, { payload }) => ({
...state,
usernameValidation: {
...state.usernameValidation,
isValidUsername: !payload,
fetchState: { ...defaultFetchState, pending: false, complete: true }
}
})
},
initialState
);