Skip to content

Commit 06d6f91

Browse files
Merge pull request #359 from topcoder-platform/PROD-1998_work-solutions-badge-count
PROD-1998 - Add the Count of Solutions Badge to Work Detail Nav
2 parents 27247ec + 6c6f151 commit 06d6f91

File tree

5 files changed

+76
-4
lines changed

5 files changed

+76
-4
lines changed

src/actions/work.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ export const getSolutions = (workId) => {
3131
};
3232
};
3333

34+
export const getSolutionsCount = (workId) => {
35+
return {
36+
type: ACTIONS.WORK.GET_SOLUTIONS_COUNT,
37+
payload: workService.getSolutionsCount(workId),
38+
};
39+
};
40+
3441
export const downloadSolution = (solutionId) => {
3542
return {
3643
type: ACTIONS.WORK.DOWNLOAD_SOLUTION,

src/constants/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,10 @@ export const ACTIONS = {
466466
GET_SOLUTIONS_PENDING: "GET_SOLUTIONS_PENDING",
467467
GET_SOLUTIONS_SUCCESS: "GET_SOLUTIONS_SUCCESS",
468468
GET_SOLUTIONS_ERROR: "GET_SOLUTIONS_ERROR",
469+
GET_SOLUTIONS_COUNT: "GET_SOLUTIONS_COUNT",
470+
GET_SOLUTIONS_COUNT_PENDING: "GET_SOLUTIONS_COUNT_PENDING",
471+
GET_SOLUTIONS_COUNT_SUCCESS: "GET_SOLUTIONS_COUNT_SUCCESS",
472+
GET_SOLUTIONS_COUNT_ERROR: "GET_SOLUTIONS_COUNT_ERROR",
469473
DOWNLOAD_SOLUTION: "DOWNLOAD_SOLUTION",
470474
DOWNLOAD_SOLUTION_PENDING: "DOWNLOAD_SOLUTION_PENDING",
471475
DOWNLOAD_SOLUTION_SUCCESS: "DOWNLOAD_SOLUTION_SUCCESS",

src/reducers/work.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,31 @@ const workReducer = (state = initialState, action) => {
7676
isLoadingSolutions: false,
7777
error: action.payload,
7878
};
79+
case ACTIONS.WORK.GET_SOLUTIONS_COUNT_PENDING:
80+
return {
81+
...state,
82+
isLoadingSolutions: true,
83+
error: null,
84+
workItem: {
85+
...state.workItem,
86+
solutionsCount: undefined,
87+
},
88+
};
89+
case ACTIONS.WORK.GET_SOLUTIONS_COUNT_SUCCESS:
90+
return {
91+
...state,
92+
isLoadingSolutions: false,
93+
workItem: {
94+
...state.workItem,
95+
solutionsCount: action.payload,
96+
},
97+
};
98+
case ACTIONS.WORK.GET_SOLUTIONS_COUNT_ERROR:
99+
return {
100+
...state,
101+
isLoadingSolutions: false,
102+
error: action.payload,
103+
};
79104
case ACTIONS.WORK.SAVE_SURVEY_SUCCESS:
80105
return {
81106
...state,

src/routes/WorkItems/index.jsx

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
getSummary,
1616
getDetails,
1717
getSolutions,
18+
getSolutionsCount,
1819
downloadSolution,
1920
saveSurvey,
2021
setIsSavingSurveyDone,
@@ -53,6 +54,7 @@ const WorkItem = ({
5354
getSummary,
5455
getDetails,
5556
getSolutions,
57+
getSolutionsCount,
5658
downloadSolution,
5759
saveSurvey,
5860
setIsSavingSurveyDone,
@@ -70,7 +72,7 @@ const WorkItem = ({
7072
getWork(workItemId);
7173
}, [workItemId, getWork]);
7274

73-
const { summary, details, solutions } = useMemo(() => workItem, [workItem]);
75+
const { summary, details, solutions, solutionsCount } = useMemo(() => workItem, [workItem]);
7476

7577
const isReviewPhaseEnded = useMemo(() => {
7678
if (work) {
@@ -119,12 +121,22 @@ const WorkItem = ({
119121
if (!work) {
120122
return;
121123
}
122-
124+
123125
if (work || selectedTab === "messaging") {
124126
getForumNotifications(work.id);
125127
}
126128
}, [work, selectedTab, getForumNotifications]);
127129

130+
useEffect(() => {
131+
if (!work) {
132+
return;
133+
}
134+
135+
if (isReviewPhaseEnded) {
136+
getSolutionsCount(work.id);
137+
}
138+
}, [isReviewPhaseEnded, getSolutionsCount, work])
139+
128140
useEffect(() => {
129141
if (isSavingSurveyDone) {
130142
getSummary(work);
@@ -161,8 +173,17 @@ const WorkItem = ({
161173
}
162174
].filter(Boolean)
163175
},
164-
{ id: 'solutions', title: 'Solutions' },
165-
].filter(Boolean), [work]);
176+
{
177+
id: 'solutions',
178+
title: 'Solutions',
179+
badges: [
180+
isReviewPhaseEnded && {
181+
count: solutionsCount,
182+
type: 'info'
183+
}
184+
].filter(Boolean)
185+
},
186+
].filter(Boolean), [work, solutionsCount, isReviewPhaseEnded]);
166187

167188
function saveFeedback(updatedCustomerFeedback) {
168189

@@ -292,6 +313,7 @@ const mapDispatchToProps = {
292313
getSummary,
293314
getDetails,
294315
getSolutions,
316+
getSolutionsCount,
295317
downloadSolution,
296318
saveSurvey,
297319
setIsSavingSurveyDone,

src/services/work.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,19 @@ export const getDetails = (work) => {
127127
return formData;
128128
};
129129

130+
export const getSolutionsCount = async (workId) => {
131+
const response = await axios.get(
132+
`${config.API.V5}/submissions?challengeId=${workId}&perPage=500`
133+
);
134+
const submissions = response.data;
135+
return submissions.length;
136+
137+
// const response = await axios.head(
138+
// `${config.API.V5}/submissions?challengeId=${workId}`
139+
// );
140+
// return parseInt(_.get(response.headers, 'X-Total'), 10);
141+
};
142+
130143
export const getSolutions = async (workId) => {
131144
const challenge = await getChallengeDetails(workId);
132145
if (!challenge?.winners || challenge?.winners?.length === 0) return [];
@@ -184,6 +197,7 @@ export default {
184197
getSummary,
185198
getDetails,
186199
getSolutions,
200+
getSolutionsCount,
187201
downloadSolution,
188202
saveSurvey,
189203
};

0 commit comments

Comments
 (0)