mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2025-07-28 04:33:42 +08:00
[resumes][feat] update submit page
This commit is contained in:
@ -14,6 +14,7 @@ import {
|
||||
CheckboxInput,
|
||||
Dialog,
|
||||
Select,
|
||||
Spinner,
|
||||
TextArea,
|
||||
TextInput,
|
||||
} from '@tih/ui';
|
||||
@ -74,6 +75,7 @@ export default function SubmitResumeForm({
|
||||
const [isDialogShown, setIsDialogShown] = useState(false);
|
||||
|
||||
const { data: session, status } = useSession();
|
||||
const isSessionLoading = status === 'loading';
|
||||
const router = useRouter();
|
||||
const trpcContext = trpc.useContext();
|
||||
const resumeUpsertMutation = trpc.useMutation('resumes.resume.user.upsert');
|
||||
@ -122,12 +124,12 @@ export default function SubmitResumeForm({
|
||||
|
||||
// Route user to sign in if not logged in
|
||||
useEffect(() => {
|
||||
if (status !== 'loading') {
|
||||
if (isSessionLoading) {
|
||||
if (session?.user?.id == null) {
|
||||
router.push('/api/auth/signin');
|
||||
}
|
||||
}
|
||||
}, [router, session, status]);
|
||||
}, [isSessionLoading, router, session]);
|
||||
|
||||
const onSubmit: SubmitHandler<IFormInput> = async (data) => {
|
||||
setIsLoading(true);
|
||||
@ -221,11 +223,17 @@ export default function SubmitResumeForm({
|
||||
}, [errors?.file, invalidFileUploadError]);
|
||||
|
||||
const onValueChange = (section: InputKeys, value: string) => {
|
||||
setValue(section, value.trim(), { shouldTouch: false });
|
||||
setValue(section, value.trim(), { shouldDirty: true });
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
{isSessionLoading && (
|
||||
<div className="w-full pt-4">
|
||||
{' '}
|
||||
<Spinner display="block" size="lg" />{' '}
|
||||
</div>
|
||||
)}
|
||||
<Head>
|
||||
<title>Upload a Resume</title>
|
||||
</Head>
|
||||
@ -268,12 +276,18 @@ export default function SubmitResumeForm({
|
||||
</h1>
|
||||
{/* Title Section */}
|
||||
<TextInput
|
||||
{...register('title', { required: true })}
|
||||
{...(register('title', { required: true }), {})}
|
||||
defaultValue={initFormDetails?.title}
|
||||
disabled={isLoading}
|
||||
errorMessage={
|
||||
errors.title?.message != null
|
||||
? 'Title cannot be empty'
|
||||
: undefined
|
||||
}
|
||||
label="Title"
|
||||
placeholder={TITLE_PLACEHOLDER}
|
||||
required={true}
|
||||
onChange={(val) => setValue('title', val)}
|
||||
onChange={(val) => onValueChange('title', val)}
|
||||
/>
|
||||
<div className="flex gap-8">
|
||||
<Select
|
||||
@ -364,7 +378,8 @@ export default function SubmitResumeForm({
|
||||
)}
|
||||
{/* Additional Info Section */}
|
||||
<TextArea
|
||||
{...(register('additionalInfo'), {})}
|
||||
{...(register('additionalInfo'),
|
||||
{ defaultValue: initFormDetails?.additionalInfo })}
|
||||
disabled={isLoading}
|
||||
label="Additional Information"
|
||||
placeholder={ADDITIONAL_INFO_PLACEHOLDER}
|
||||
|
Reference in New Issue
Block a user