Skip to content

Commit d46cf36

Browse files
committed
fix my challenges page
1 parent bd5d00d commit d46cf36

File tree

4 files changed

+138
-0
lines changed

4 files changed

+138
-0
lines changed

__tests__/__snapshots__/index.js.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ Object {
111111
"getSubtrackChallengesInit": [Function],
112112
"getUserMarathonDone": [Function],
113113
"getUserMarathonInit": [Function],
114+
"getUserResourcesDone": [Function],
115+
"getUserResourcesInit": [Function],
114116
"getUserSrmDone": [Function],
115117
"getUserSrmInit": [Function],
116118
},

src/actions/members.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,30 @@ async function getUserMarathonDone(
357357
}));
358358
}
359359

360+
/**
361+
* @static
362+
* @desc Create an action that fetch user registered challenge's resources.
363+
* @param {String} memberId Member id.
364+
* @param {String} uuid Operation UUID.
365+
* @return {Action}
366+
*/
367+
async function getUserResourcesInit(memberId, uuid) {
368+
return { memberId, uuid };
369+
}
370+
371+
/**
372+
* @static
373+
* @desc Create an action that fetch user registered challenge's resources.
374+
* @param {String} handle Member handle.
375+
* @param {String} uuid Operation UUID.
376+
* @return {Action}
377+
*/
378+
async function getUserResourcesDone(memberId, tokenV3, uuid) {
379+
const resources = await getService(tokenV3).getUserResources(memberId);
380+
381+
return { resources, uuid };
382+
}
383+
360384
export default createActions({
361385
MEMBERS: {
362386
DROP: drop,
@@ -380,5 +404,7 @@ export default createActions({
380404
GET_USER_SRM_DONE: getUserSRMDone,
381405
GET_USER_MARATHON_INIT: getUserMarathonInit,
382406
GET_USER_MARATHON_DONE: getUserMarathonDone,
407+
GET_USER_RESOURCES_INIT: getUserResourcesInit,
408+
GET_USER_RESOURCES_DONE: getUserResourcesDone,
383409
},
384410
});

src/reducers/members.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,43 @@ function onGetUserMarathonDone(state, { error, payload }) {
426426
};
427427
}
428428

429+
/**
430+
* Inits the loading of user challenge resources.
431+
* @param {Object} state
432+
* @param {Object} action
433+
* @return {Object} New state.
434+
*/
435+
function onGetUserResourcesInit(state, { payload }) {
436+
const { uuid } = payload;
437+
return {
438+
...state,
439+
userResources: { resources: [], loadingUserResources: uuid },
440+
};
441+
}
442+
443+
/**
444+
* Finalizes the loading of user challenge resources.
445+
* @param {Object} state
446+
* @param {Object} action
447+
* @return {Object} New state.
448+
*/
449+
function onGetUserResourcesDone(state, { error, payload }) {
450+
if (error) {
451+
logger.error('Failed to get user resources', payload);
452+
fireErrorMessage('Failed to get user resources', '');
453+
return state;
454+
}
455+
456+
const { uuid, resources } = payload;
457+
458+
if (uuid !== state.userResources.loadingUserResources) return state;
459+
460+
return {
461+
...state,
462+
userResources: { resources, loadingUserResources: '' },
463+
};
464+
}
465+
429466
/**
430467
* Creates a new Members reducer with the specified initial state.
431468
* @param {Object} initialState Optional. Initial state.
@@ -455,6 +492,8 @@ function create(initialState = {}) {
455492
[a.getUserSrmDone]: onGetUserSRMDone,
456493
[a.getUserMarathonInit]: onGetUserMarathonInit,
457494
[a.getUserMarathonDone]: onGetUserMarathonDone,
495+
[a.getUserResourcesInit]: onGetUserResourcesInit,
496+
[a.getUserResourcesDone]: onGetUserResourcesDone,
458497
}, initialState);
459498
}
460499

src/services/members.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class MembersService {
2121
constructor(tokenV3) {
2222
this.private = {
2323
api: getApi('V3', tokenV3),
24+
apiV5: getApi('V5', tokenV3),
2425
tokenV3,
2526
};
2627
}
@@ -312,6 +313,76 @@ class MembersService {
312313
const res = await this.private.api.get(url);
313314
return getApiResponsePayload(res);
314315
}
316+
317+
/**
318+
* Fetch resources roles
319+
* @param {Array} memberId the member id
320+
*/
321+
async getResourceRoles() {
322+
const res = await this.private.apiV5.get('/resource-roles');
323+
const roles = await res.json();
324+
return roles;
325+
}
326+
327+
/**
328+
* Fetch user challenge resources
329+
* @param {Array} challengeId the challenge id
330+
*/
331+
async getChallengeResources(challengeId) {
332+
const url = `/resources?challengeId=${challengeId}`;
333+
let res = null;
334+
335+
try {
336+
res = await this.private.apiV5.get(url);
337+
} catch (error) {
338+
// logger.error('Failed to load challenge resource', error);
339+
}
340+
341+
return res.json();
342+
}
343+
344+
/**
345+
* Fetch user registered challenge's resources
346+
* @param {Array} memberId the member id
347+
*/
348+
async getUserResources(memberId) {
349+
const url = `/resources/${memberId}/challenges`;
350+
const res = await this.private.apiV5.get(url);
351+
const challenges = await res.json();
352+
const roles = await this.getResourceRoles();
353+
const calls = [];
354+
355+
challenges.forEach(async (ch) => {
356+
calls.push(this.getChallengeResources(ch));
357+
// try {
358+
// const result = await this.private.apiV5.get(`/resources?challengeId=${ch}`);
359+
// const resources = await result.json();
360+
// const userResource = _.find(resources, { memberId });
361+
// if (userResource) {
362+
// const challengeRole = _.find(roles, { id: userResource.roleId });
363+
// const { name } = challengeRole || '';
364+
// console.log({ id: userResource.challengeId, name });
365+
// // results.push({ id: userResource.challengeId, name });
366+
// }
367+
// } catch (error) {
368+
// // logger.error('Failed to load challenge resource', error);
369+
// }
370+
});
371+
372+
return Promise.all(calls).then((resources) => {
373+
const results = [];
374+
resources.forEach((resource) => {
375+
const userResource = _.find(resource, { memberId });
376+
if (userResource) {
377+
const challengeRole = _.find(roles, { id: userResource.roleId });
378+
const { name } = challengeRole || '';
379+
results.push({ id: userResource.challengeId, name });
380+
}
381+
});
382+
383+
return results;
384+
});
385+
}
315386
}
316387

317388
let lastInstance = null;

0 commit comments

Comments
 (0)