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

110 lines
3.3 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';
import { createSettingsSagas } from './settings-sagas';
import { createUpdateMyEmailSaga } from './update-email-saga';
2018-09-13 18:28:23 +01:00
const ns = 'settings';
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'),
2018-09-18 09:36:20 +01:00
...createAsyncTypes('updateUserFlag'),
...createAsyncTypes('submitProfileUI')
2018-09-13 18:28:23 +01:00
],
ns
);
export const sagas = [
...createSettingsSagas(types),
...createUpdateMyEmailSaga(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 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);
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
);