diff --git a/src/actions/members.js b/src/actions/members.js index dee9e19..e361436 100644 --- a/src/actions/members.js +++ b/src/actions/members.js @@ -257,10 +257,11 @@ async function getStatsDistributionDone(handle, track, subTrack, uuid, tokenV3) * @desc Create an action that signals beginning of subtrack challenges loading. * @param {String} handle Member handle. * @param {String} uuid Operation UUID. + * @param {Number} pageNum Page index. * @return {Action} */ -async function getSubtrackChallengesInit(handle, uuid) { - return { handle, uuid }; +async function getSubtrackChallengesInit(handle, uuid, pageNum) { + return { handle, uuid, pageNum }; } /** @@ -340,7 +341,7 @@ async function getSubtrackChallengesV4Done( challenges: res.challenges, refresh, handle, - })); + })).catch(e => ({ handle, error: e })); } /** diff --git a/src/reducers/members.js b/src/reducers/members.js index 76c70d5..6355d77 100644 --- a/src/reducers/members.js +++ b/src/reducers/members.js @@ -289,10 +289,16 @@ function onGetActiveChallengesDone(state, { error, payload }) { * @return {Object} New state. */ function onGetSubtrackChallengesInit(state, { payload }) { - const { handle, uuid } = payload; + const { handle, uuid, pageNum } = payload; + return { ...state, - [handle]: { ...state[handle], loadingSubTrackChallengesUUID: uuid }, + [handle]: { + ...state[handle], + loadingSubTrackChallengesUUID: uuid, + subtrackChallengesHasMore: false, + ...(pageNum === 1 ? { subtrackChallenges: [] } : {}), + }, }; } @@ -303,18 +309,28 @@ function onGetSubtrackChallengesInit(state, { payload }) { * @return {Object} New state. */ function onGetSubtrackChallengesDone(state, { error, payload }) { - if (error) { - logger.error('Failed to get member subtrack challenges', payload); - fireErrorMessage('Failed to get member subtrack challenges', ''); - return state; - } - const { uuid, challenges, refresh, handle, + error: payloadError, } = payload; + + if (error || payloadError) { + logger.error('Failed to get member subtrack challenges', payload); + fireErrorMessage('Failed to get member subtrack challenges', ''); + + return { + ...state, + [handle]: { + ...state[handle], + subtrackChallengesHasMore: false, + loadingSubTrackChallengesUUID: '', + }, + }; + } + if (uuid !== state[handle].loadingSubTrackChallengesUUID) return state; return {