From 3ce6417fd05f2ca70f035f10664bc7cdc9522627 Mon Sep 17 00:00:00 2001 From: Keane Chan <e0425601@u.nus.edu> Date: Thu, 13 Oct 2022 21:50:49 +0800 Subject: [PATCH] [resumes][feat] re-route to sign in page on submit for review, dialog on clearing submit form (#371) * [resumes][feat] re-route to sign in page on submit for review * [resumes][feat] add dialog on clearing submit form --- apps/portal/src/pages/resumes/submit.tsx | 53 ++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/apps/portal/src/pages/resumes/submit.tsx b/apps/portal/src/pages/resumes/submit.tsx index 79c1fc9b..4a77bbf8 100644 --- a/apps/portal/src/pages/resumes/submit.tsx +++ b/apps/portal/src/pages/resumes/submit.tsx @@ -2,11 +2,19 @@ import axios from 'axios'; import clsx from 'clsx'; import Head from 'next/head'; import { useRouter } from 'next/router'; -import { useMemo, useState } from 'react'; +import { useSession } from 'next-auth/react'; +import { useEffect, useMemo, useState } from 'react'; import type { SubmitHandler } from 'react-hook-form'; import { useForm } from 'react-hook-form'; import { PaperClipIcon } from '@heroicons/react/24/outline'; -import { Button, CheckboxInput, Select, TextArea, TextInput } from '@tih/ui'; +import { + Button, + CheckboxInput, + Dialog, + Select, + TextArea, + TextInput, +} from '@tih/ui'; import { EXPERIENCE, @@ -36,6 +44,7 @@ type IFormInput = { }; export default function SubmitResumeForm() { + const { data: session, status } = useSession(); const resumeCreateMutation = trpc.useMutation('resumes.resume.user.create'); const router = useRouter(); @@ -44,13 +53,22 @@ export default function SubmitResumeForm() { const [invalidFileUploadError, setInvalidFileUploadError] = useState< string | null >(null); + const [isDialogShown, setIsDialogShown] = useState(false); + + useEffect(() => { + if (status !== 'loading') { + if (session?.user?.id == null) { + router.push('/api/auth/signin'); + } + } + }, [router, session, status]); const { register, handleSubmit, setValue, reset, - formState: { errors }, + formState: { errors, isDirty }, } = useForm<IFormInput>({ defaultValues: { isChecked: false, @@ -112,6 +130,13 @@ export default function SubmitResumeForm() { }; const onClickReset = () => { + if (isDirty || resumeFile != null) { + setIsDialogShown(true); + } + }; + + const onClickProceedDialog = () => { + setIsDialogShown(false); reset(); setResumeFile(null); }; @@ -134,6 +159,28 @@ export default function SubmitResumeForm() { <section aria-labelledby="primary-heading" className="flex h-full min-w-0 flex-1 flex-col lg:order-last"> + <Dialog + isShown={isDialogShown} + primaryButton={ + <Button + display="block" + label="OK" + variant="primary" + onClick={onClickProceedDialog} + /> + } + secondaryButton={ + <Button + display="block" + label="Cancel" + variant="tertiary" + onClick={() => setIsDialogShown(false)} + /> + } + title="Are you sure you want to clear?" + onClose={() => setIsDialogShown(false)}> + Note that your current input will not be saved! + </Dialog> <div className="mx-20 space-y-4 py-8"> <form onSubmit={handleSubmit(onSubmit)}> <h1 className="mb-4 text-2xl font-bold">Upload a resume</h1>