diff --git a/opentech/apply/funds/serializers.py b/opentech/apply/funds/serializers.py index acaf39eb7ade84a0165cd27055bf380cb1f4a50c..6275248cfc21d4ed822560759e8c014628d9cdda 100644 --- a/opentech/apply/funds/serializers.py +++ b/opentech/apply/funds/serializers.py @@ -6,7 +6,7 @@ from .models import ApplicationSubmission class SubmissionListSerializer(serializers.ModelSerializer): class Meta: model = ApplicationSubmission - fields = ('id',) + fields = ('id', 'title', 'status') class SubmissionDetailSerializer(serializers.ModelSerializer): diff --git a/opentech/static_src/src/app/src/api/submissions.js b/opentech/static_src/src/app/src/api/submissions.js index 5b8f5b169b5b3566d48a18c578ce1b49269e9666..c51e1f56899d6434b3de462f45bc9f7e188fadc1 100644 --- a/opentech/static_src/src/app/src/api/submissions.js +++ b/opentech/static_src/src/app/src/api/submissions.js @@ -1,5 +1,7 @@ import { apiFetch } from '@api/utils'; export async function fetchSubmissionsByRound(id) { - return apiFetch('/apply/api/submissions/'); + return apiFetch('/apply/api/submissions/', 'GET', { + 'round': id, + }); } diff --git a/opentech/static_src/src/app/src/api/utils.js b/opentech/static_src/src/app/src/api/utils.js index 0794fface85515f4e25b933401a3959f19bb95d9..4a9db77111385255ec60fe033f5d85cf66bb445b 100644 --- a/opentech/static_src/src/app/src/api/utils.js +++ b/opentech/static_src/src/app/src/api/utils.js @@ -7,7 +7,9 @@ export async function apiFetch(path, method = 'GET', params, options) { url.pathname = path; if (params !== undefined) { - url.searchParams = new URLSearchParams(params); + for (const [paramKey, paramValue] of Object.entries(params)) { + url.searchParams.set(paramKey, paramValue); + } } return fetch(url, { diff --git a/opentech/static_src/src/app/src/components/SubmissionsByRoundList.js b/opentech/static_src/src/app/src/components/SubmissionsByRoundList.js index 581ae53fffee2f7b044e66ac385b60552ed6e278..13fb624426c35cb0201626e4f8c4939117614e30 100644 --- a/opentech/static_src/src/app/src/components/SubmissionsByRoundList.js +++ b/opentech/static_src/src/app/src/components/SubmissionsByRoundList.js @@ -1,16 +1,19 @@ import React from 'react'; import SubmissionsByRoundListHeading from '@components/SubmissionsByRoundListHeading'; +import SubmissionsByRoundListItem from '@components/SubmissionsByRoundListItem'; export default class SubmissionsByRoundList extends React.Component { renderListItems() { return this.props.items.map(v => { - const applications = []; + const submissions = v.submissions.map(v => { + return <SubmissionsByRoundListItem key={`submission-${v.id}`} title={v.title} />; + }); return ( <> - <SubmissionsByRoundListHeading key="status-{v.title}" title={v.title} count={v.applications.length} /> + <SubmissionsByRoundListHeading key="status-{v.title}" title={v.title} count={v.submissions.length} /> <ul> - {applications} + {submissions} </ul> </> ); diff --git a/opentech/static_src/src/app/src/components/SubmissionsByRoundListItem.js b/opentech/static_src/src/app/src/components/SubmissionsByRoundListItem.js new file mode 100644 index 0000000000000000000000000000000000000000..ecb3f91db304b0e77243cfea628292c0048ac10c --- /dev/null +++ b/opentech/static_src/src/app/src/components/SubmissionsByRoundListItem.js @@ -0,0 +1,17 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + + +export default class SubmissionsByRoundListItem extends React.Component { + render() { + return ( + <li> + <a>{this.props.title}</a> + </li> + ); + } +} + +SubmissionsByRoundListItem.propTypes = { + title: PropTypes.string, +}; diff --git a/opentech/static_src/src/app/src/redux/selectors/submissions.js b/opentech/static_src/src/app/src/redux/selectors/submissions.js index 37a267695a1cef9d864901e3311648a4090ad1fd..4b231e4e7ba140598e751db407d5855b91f5fcce 100644 --- a/opentech/static_src/src/app/src/redux/selectors/submissions.js +++ b/opentech/static_src/src/app/src/redux/selectors/submissions.js @@ -12,11 +12,21 @@ const getCurrentRoundSubmissions = createSelector( const getCurrentRoundSubmissionsByStatus = createSelector( [getCurrentRoundSubmissions] , currentRoundSubmissions => { - const submissionsByStatus = [{ - title: 'Test stage', - applications: currentRoundSubmissions, - }]; - return submissionsByStatus; + const submissionsByStatus = {}; + for (const submission of currentRoundSubmissions) { + if (!(submission.status in submissionsByStatus)) { + submissionsByStatus[submission.status] = []; + } + submissionsByStatus[submission.status].push(submission); + } + const formattedSubmissionsByStatus = []; + for (const [submissionStatus, statusSubmissions] of Object.entries(submissionsByStatus)) { + formattedSubmissionsByStatus.push({ + title: submissionStatus, + submissions: statusSubmissions, + }); + } + return formattedSubmissionsByStatus; } );