Keane/update-submit-form (#338)

* [resumes][fix] add isLoading effect on submit form

* [resumes][fix] remove useeffect on browse page
pull/340/head
Keane Chan 2 years ago committed by GitHub
parent 90f8556f8c
commit c3c3dfceb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,7 +2,7 @@ import clsx from 'clsx';
import Head from 'next/head'; import Head from 'next/head';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { useSession } from 'next-auth/react'; import { useSession } from 'next-auth/react';
import { Fragment, useEffect, useState } from 'react'; import { Fragment, useState } from 'react';
import { Disclosure, Menu, Transition } from '@headlessui/react'; import { Disclosure, Menu, Transition } from '@headlessui/react';
import { import {
ChevronDownIcon, ChevronDownIcon,
@ -22,6 +22,7 @@ import {
TOP_HITS, TOP_HITS,
} from '~/components/resumes/browse/constants'; } from '~/components/resumes/browse/constants';
import FilterPill from '~/components/resumes/browse/FilterPill'; import FilterPill from '~/components/resumes/browse/FilterPill';
import ResumeReviewsTitle from '~/components/resumes/ResumeReviewsTitle';
import type { Resume } from '~/types/resume'; import type { Resume } from '~/types/resume';
@ -42,12 +43,11 @@ const filters = [
options: LOCATION, options: LOCATION,
}, },
]; ];
import ResumeReviewsTitle from '~/components/resumes/ResumeReviewsTitle';
import { trpc } from '~/utils/trpc'; import { trpc } from '~/utils/trpc';
export default function ResumeHomePage() { export default function ResumeHomePage() {
const { data } = useSession(); const { data: sessionData } = useSession();
const router = useRouter(); const router = useRouter();
const [tabsValue, setTabsValue] = useState(BROWSE_TABS_VALUES.ALL); const [tabsValue, setTabsValue] = useState(BROWSE_TABS_VALUES.ALL);
const [searchValue, setSearchValue] = useState(''); const [searchValue, setSearchValue] = useState('');
@ -55,41 +55,25 @@ export default function ResumeHomePage() {
const allResumesQuery = trpc.useQuery(['resumes.resume.all'], { const allResumesQuery = trpc.useQuery(['resumes.resume.all'], {
enabled: tabsValue === BROWSE_TABS_VALUES.ALL, enabled: tabsValue === BROWSE_TABS_VALUES.ALL,
onSuccess: (data) => {
setResumes(data);
},
}); });
const starredResumesQuery = trpc.useQuery(['resumes.resume.browse.stars'], { const starredResumesQuery = trpc.useQuery(['resumes.resume.browse.stars'], {
enabled: tabsValue === BROWSE_TABS_VALUES.STARRED, enabled: tabsValue === BROWSE_TABS_VALUES.STARRED,
onSuccess: (data) => {
setResumes(data);
},
}); });
const myResumesQuery = trpc.useQuery(['resumes.resume.browse.my'], { const myResumesQuery = trpc.useQuery(['resumes.resume.browse.my'], {
enabled: tabsValue === BROWSE_TABS_VALUES.MY, enabled: tabsValue === BROWSE_TABS_VALUES.MY,
onSuccess: (data) => {
setResumes(data);
},
}); });
useEffect(() => {
switch (tabsValue) {
case BROWSE_TABS_VALUES.ALL: {
setResumes(allResumesQuery.data ?? []);
break;
}
case BROWSE_TABS_VALUES.STARRED: {
setResumes(starredResumesQuery.data ?? []);
break;
}
case BROWSE_TABS_VALUES.MY: {
setResumes(myResumesQuery.data ?? []);
break;
}
default: {
setResumes([]);
}
}
}, [
allResumesQuery.data,
starredResumesQuery.data,
myResumesQuery.data,
tabsValue,
]);
const onClickNew = () => { const onClickNew = () => {
if (data?.user?.id) { if (sessionData?.user?.id) {
router.push('/resumes/submit'); router.push('/resumes/submit');
} else { } else {
// TODO: Handle non-logged in user behaviour // TODO: Handle non-logged in user behaviour

@ -40,6 +40,7 @@ export default function SubmitResumeForm() {
const router = useRouter(); const router = useRouter();
const [resumeFile, setResumeFile] = useState<File | null>(); const [resumeFile, setResumeFile] = useState<File | null>();
const [isLoading, setIsLoading] = useState(false);
const [invalidFileUploadError, setInvalidFileUploadError] = useState< const [invalidFileUploadError, setInvalidFileUploadError] = useState<
string | null string | null
>(null); >(null);
@ -50,12 +51,18 @@ export default function SubmitResumeForm() {
setValue, setValue,
reset, reset,
formState: { errors }, formState: { errors },
} = useForm<IFormInput>(); } = useForm<IFormInput>({
defaultValues: {
isChecked: false,
},
});
const onSubmit: SubmitHandler<IFormInput> = async (data) => { const onSubmit: SubmitHandler<IFormInput> = async (data) => {
if (resumeFile == null) { if (resumeFile == null) {
console.error('Resume file is empty');
return; return;
} }
setIsLoading(true);
const formData = new FormData(); const formData = new FormData();
formData.append('key', RESUME_STORAGE_KEY); formData.append('key', RESUME_STORAGE_KEY);
@ -68,15 +75,27 @@ export default function SubmitResumeForm() {
}); });
const { url } = res.data; const { url } = res.data;
await resumeCreateMutation.mutate({ resumeCreateMutation.mutate(
{
additionalInfo: data.additionalInfo, additionalInfo: data.additionalInfo,
experience: data.experience, experience: data.experience,
location: data.location, location: data.location,
role: data.role, role: data.role,
title: data.title, title: data.title,
url, url,
}); },
{
onError: (error) => {
console.error(error);
},
onSettled: () => {
setIsLoading(false);
},
onSuccess: () => {
router.push('/resumes'); router.push('/resumes');
},
},
);
}; };
const onUploadFile = (event: React.ChangeEvent<HTMLInputElement>) => { const onUploadFile = (event: React.ChangeEvent<HTMLInputElement>) => {
@ -255,6 +274,7 @@ export default function SubmitResumeForm() {
<Button <Button
addonPosition="start" addonPosition="start"
display="inline" display="inline"
isLoading={isLoading}
label="Submit" label="Submit"
size="md" size="md"
type="submit" type="submit"

Loading…
Cancel
Save