From 8f3f5f81e5f430aaa7233ab9517602bb93b2216d Mon Sep 17 00:00:00 2001 From: Huan Li Date: Fri, 30 Aug 2019 15:20:08 +0800 Subject: [PATCH] Build MM advanced submission view --- __tests__/__snapshots__/index.js.snap | 2 + .../reducers/__snapshots__/challenge.js.snap | 72 +++++++++++++++++++ docs/actions.challenge.md | 19 +++++ docs/index.md | 4 ++ docs/reducers.challenge.md | 30 +++++++- docs/services.submissions.md | 70 ++++++++++++++++++ src/actions/challenge.js | 27 +++++++ src/reducers/challenge.js | 43 +++++++++++ src/services/submissions.js | 12 ++++ 9 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 docs/services.submissions.md diff --git a/__tests__/__snapshots__/index.js.snap b/__tests__/__snapshots__/index.js.snap index d91b7880..f2f97d81 100644 --- a/__tests__/__snapshots__/index.js.snap +++ b/__tests__/__snapshots__/index.js.snap @@ -19,6 +19,8 @@ Object { "getDetailsInit": [Function], "getMmSubmissionsDone": [Function], "getMmSubmissionsInit": [Function], + "getSubmissionInformationDone": [Function], + "getSubmissionInformationInit": [Function], "getSubmissionsDone": [Function], "getSubmissionsInit": [Function], "loadResultsDone": [Function], diff --git a/__tests__/reducers/__snapshots__/challenge.js.snap b/__tests__/reducers/__snapshots__/challenge.js.snap index 7ddb822b..be090f1d 100644 --- a/__tests__/reducers/__snapshots__/challenge.js.snap +++ b/__tests__/reducers/__snapshots__/challenge.js.snap @@ -8,12 +8,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -31,12 +33,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -54,12 +58,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -74,12 +80,14 @@ Object { "loadingDetailsForChallengeId": "12345", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -97,6 +105,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -109,6 +118,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -126,6 +136,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -140,6 +151,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -157,6 +169,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -169,6 +182,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -186,6 +200,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "12345", "mmSubmissions": Array [], "mySubmissions": Object { @@ -196,6 +211,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -214,6 +230,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -226,6 +243,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -243,6 +261,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -257,6 +276,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -274,6 +294,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -288,6 +309,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -305,6 +327,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -319,6 +342,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -336,6 +360,7 @@ Object { "loadingDetailsForChallengeId": "12345", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -350,6 +375,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -367,6 +393,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -379,6 +406,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -396,6 +424,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -410,6 +439,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -427,6 +457,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -439,6 +470,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -456,6 +488,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "12345", "mmSubmissions": Array [], "mySubmissions": Object { @@ -466,6 +499,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -484,6 +518,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -496,6 +531,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -509,12 +545,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -532,12 +570,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -555,12 +595,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -575,12 +617,14 @@ Object { "loadingDetailsForChallengeId": "12345", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -598,6 +642,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -610,6 +655,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -627,6 +673,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -641,6 +688,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -658,6 +706,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -670,6 +719,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -687,6 +737,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "12345", "mmSubmissions": Array [], "mySubmissions": Object { @@ -697,6 +748,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -715,6 +767,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -727,6 +780,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -740,12 +794,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -763,12 +819,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -786,12 +844,14 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -806,12 +866,14 @@ Object { "loadingDetailsForChallengeId": "12345", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "mmSubmissions": Array [], "mySubmissions": Object {}, "mySubmissionsManagement": Object {}, "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -829,6 +891,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -841,6 +904,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -858,6 +922,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -872,6 +937,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -889,6 +955,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -901,6 +968,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -918,6 +986,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "12345", "mmSubmissions": Array [], "mySubmissions": Object { @@ -928,6 +997,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } @@ -946,6 +1016,7 @@ Object { "loadingDetailsForChallengeId": "", "loadingMMSubmissionsForChallengeId": "", "loadingResultsForChallengeId": "", + "loadingSubmissionInformationForSubmissionId": "", "loadingSubmissionsForChallengeId": "", "mmSubmissions": Array [], "mySubmissions": Object { @@ -958,6 +1029,7 @@ Object { "registering": false, "results": null, "resultsLoadedForChallengeId": "", + "submissionInformation": null, "unregistering": false, "updatingChallengeUuid": "", } diff --git a/docs/actions.challenge.md b/docs/actions.challenge.md index 23d16fb5..33057927 100644 --- a/docs/actions.challenge.md +++ b/docs/actions.challenge.md @@ -24,6 +24,8 @@ Actions related to Topcoder challenges APIs. * [.updateChallengeDone(uuid, challenge, tokenV3)](#module_actions.challenge.updateChallengeDone) ⇒ Action * [.getActiveChallengesCountInit()](#module_actions.challenge.getActiveChallengesCountInit) ⇒ Action * [.getActiveChallengesCountDone(handle, tokenV3)](#module_actions.challenge.getActiveChallengesCountDone) ⇒ Action + * [.getSubmissionInformationInit(submissionId)](#module_actions.challenge.getSubmissionInformationInit) ⇒ Action + * [.getSubmissionInformationDone(submissionId, tokenV3)](#module_actions.challenge.getSubmissionInformationDone) ⇒ Action @@ -246,3 +248,20 @@ Creates an action that gets count of user's active challenges from the backend. | handle | String | Topcoder user handle. | | tokenV3 | String | Optional. Topcoder auth token v3. Without token only public challenges will be counted. With the token provided, the action will also count private challenges related to this user. | + + +### actions.challenge.getSubmissionInformationInit(submissionId) ⇒ Action +Creates an action that signals beginning of getting submission information + +**Kind**: static method of [actions.challenge](#module_actions.challenge) + + +### actions.challenge.getSubmissionInformationDone(submissionId, tokenV3) ⇒ Action +Creates an action that gets submission information from the backend. + +**Kind**: static method of [actions.challenge](#module_actions.challenge) + +| Param | Type | Description | +| --- | --- | --- | +| submissionId | String | The id of submission | +| tokenV3 | String | Topcoder auth token v3. | diff --git a/docs/index.md b/docs/index.md index ec065107..649a1fae 100644 --- a/docs/index.md +++ b/docs/index.md @@ -202,6 +202,10 @@ Currently, we use it to save user-defined filters in the challenge search.

accounts.

+services.submissions
+

The Submissions service provides functionality related to Topcoder submissions

+
+
challenge.filter

Universal challenge filter. Must be used in all places where we need filter or fetch challenges. This way we keep all related logic in the same place, diff --git a/docs/reducers.challenge.md b/docs/reducers.challenge.md index d2f2bd0e..1e0d54d0 100644 --- a/docs/reducers.challenge.md +++ b/docs/reducers.challenge.md @@ -27,6 +27,8 @@ State segment managed by this reducer has the following strcuture: * [~onUpdateChallengeInit(state, actions)](#module_reducers.challenge..onUpdateChallengeInit) ⇒ Object * [~onUpdateChallengeDone(state, actions)](#module_reducers.challenge..onUpdateChallengeDone) ⇒ Object * [~onGetActiveChallengesCountDone(state, action)](#module_reducers.challenge..onGetActiveChallengesCountDone) ⇒ Object + * [~onGetSubmissionInformationInit(state, action)](#module_reducers.challenge..onGetSubmissionInformationInit) ⇒ Object + * [~onGetSubmissionInformationDone(state, action)](#module_reducers.challenge..onGetSubmissionInformationDone) ⇒ Object * [~create(initialState)](#module_reducers.challenge..create) ⇒ function @@ -198,7 +200,7 @@ Handles CHALLENGE/UPDATE_CHALLENGE_DONE. ### reducers.challenge~onGetActiveChallengesCountDone(state, action) ⇒ Object Handles CHALLENGE/GET_ACTIVE_CHALLENGES_COUNT_DONE action. -**Kind**: inner method of [reducers.challenge](#module_reducers.challenge) +**Kind**: inner method of [reducers.challenge](#module_reducers.challenge) **Returns**: Object - New state | Param | Type | Description | @@ -206,6 +208,32 @@ Handles CHALLENGE/GET_ACTIVE_CHALLENGES_COUNT_DONE action. | state | Object | Old state. | | action | Object | Action payload/error | + + +### reducers.challenge~onGetSubmissionInformationInit(state, action) ⇒ Object +Handles CHALLENGE/GET_SUBMISSION_INFORMATION_INIT action. + +**Kind**: inner method of [reducers.challenge](#module_reducers.challenge) +**Returns**: Object - New state + +| Param | Type | +| --- | --- | +| state | Object | +| action | Object | + + + +### reducers.challenge~onGetSubmissionInformationDone(state, action) ⇒ Object +Handles CHALLENGE/GET_SUBMISSION_INFORMATION_DONE action. + +**Kind**: inner method of [reducers.challenge](#module_reducers.challenge) +**Returns**: Object - New state. + +| Param | Type | +| --- | --- | +| state | Object | +| action | Object | + ### reducers.challenge~create(initialState) ⇒ function diff --git a/docs/services.submissions.md b/docs/services.submissions.md new file mode 100644 index 00000000..104f5eed --- /dev/null +++ b/docs/services.submissions.md @@ -0,0 +1,70 @@ + + +## services.submissions +This module provides a service to get submissions data from Topcoder +via API V5. + + +* [services.submissions](#module_services.submissions) + * _static_ + * [.getService(tokenV3)](#module_services.submissions.getService) ⇒ SubmissionsService + * _inner_ + * [~SubmissionsService](#module_services.submissions..SubmissionsService) + * [new SubmissionsService(tokenV3)](#new_module_services.submissions..SubmissionsService_new) + * [.getSubmissions(filters, params)](#module_services.submissions..SubmissionsService+getSubmissions) ⇒ Promise + * [.getSubmissionInformation(submissionId)](#module_services.submissions..SubmissionsService+getSubmissionInformation) ⇒ Promise + + + +### services.submissions.getService(tokenV3) ⇒ SubmissionsService +Returns a new or existing submissions service. + +**Kind**: static method of [services.submissions](#module_services.submissions) +**Returns**: SubmissionsService - Submissions service object + +| Param | Type | Description | +| --- | --- | --- | +| tokenV3 | String | Optional. Auth token for Topcoder API v5. | + + + +### services.submissions~SubmissionsService +**Kind**: inner class of [services.submissions](#module_services.submissions) + +* [~SubmissionsService](#module_services.submissions..SubmissionsService) + * [new SubmissionsService(tokenV3)](#new_module_services.submissions..SubmissionsService_new) + * [.getSubmissions(filters, params)](#module_services.submissions..SubmissionsService+getSubmissions) ⇒ Promise + * [.getSubmissionInformation(submissionId)](#module_services.submissions..SubmissionsService+getSubmissionInformation) ⇒ Promise + + + +#### new SubmissionsService(tokenV3) + +| Param | Type | Description | +| --- | --- | --- | +| tokenV3 | String | Optional. Auth token for Topcoder API v5. | + + + +#### submissionsService.getSubmissions(filters, params) ⇒ Promise +Gets submissions. + +**Kind**: instance method of [SubmissionsService](#module_services.submissions..SubmissionsService) +**Returns**: Promise - Resolves to the submissions. + +| Param | Type | Description | +| --- | --- | --- | +| filters | Object | Filters | +| params | Object | Parameters | + + + +#### submissionsService.getSubmissionInformation(submissionId) ⇒ Promise +Gets submission information. + +**Kind**: instance method of [SubmissionsService](#module_services.submissions..SubmissionsService) +**Returns**: Promise - Resolves to the submission information. + +| Param | Type | Description | +| --- | --- | --- | +| submissionId | String | The id of submission | diff --git a/src/actions/challenge.js b/src/actions/challenge.js index 063a0187..cd134a2b 100644 --- a/src/actions/challenge.js +++ b/src/actions/challenge.js @@ -364,6 +364,31 @@ function getActiveChallengesCountDone(handle, tokenV3) { return getChallengesService(tokenV3).getActiveChallengesCount(handle); } +/** + * @static + * @desc Creates an action that gets submission information by submission id + * @param {String} submissionId The submission id + * @return {Action} + */ +function getSubmissionInformationInit(submissionId) { + return _.toString(submissionId); +} + +/** + * @static + * @desc Creates an action that gets submission information from the backend. + * @param {String} submissionId The submission id + * @param {String} tokenV3 Topcoder auth token v3. + * @return {Action} + */ +function getSubmissionInformationDone(submissionId, tokenV3) { + return getSubmissionService(tokenV3) + .getSubmissionInformation(submissionId) + .then(response => ({ + submissionId, submission: response, + })); +} + export default createActions({ CHALLENGE: { DROP_CHECKPOINTS: dropCheckpoints, @@ -387,5 +412,7 @@ export default createActions({ GET_ACTIVE_CHALLENGES_COUNT_DONE: getActiveChallengesCountDone, GET_MM_SUBMISSIONS_INIT: getMMSubmissionsInit, GET_MM_SUBMISSIONS_DONE: getMMSubmissionsDone, + GET_SUBMISSION_INFORMATION_INIT: getSubmissionInformationInit, + GET_SUBMISSION_INFORMATION_DONE: getSubmissionInformationDone, }, }); diff --git a/src/reducers/challenge.js b/src/reducers/challenge.js index 2d5b47c9..11ff0ef1 100644 --- a/src/reducers/challenge.js +++ b/src/reducers/challenge.js @@ -318,6 +318,45 @@ function onGetActiveChallengesCountDone(state, { payload, error }) { return ({ ...state, activeChallengesCount: payload }); } +/** + * Handles CHALLENGE/GET_SUBMISSION_INFORMATION_INIT action. + * @param {Object} state + * @param {Object} action + * @return {Object} New state. + */ +function onGetSubmissionInformationInit(state, action) { + return { + ...state, + loadingSubmissionInformationForSubmissionId: action.payload, + submissionInformation: null, + }; +} + +/** + * Handles CHALLENGE/GET_SUBMISSION_INFORMATION_DONE action. + * @param {Object} state Previous state. + * @param {Object} action Action. + */ +function onGetSubmissionInformationDone(state, action) { + if (action.error) { + logger.error('Failed to get submission information', action.payload); + return { + ...state, + loadingSubmissionInformationForSubmissionId: '', + submissionInformation: null, + }; + } + + const { submissionId, submission } = action.payload; + if (submissionId !== state.loadingSubmissionInformationForSubmissionId) return state; + + return { + ...state, + loadingSubmissionInformationForSubmissionId: '', + submissionInformation: submission, + }; +} + /** * Creates a new Challenge reducer with the specified initial state. * @param {Object} initialState Optional. Initial state. @@ -359,12 +398,15 @@ function create(initialState) { [a.updateChallengeDone]: onUpdateChallengeDone, [a.getActiveChallengesCountInit]: state => state, [a.getActiveChallengesCountDone]: onGetActiveChallengesCountDone, + [a.getSubmissionInformationInit]: onGetSubmissionInformationInit, + [a.getSubmissionInformationDone]: onGetSubmissionInformationDone, }, _.defaults(initialState, { details: null, loadingCheckpoints: false, loadingDetailsForChallengeId: '', loadingResultsForChallengeId: '', loadingMMSubmissionsForChallengeId: '', + loadingSubmissionInformationForSubmissionId: '', mySubmissions: {}, checkpoints: null, registering: false, @@ -373,6 +415,7 @@ function create(initialState) { unregistering: false, updatingChallengeUuid: '', mmSubmissions: [], + submissionInformation: null, })); } diff --git a/src/services/submissions.js b/src/services/submissions.js index 6de0e6c2..439afb3b 100644 --- a/src/services/submissions.js +++ b/src/services/submissions.js @@ -38,6 +38,18 @@ class SubmissionsService { .then(res => (res.ok ? res.json() : new Error(res.statusText))) .then(res => res); } + + /** + * Get submission information by submission id + * @param submissionId The submission id + * @returns {Promise} Resolves to the api response. + */ + async getSubmissionInformation(submissionId) { + const url = `/submissions/${submissionId}`; + return this.private.apiV5.get(url) + .then(res => (res.ok ? res.json() : new Error(res.statusText))) + .then(res => res); + } } let lastInstance = null;