[resumes][refactor] clean up submit form

pull/378/head
Keane Chan 3 years ago
parent 18a2e4b3e4
commit 426ff74971
No known key found for this signature in database
GPG Key ID: 32718398E1E9F87C

@ -0,0 +1,30 @@
export default function SubmissionGuidelines() {
return (
<div className="mb-4 text-left text-sm text-slate-700">
<h2 className="mb-2 text-xl font-medium">Submission Guidelines</h2>
<p>
Before you submit, please review and acknolwedge our
<span className="font-bold"> submission guidelines </span>
stated below.
</p>
<p>
<span className="text-lg font-bold"> </span>
Ensure that you do not divulge any of your
<span className="font-bold"> personal particulars</span>.
</p>
<p>
<span className="text-lg font-bold"> </span>
Ensure that you do not divulge any
<span className="font-bold">
{' '}
company's proprietary and confidential information
</span>
.
</p>
<p>
<span className="text-lg font-bold"> </span>
Proof-read your resumes to look for grammatical/spelling errors.
</p>
</div>
);
}

@ -18,11 +18,13 @@ import {
TextInput, TextInput,
} from '@tih/ui'; } from '@tih/ui';
import type { FilterOption } from '~/components/resumes/browse/resumeConstants';
import { import {
EXPERIENCE, EXPERIENCE,
LOCATION, LOCATION,
ROLE, ROLE,
} from '~/components/resumes/browse/resumeConstants'; } from '~/components/resumes/browse/resumeConstants';
import SubmissionGuidelines from '~/components/resumes/submit-form/SubmissionGuidelines';
import { RESUME_STORAGE_KEY } from '~/constants/file-storage-keys'; import { RESUME_STORAGE_KEY } from '~/constants/file-storage-keys';
import { trpc } from '~/utils/trpc'; import { trpc } from '~/utils/trpc';
@ -45,6 +47,19 @@ type IFormInput = {
title: string; title: string;
}; };
type SelectorType = 'experience' | 'location' | 'role';
type SelectorOptions = {
key: SelectorType;
label: string;
options: Array<FilterOption>;
};
const selectors: Array<SelectorOptions> = [
{ key: 'role', label: 'Role', options: ROLE },
{ key: 'experience', label: 'Experience Level', options: EXPERIENCE },
{ key: 'location', label: 'Location', options: LOCATION },
];
export default function SubmitResumeForm() { export default function SubmitResumeForm() {
const { data: session, status } = useSession(); const { data: session, status } = useSession();
const router = useRouter(); const router = useRouter();
@ -125,13 +140,13 @@ export default function SubmitResumeForm() {
url, url,
}, },
{ {
onError: (error) => { onError(error) {
console.error(error); console.error(error);
}, },
onSettled: () => { onSettled() {
setIsLoading(false); setIsLoading(false);
}, },
onSuccess: () => { onSuccess() {
router.push('/resumes/browse'); router.push('/resumes/browse');
}, },
}, },
@ -191,6 +206,7 @@ export default function SubmitResumeForm() {
<section <section
aria-labelledby="primary-heading" aria-labelledby="primary-heading"
className="flex h-full min-w-0 flex-1 flex-col lg:order-last"> className="flex h-full min-w-0 flex-1 flex-col lg:order-last">
{/* Reset Dialog component */}
<Dialog <Dialog
isShown={isDialogShown} isShown={isDialogShown}
primaryButton={ primaryButton={
@ -216,6 +232,7 @@ export default function SubmitResumeForm() {
<div className="mx-20 space-y-4 py-8"> <div className="mx-20 space-y-4 py-8">
<form onSubmit={handleSubmit(onSubmit)}> <form onSubmit={handleSubmit(onSubmit)}>
<h1 className="mb-4 text-2xl font-bold">Upload a resume</h1> <h1 className="mb-4 text-2xl font-bold">Upload a resume</h1>
{/* Title Section */}
<div className="mb-4"> <div className="mb-4">
<TextInput <TextInput
{...register('title', { required: true })} {...register('title', { required: true })}
@ -226,37 +243,20 @@ export default function SubmitResumeForm() {
onChange={(val) => setValue('title', val)} onChange={(val) => setValue('title', val)}
/> />
</div> </div>
<div className="mb-4"> {/* Selectors */}
<Select {selectors.map((item) => (
{...register('role', { required: true })} <div key={item.key} className="mb-4">
disabled={isLoading}
label="Role"
options={ROLE}
required={true}
onChange={(val) => setValue('role', val)}
/>
</div>
<div className="mb-4">
<Select <Select
{...register('experience', { required: true })} {...register(item.key, { required: true })}
disabled={isLoading} disabled={isLoading}
label="Experience Level" label={item.label}
options={EXPERIENCE} options={item.options}
required={true} required={true}
onChange={(val) => setValue('experience', val)} onChange={(val) => setValue(item.key, val)}
/>
</div>
<div className="mb-4">
<Select
{...register('location', { required: true })}
disabled={isLoading}
label="Location"
name="location"
options={LOCATION}
required={true}
onChange={(val) => setValue('location', val)}
/> />
</div> </div>
))}
{/* Upload Resume Section */}
<p className="text-sm font-medium text-slate-700"> <p className="text-sm font-medium text-slate-700">
Upload resume (PDF format) Upload resume (PDF format)
<span aria-hidden="true" className="text-danger-500"> <span aria-hidden="true" className="text-danger-500">
@ -264,6 +264,7 @@ export default function SubmitResumeForm() {
* *
</span> </span>
</p> </p>
{/* Upload Resume Box */}
<div className="mb-4"> <div className="mb-4">
<div <div
{...getRootProps()} {...getRootProps()}
@ -320,6 +321,7 @@ export default function SubmitResumeForm() {
<p className="text-danger-600 text-sm">{fileUploadError}</p> <p className="text-danger-600 text-sm">{fileUploadError}</p>
)} )}
</div> </div>
{/* Additional Info Section */}
<div className="mb-8"> <div className="mb-8">
<TextArea <TextArea
{...register('additionalInfo')} {...register('additionalInfo')}
@ -329,58 +331,28 @@ export default function SubmitResumeForm() {
onChange={(val) => setValue('additionalInfo', val)} onChange={(val) => setValue('additionalInfo', val)}
/> />
</div> </div>
<div className="mb-4 text-left text-sm text-slate-700"> {/* Submission Guidelines */}
<h2 className="mb-2 text-xl font-medium"> <SubmissionGuidelines />
Submission Guidelines
</h2>
<p>
Before you submit, please review and acknolwedge our
<span className="font-bold"> submission guidelines </span>
stated below.
</p>
<p>
<span className="text-lg font-bold"> </span>
Ensure that you do not divulge any of your
<span className="font-bold"> personal particulars</span>.
</p>
<p>
<span className="text-lg font-bold"> </span>
Ensure that you do not divulge any
<span className="font-bold">
{' '}
company's proprietary and confidential information
</span>
.
</p>
<p>
<span className="text-lg font-bold"> </span>
Proof-read your resumes to look for grammatical/spelling
errors.
</p>
</div>
<CheckboxInput <CheckboxInput
{...register('isChecked', { required: true })} {...register('isChecked', { required: true })}
disabled={isLoading} disabled={isLoading}
label="I have read and will follow the guidelines stated." label="I have read and will follow the guidelines stated."
onChange={(val) => setValue('isChecked', val)} onChange={(val) => setValue('isChecked', val)}
/> />
{/* Clear and Submit Buttons */}
<div className="mt-4 flex justify-end gap-4"> <div className="mt-4 flex justify-end gap-4">
<Button <Button
addonPosition="start" addonPosition="start"
disabled={isLoading} disabled={isLoading}
display="inline"
label="Clear" label="Clear"
size="md"
variant="tertiary" variant="tertiary"
onClick={onClickClear} onClick={onClickClear}
/> />
<Button <Button
addonPosition="start" addonPosition="start"
disabled={isLoading} disabled={isLoading}
display="inline"
isLoading={isLoading} isLoading={isLoading}
label="Submit" label="Submit"
size="md"
type="submit" type="submit"
variant="primary" variant="primary"
/> />

Loading…
Cancel
Save