From 6b8c2e74b6e68e6abbf3eae17606ad0a01e6c4e4 Mon Sep 17 00:00:00 2001 From: Oliver Eyton-Williams Date: Wed, 10 Jun 2020 08:54:19 +0200 Subject: [PATCH] fix(client): sync Redux store and DB (#39034) --- api-server/server/boot/certificate.js | 6 +++++- client/src/redux/index.js | 10 ++++------ client/src/redux/settings/settings-sagas.js | 9 +++++++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/api-server/server/boot/certificate.js b/api-server/server/boot/certificate.js index d17d3a645a..a91ee1f488 100644 --- a/api-server/server/boot/certificate.js +++ b/api-server/server/boot/certificate.js @@ -370,7 +370,11 @@ function createVerifyCert(certTypeIds, app) { type: message.includes('Congratulations') ? 'success' : 'info', message }, - isCertMap: getUserIsCertMap(user) + isCertMap: getUserIsCertMap(user), + // send back the completed challenges + // NOTE: we could just send back the latest challenge, but this + // ensures the challenges are synced. + completedChallenges: user.completedChallenges }); }, next); }; diff --git a/client/src/redux/index.js b/client/src/redux/index.js index 031fb50a5e..114923591c 100644 --- a/client/src/redux/index.js +++ b/client/src/redux/index.js @@ -482,12 +482,10 @@ export const reducer = handleActions( error: payload } }), - [types.submitComplete]: (state, { payload: { id, challArray } }) => { - // TODO: possibly more of the payload (files?) should be added - // to the completedChallenges array. - let submittedchallenges = [{ id, completedDate: Date.now() }]; - if (challArray) { - submittedchallenges = challArray; + [types.submitComplete]: (state, { payload }) => { + let submittedchallenges = [{ ...payload, completedDate: Date.now() }]; + if (payload.challArray) { + submittedchallenges = payload.challArray; } const { appUsername } = state; return { diff --git a/client/src/redux/settings/settings-sagas.js b/client/src/redux/settings/settings-sagas.js index 61470c57d1..407d2673db 100644 --- a/client/src/redux/settings/settings-sagas.js +++ b/client/src/redux/settings/settings-sagas.js @@ -79,9 +79,14 @@ function* validateUsernameSaga({ payload }) { function* verifyCertificationSaga({ payload }) { try { const { - data: { response, isCertMap } + data: { response, isCertMap, completedChallenges } } = yield call(putVerifyCert, payload); - yield put(verifyCertComplete({ ...response, payload: isCertMap })); + yield put( + verifyCertComplete({ + ...response, + payload: { ...isCertMap, completedChallenges } + }) + ); yield put(createFlashMessage(response)); } catch (e) { yield put(verifyCertError(e));