feat(username): Add Username updating
This commit is contained in:
73
client/src/redux/settings/index.js
Normal file
73
client/src/redux/settings/index.js
Normal file
@@ -0,0 +1,73 @@
|
||||
import { createAction, handleActions } from 'redux-actions';
|
||||
|
||||
import { createTypes, createAsyncTypes } from '../../utils/createTypes';
|
||||
import { createSettingsSagas } from './settings-sagas';
|
||||
|
||||
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('submitNewUsername')
|
||||
],
|
||||
ns
|
||||
);
|
||||
|
||||
export const sagas = [...createSettingsSagas(types)];
|
||||
|
||||
export const submitNewUsername = createAction(types.submitNewUsername);
|
||||
export const submitNewUsernameComplete = createAction(
|
||||
types.submitNewUsernameComplete,
|
||||
({ type, username }) => (type === 'success' ? username : null)
|
||||
);
|
||||
export const submitNewUsernameError = createAction(
|
||||
types.submitNewUsernameError
|
||||
);
|
||||
|
||||
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
|
||||
);
|
Reference in New Issue
Block a user