From d46cf36b348749545af4bfb57710aff24f5934e4 Mon Sep 17 00:00:00 2001 From: Nursoltan Saipolda Date: Fri, 19 Jun 2020 15:23:52 +0800 Subject: [PATCH 1/2] fix my challenges page --- __tests__/__snapshots__/index.js.snap | 2 + src/actions/members.js | 26 ++++++++++ src/reducers/members.js | 39 +++++++++++++++ src/services/members.js | 71 +++++++++++++++++++++++++++ 4 files changed, 138 insertions(+) diff --git a/__tests__/__snapshots__/index.js.snap b/__tests__/__snapshots__/index.js.snap index 7bc989b4..f1c7c70a 100644 --- a/__tests__/__snapshots__/index.js.snap +++ b/__tests__/__snapshots__/index.js.snap @@ -111,6 +111,8 @@ Object { "getSubtrackChallengesInit": [Function], "getUserMarathonDone": [Function], "getUserMarathonInit": [Function], + "getUserResourcesDone": [Function], + "getUserResourcesInit": [Function], "getUserSrmDone": [Function], "getUserSrmInit": [Function], }, diff --git a/src/actions/members.js b/src/actions/members.js index ac7bd701..13a14fdb 100644 --- a/src/actions/members.js +++ b/src/actions/members.js @@ -357,6 +357,30 @@ async function getUserMarathonDone( })); } +/** + * @static + * @desc Create an action that fetch user registered challenge's resources. + * @param {String} memberId Member id. + * @param {String} uuid Operation UUID. + * @return {Action} + */ +async function getUserResourcesInit(memberId, uuid) { + return { memberId, uuid }; +} + +/** + * @static + * @desc Create an action that fetch user registered challenge's resources. + * @param {String} handle Member handle. + * @param {String} uuid Operation UUID. + * @return {Action} + */ +async function getUserResourcesDone(memberId, tokenV3, uuid) { + const resources = await getService(tokenV3).getUserResources(memberId); + + return { resources, uuid }; +} + export default createActions({ MEMBERS: { DROP: drop, @@ -380,5 +404,7 @@ export default createActions({ GET_USER_SRM_DONE: getUserSRMDone, GET_USER_MARATHON_INIT: getUserMarathonInit, GET_USER_MARATHON_DONE: getUserMarathonDone, + GET_USER_RESOURCES_INIT: getUserResourcesInit, + GET_USER_RESOURCES_DONE: getUserResourcesDone, }, }); diff --git a/src/reducers/members.js b/src/reducers/members.js index 23d0a08b..76c70d52 100644 --- a/src/reducers/members.js +++ b/src/reducers/members.js @@ -426,6 +426,43 @@ function onGetUserMarathonDone(state, { error, payload }) { }; } +/** + * Inits the loading of user challenge resources. + * @param {Object} state + * @param {Object} action + * @return {Object} New state. + */ +function onGetUserResourcesInit(state, { payload }) { + const { uuid } = payload; + return { + ...state, + userResources: { resources: [], loadingUserResources: uuid }, + }; +} + +/** + * Finalizes the loading of user challenge resources. + * @param {Object} state + * @param {Object} action + * @return {Object} New state. + */ +function onGetUserResourcesDone(state, { error, payload }) { + if (error) { + logger.error('Failed to get user resources', payload); + fireErrorMessage('Failed to get user resources', ''); + return state; + } + + const { uuid, resources } = payload; + + if (uuid !== state.userResources.loadingUserResources) return state; + + return { + ...state, + userResources: { resources, loadingUserResources: '' }, + }; +} + /** * Creates a new Members reducer with the specified initial state. * @param {Object} initialState Optional. Initial state. @@ -455,6 +492,8 @@ function create(initialState = {}) { [a.getUserSrmDone]: onGetUserSRMDone, [a.getUserMarathonInit]: onGetUserMarathonInit, [a.getUserMarathonDone]: onGetUserMarathonDone, + [a.getUserResourcesInit]: onGetUserResourcesInit, + [a.getUserResourcesDone]: onGetUserResourcesDone, }, initialState); } diff --git a/src/services/members.js b/src/services/members.js index 128a61f4..a1053553 100644 --- a/src/services/members.js +++ b/src/services/members.js @@ -21,6 +21,7 @@ class MembersService { constructor(tokenV3) { this.private = { api: getApi('V3', tokenV3), + apiV5: getApi('V5', tokenV3), tokenV3, }; } @@ -312,6 +313,76 @@ class MembersService { const res = await this.private.api.get(url); return getApiResponsePayload(res); } + + /** + * Fetch resources roles + * @param {Array} memberId the member id + */ + async getResourceRoles() { + const res = await this.private.apiV5.get('/resource-roles'); + const roles = await res.json(); + return roles; + } + + /** + * Fetch user challenge resources + * @param {Array} challengeId the challenge id + */ + async getChallengeResources(challengeId) { + const url = `/resources?challengeId=${challengeId}`; + let res = null; + + try { + res = await this.private.apiV5.get(url); + } catch (error) { + // logger.error('Failed to load challenge resource', error); + } + + return res.json(); + } + + /** + * Fetch user registered challenge's resources + * @param {Array} memberId the member id + */ + async getUserResources(memberId) { + const url = `/resources/${memberId}/challenges`; + const res = await this.private.apiV5.get(url); + const challenges = await res.json(); + const roles = await this.getResourceRoles(); + const calls = []; + + challenges.forEach(async (ch) => { + calls.push(this.getChallengeResources(ch)); + // try { + // const result = await this.private.apiV5.get(`/resources?challengeId=${ch}`); + // const resources = await result.json(); + // const userResource = _.find(resources, { memberId }); + // if (userResource) { + // const challengeRole = _.find(roles, { id: userResource.roleId }); + // const { name } = challengeRole || ''; + // console.log({ id: userResource.challengeId, name }); + // // results.push({ id: userResource.challengeId, name }); + // } + // } catch (error) { + // // logger.error('Failed to load challenge resource', error); + // } + }); + + return Promise.all(calls).then((resources) => { + const results = []; + resources.forEach((resource) => { + const userResource = _.find(resource, { memberId }); + if (userResource) { + const challengeRole = _.find(roles, { id: userResource.roleId }); + const { name } = challengeRole || ''; + results.push({ id: userResource.challengeId, name }); + } + }); + + return results; + }); + } } let lastInstance = null; From ea649b2822e0b1e5f842c2961931da6be57ed207 Mon Sep 17 00:00:00 2001 From: Nursoltan Saipolda Date: Fri, 19 Jun 2020 15:34:12 +0800 Subject: [PATCH 2/2] deleted comment --- src/services/members.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/services/members.js b/src/services/members.js index a1053553..7716c91d 100644 --- a/src/services/members.js +++ b/src/services/members.js @@ -354,19 +354,6 @@ class MembersService { challenges.forEach(async (ch) => { calls.push(this.getChallengeResources(ch)); - // try { - // const result = await this.private.apiV5.get(`/resources?challengeId=${ch}`); - // const resources = await result.json(); - // const userResource = _.find(resources, { memberId }); - // if (userResource) { - // const challengeRole = _.find(roles, { id: userResource.roleId }); - // const { name } = challengeRole || ''; - // console.log({ id: userResource.challengeId, name }); - // // results.push({ id: userResource.challengeId, name }); - // } - // } catch (error) { - // // logger.error('Failed to load challenge resource', error); - // } }); return Promise.all(calls).then((resources) => { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy