diff --git a/src/pages/admin/signups/[id]/list.tsx b/src/pages/admin/signups/[id]/list.tsx
index a3723dc..d3c005b 100644
--- a/src/pages/admin/signups/[id]/list.tsx
+++ b/src/pages/admin/signups/[id]/list.tsx
@@ -26,13 +26,19 @@ const SignupEmailPage: NextPage = () => {
const { id } = router.query;
useEffect(() => {
- const formId = Number(id);
- SignupApi.getForm(formId, true)
- .then((res) => setSignupForm(res));
-
- SignupApi.getSignups(formId).then((res) => setSignups(res));
+ const formId = id && Number(id);
+ if (formId !== undefined && !Number.isNaN(formId)) {
+ SignupApi.getForm(formId, true).then((res) => {
+ setSignupForm(res);
+ });
+ SignupApi.getSignups(formId).then((res) => {
+ setSignups(res);
+ });
+ }
}, [id]);
+ const title = signupForm ? signupForm.title_fi : "Loading...";
+
const confirmDelete = async (signup: Signup, question: any) => {
if (window.confirm(`Delete: ${signup.id}: ${signup.answer[question.id]}; Are you sure?`) === true) {
try {
@@ -45,27 +51,25 @@ const SignupEmailPage: NextPage = () => {
}
};
- const title = signupForm ? signupForm.title_fi : "Loading...";
+ const renderData = () => {
+ if (!signupForm || !signups || signups.length === 0) {
+ return
No signups.
;
+ }
- // TODO: ATM we filter 'info' questions from table here. Maybe remove them from answer JSON altogether?
- const questions = signupForm ? signupForm.questions.filter((q) => q.type !== "info").map((q) => ({
- title: q.title_fi,
- id: q.id,
- })) : [];
+ // TODO: ATM we filter 'info' questions from table here. Maybe remove them from answer JSON altogether?
+ const questions = signupForm ? signupForm.questions.filter((q) => q.type !== "info").map((q) => ({
+ title: q.title_fi,
+ id: q.id,
+ })) : [];
- // Generate 2-dimensional array where rows are signups and columns are answers to questions.
- const CSVData = signups.map((s) => questions.map((q) => s.answer[q.id]));
- // Add reserve signup "header"
- if (signupForm?.quota) {
- CSVData.splice(signupForm.quota, 0, ["RESERVE-SIGNUPS"]);
- }
+ // Generate 2-dimensional array where rows are signups and columns are answers to questions.
+ const CSVData = signups.map((s) => questions.map((q) => s.answer[q.id]));
+ // Add reserve signup "header"
+ if (signupForm?.quota) {
+ CSVData.splice(signupForm.quota, 0, ["RESERVE-SIGNUPS"]);
+ }
- return (
-
-
- {title}
- : Sign-ups
-
+ return (
@@ -81,7 +85,6 @@ const SignupEmailPage: NextPage = () => {
-
{signups.map((s) => (
@@ -99,6 +102,16 @@ const SignupEmailPage: NextPage = () => {
))}
+ );
+ };
+
+ return (
+
+
+ {title}
+ : Sign-ups
+
+ {renderData()}
);
};