feat(about): Submit new 'about' settings

This commit is contained in:
Bouncey
2018-09-14 13:18:31 +01:00
committed by Stuart Taylor
parent 68cdeea6ae
commit a41ef09932
7 changed files with 174 additions and 140 deletions

View File

@@ -160,7 +160,18 @@ export const reducer = handleActions(
}
}
}
: state
: state,
[settingsTypes.submitNewAboutComplete]: (state, {payload}) => payload ? {
...state,
user: {
...state.user,
[state.appUsername]: {
...state.user[state.appUsername],
...payload
}
}
}
: state
},
initialState
);

View File

@@ -22,6 +22,7 @@ const initialState = {
export const types = createTypes(
[
...createAsyncTypes('validateUsername'),
...createAsyncTypes('submitNewAbout'),
...createAsyncTypes('submitNewUsername')
],
ns
@@ -29,6 +30,13 @@ export const types = createTypes(
export const sagas = [...createSettingsSagas(types)];
export const submitNewAbout = createAction(types.submitNewAbout);
export const submitNewAboutComplete = createAction(
types.submitNewAboutComplete,
({ type, payload }) => (type === 'success' ? payload : null)
);
export const submitNewAboutError = createAction(types.submitNewAboutError);
export const submitNewUsername = createAction(types.submitNewUsername);
export const submitNewUsernameComplete = createAction(
types.submitNewUsernameComplete,

View File

@@ -4,13 +4,38 @@ import { call, put, takeLatest } from 'redux-saga/effects';
import {
validateUsernameComplete,
validateUsernameError,
submitNewAboutComplete,
submitNewAboutError,
submitNewUsernameComplete,
submitNewUsernameError
} from './';
import { getUsernameExists, putUpdateMyUsername } from '../../utils/ajax';
import {
getUsernameExists,
putUpdateMyAbout,
putUpdateMyUsername
} from '../../utils/ajax';
import { createFlashMessage } from '../../components/Flash/redux';
function* submitNewAboutSaga({ payload }) {
try {
const { data: 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 { data: response } = yield call(putUpdateMyUsername, username);
yield put(submitNewUsernameComplete({ ...response, username }));
yield put(createFlashMessage(response));
} catch (e) {
yield put(submitNewUsernameError(e));
}
}
function* validateUsernameSaga({ payload }) {
try {
yield delay(500);
@@ -23,19 +48,10 @@ function* validateUsernameSaga({ payload }) {
}
}
function* submitNEwUswernameSaga({ payload: username }) {
try {
const { data: response } = yield call(putUpdateMyUsername, username);
yield put(submitNewUsernameComplete({...response, username}));
yield put(createFlashMessage(response));
} catch (e) {
yield put(submitNewUsernameError(e));
}
}
export function createSettingsSagas(types) {
return [
takeLatest(types.validateUsername, validateUsernameSaga),
takeLatest(types.submitNewUsername, submitNEwUswernameSaga)
takeLatest(types.submitNewAbout, submitNewAboutSaga),
takeLatest(types.submitNewUsername, submitNewUsernameSaga),
takeLatest(types.validateUsername, validateUsernameSaga)
];
}