diff --git a/src/pages/events/[id].tsx b/src/pages/events/[id].tsx index 082f721..408a4bb 100644 --- a/src/pages/events/[id].tsx +++ b/src/pages/events/[id].tsx @@ -4,38 +4,27 @@ import Head from "next/head"; import { useRouter } from "next/router"; import Event from "@models/Event"; import EventApi from "@api/eventApi"; -import useFetchEvents from "@hooks/useFetchEvents"; import EventPageView from "@views/EventPage/EventPageView"; import PageWrapper from "@views/common/PageWrapper"; import LoadingView from "@views/common/LoadingView"; -import NotFoundPage from "@pages/404"; interface InitialProps { - initialEvent: Event; + event: Event; } -const EventPage: NextPage = ({ initialEvent }) => { +const EventPage: NextPage = ({ event }) => { const router = useRouter(); const { id } = router.query; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { data, error } = useFetchEvents({ initialData: initialEvent, id: id as string }); - if (router.isFallback) return ; - if (!data) { - return ( - - ); - } - return ( <> - + ); @@ -58,17 +47,17 @@ export const getStaticPaths: GetStaticPaths = async () => { export const getStaticProps: GetStaticProps = async ({ params }) => { const { id } = params; let notFound = false; - let initialEvent: Event; + let event: Event; try { - initialEvent = await EventApi.getEvent(Number(id)); + event = await EventApi.getEvent(Number(id)); } catch (err) { notFound = true; } return { props: { - initialEvent, + event, }, - revalidate: 10, + revalidate: 10, // Required for deleting hidden pages notFound, }; }; diff --git a/src/pages/feed/[id].tsx b/src/pages/feed/[id].tsx index 1b42300..b791266 100644 --- a/src/pages/feed/[id].tsx +++ b/src/pages/feed/[id].tsx @@ -4,38 +4,27 @@ import Head from "next/head"; import { useRouter } from "next/router"; import Post from "@models/Feed"; import FeedApi from "@api/feedApi"; -import useFetchFeed from "@hooks/useFetchFeed"; import FeedPageView from "@views/FeedPage/FeedPageView"; import PageWrapper from "@views/common/PageWrapper"; import LoadingView from "@views/common/LoadingView"; -import NotFoundPage from "@pages/404"; interface InitialProps { - initialPost: Post; + post: Post; } -const FeedPage: NextPage = ({ initialPost }) => { +const FeedPage: NextPage = ({ post }) => { const router = useRouter(); const { id } = router.query; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { data, error } = useFetchFeed({ initialData: initialPost, id: id as string }); - if (router.isFallback) return ; - if (!data) { - return ( - - ); - } - return ( <> - + ); @@ -58,18 +47,18 @@ export const getStaticPaths: GetStaticPaths = async () => { export const getStaticProps: GetStaticProps = async ({ params }) => { const { id } = params; let notFound = false; - let initialPost: Post; + let post: Post; try { - initialPost = await FeedApi.getPost(Number(id)); + post = await FeedApi.getPost(Number(id)); } catch (err) { notFound = true; } return { props: { - initialPost, + post, }, - revalidate: 10, + revalidate: 10, // Required for deleting hidden pages notFound, }; }; diff --git a/src/pages/signup/[id].tsx b/src/pages/signup/[id].tsx index ac9070c..13cd647 100644 --- a/src/pages/signup/[id].tsx +++ b/src/pages/signup/[id].tsx @@ -2,7 +2,10 @@ import React from "react"; import { NextPage, GetStaticProps, GetStaticPaths } from "next"; import Head from "next/head"; import { useRouter } from "next/router"; +import { ISubmitEvent } from "react-jsonschema-form"; import { toast } from "react-toastify"; +import axios from "axios"; +import useSWR, { mutate } from "swr"; import { Signup, SignupForm } from "@models/Signup"; import SignupApi from "@api/signupApi"; import SignUpPageView from "@views/SignUpPage/SignUpPageView"; @@ -12,34 +15,44 @@ import noop from "@utils/noop"; import NotFoundPage from "@pages/404"; type InitialProps = { - form: SignupForm; + initialForm: SignupForm; }; -const SignUpPage: NextPage = ({ form }) => { - const router = useRouter(); +const FORM_URL = `${process.env.NEXT_PUBLIC_API_URL}/signupForm/`; - if (router.isFallback) { +const SignUpPage: NextPage = ({ initialForm }) => { + const router = useRouter(); + const id = String(initialForm?.id ?? ""); + const URL = `${FORM_URL}${id}/`; + const { data, error } = useSWR(URL, (url) => axios.get(url).then((res) => res.data), { initialData: initialForm }); + + if (error) { + console.error(error); + } + + // TODO: Shows LoadingView on client-side fetch error. Maybe something else preferred? + if (router.isFallback || error) { return ; } - if (!form) { + if (!data) { return ( ); } - const onSubmit = async (data) => { + const onSubmit = async ({ formData }: ISubmitEvent) => { const payload: Signup = { - signupForm_id: form.id, - answer: data.formData, + signupForm_id: data.id, + answer: formData, }; try { await SignupApi.createSignup(payload); toast.success("Sign-up submitted successfully 😎"); - router.push(window.location.href); // TODO: Fetch/update signup list, so user sees the signup in the list - } catch (error) { - console.error(error); + mutate(URL); + } catch (err) { + console.error(err); toast.error("Uh oh! Sign-up failed! 😟"); } }; @@ -47,11 +60,11 @@ const SignUpPage: NextPage = ({ form }) => { return ( <> - + { export const getStaticProps: GetStaticProps = async ({ params }) => { const { id } = params; let notFound = false; - let form: SignupForm; + let initialForm: SignupForm; try { - form = await SignupApi.getForm(Number(id)); + initialForm = await SignupApi.getForm(Number(id)); } catch { notFound = true; } return { props: { - form, + initialForm, }, - revalidate: 10, + revalidate: 10, // Required for deleting hidden pages notFound, }; }; diff --git a/src/pages/signup/edit/[id]/[uuid].tsx b/src/pages/signup/edit/[id]/[uuid].tsx index 3b150a0..88a4d93 100644 --- a/src/pages/signup/edit/[id]/[uuid].tsx +++ b/src/pages/signup/edit/[id]/[uuid].tsx @@ -60,7 +60,6 @@ const EditSignUpPage: NextPage = () => { try { await SignupApi.updateSignup(payload, uuid); - // TODO: Update signup list, so user sees possible changes in the list toast.success("Sign-up updated successfully 😎"); } catch (error) { console.error(error); diff --git a/src/views/SignUpPage/SignUpPageView.tsx b/src/views/SignUpPage/SignUpPageView.tsx index f40e9ae..70f3de2 100644 --- a/src/views/SignUpPage/SignUpPageView.tsx +++ b/src/views/SignUpPage/SignUpPageView.tsx @@ -76,7 +76,7 @@ const SignUpPageView: React.FC = ({
{t("Ilmoittautuneet")} {signUpForm.quota > 0 && (` (${signUpForm.signups.length}/${signUpForm.quota})`)}:
-
    +
      {signUpForm.signups.map((s, idx) => (
    1. signUpForm.quota ? "reserved" : ""}>{s}
    2. ))} diff --git a/tests/testcafe/signupToEvent.test.ts b/tests/testcafe/signupToEvent.test.ts index 0099b90..e447d89 100644 --- a/tests/testcafe/signupToEvent.test.ts +++ b/tests/testcafe/signupToEvent.test.ts @@ -58,4 +58,6 @@ test("User signups to event from front page", async (t) => { .expect( statusMessage.innerText, ).eql("Sign-up submitted successfully 😎"); + + await t.expect(Selector("[data-e2e=\"signup-list\"] > li").nth(0).innerText).eql("Testi Testeri"); });