Provide saved preferences data in Promise resolve rather than in Saga

This commit is contained in:
Adam Butterworth
2019-02-21 15:50:54 -05:00
committed by David Joy
parent 85d3ae2ff1
commit cbf9c99585
4 changed files with 11 additions and 10 deletions

View File

@@ -32,9 +32,8 @@ export const savePreferencesBegin = () => ({
type: SAVE_PREFERENCES.BEGIN,
});
export const savePreferencesSuccess = preferences => ({
export const savePreferencesSuccess = () => ({
type: SAVE_PREFERENCES.SUCCESS,
preferences,
});
export const savePreferencesFailure = error => ({

View File

@@ -56,7 +56,7 @@ const profilePage = (state = initialState, action) => {
case FETCH_PREFERENCES.SUCCESS:
return {
...state,
preferences: action.preferences,
preferences: defaultsDeep({}, action.preferences, state.preferences),
};
case SAVE_PREFERENCES.BEGIN:
@@ -69,7 +69,6 @@ const profilePage = (state = initialState, action) => {
// defaults deep used because our preferences/state object is multi-dimensional
return {
...state,
preferences: defaultsDeep({}, action.preferences, state.preferences),
savePreferencesState: 'complete',
saveState: mergeSaveStates(['complete', state.saveProfileState]),
};

View File

@@ -147,11 +147,12 @@ export function* handleFetchPreferences(action) {
}
export function* handleSavePreferences(action) {
const { username, preferences } = action.payload;
const { username, preferences: preferencesToSave } = action.payload;
try {
yield put(savePreferencesBegin());
yield call(ProfileApiService.savePreferences, username, preferences);
yield put(savePreferencesSuccess(preferences));
const preferences = yield call(ProfileApiService.postPreferences, username, preferencesToSave);
yield put(savePreferencesSuccess());
yield put(fetchPreferencesSuccess(preferences));
yield put(savePreferencesReset());
} catch (e) {
yield put(savePreferencesFailure(e));

View File

@@ -106,7 +106,7 @@ export function getPreferences(username) {
});
}
export function savePreferences(username, preferences) {
export function postPreferences(username, preferences) {
const url = `${preferencesApiBaseUrl}/${username}`;
// Flatten object for server
@@ -119,8 +119,10 @@ export function savePreferences(username, preferences) {
data,
{ headers: { 'Content-Type': 'application/merge-patch+json' } },
)
.then((response) => {
resolve(response.data);
.then((response) => { // eslint-disable-line no-unused-vars
// Server response is blank on success
// resolve(response.data);
resolve(preferences);
})
.catch((error) => {
reject(error);