From 08d3b846c7718cb4232bdf88ffcde5abb64ac17c Mon Sep 17 00:00:00 2001
From: Tomasz Knapik <hi@tmkn.org>
Date: Wed, 9 Jan 2019 20:10:27 +0000
Subject: [PATCH] Show status on the list

---
 opentech/apply/funds/serializers.py           |  2 +-
 .../static_src/src/app/src/api/submissions.js |  4 +++-
 opentech/static_src/src/app/src/api/utils.js  |  4 +++-
 .../src/components/SubmissionsByRoundList.js  |  9 ++++++---
 .../components/SubmissionsByRoundListItem.js  | 17 ++++++++++++++++
 .../app/src/redux/selectors/submissions.js    | 20 ++++++++++++++-----
 6 files changed, 45 insertions(+), 11 deletions(-)
 create mode 100644 opentech/static_src/src/app/src/components/SubmissionsByRoundListItem.js

diff --git a/opentech/apply/funds/serializers.py b/opentech/apply/funds/serializers.py
index acaf39eb7..6275248cf 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 5b8f5b169..c51e1f568 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 0794fface..4a9db7711 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 581ae53ff..13fb62442 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 000000000..ecb3f91db
--- /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 37a267695..4b231e4e7 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;
     }
 );
 
-- 
GitLab