diff --git a/src/components/InterviwerForm.tsx b/src/components/InterviwerForm.tsx index 18a15b4..cfb2613 100644 --- a/src/components/InterviwerForm.tsx +++ b/src/components/InterviwerForm.tsx @@ -49,7 +49,7 @@ type FormState = { name: string; email: string; sid: string; - + phone: string; availableDays: string[]; responses: Record< @@ -63,6 +63,7 @@ const initialForm: FormState = { email: "", sid: "", availableDays: [], + phone:"", responses: createEmptyResponses(), }; @@ -201,6 +202,9 @@ export default function InterviewerForm() { const sid = form.sid.trim(); + const phone = + form.phone.trim(); + const availableDays = form.availableDays; @@ -212,6 +216,7 @@ export default function InterviewerForm() { !name || !email || !sid || + !phone|| availableDays.length === 0 ) { @@ -253,6 +258,17 @@ export default function InterviewerForm() { return; } + if ( + !/^\d{10}$/.test( + phone + ) + ) { + setError( + "phone number is invalid." + ); + + return; + } /* * Check questions @@ -313,6 +329,7 @@ export default function InterviewerForm() { name, sid, email, + phone, availableDays, trimmedResponses ); @@ -362,6 +379,11 @@ export default function InterviewerForm() { .applicant .sid || "", + phone: + result + .applicant + .phone || + "", availableDays: result @@ -416,6 +438,9 @@ export default function InterviewerForm() { const sid = form.sid.trim(); + const phone = + form.phone.trim(); + const availableDays = form.availableDays; @@ -427,6 +452,7 @@ export default function InterviewerForm() { !name || !email || !sid || + !phone || availableDays.length === 0 ) { @@ -469,6 +495,22 @@ export default function InterviewerForm() { return; } + /* + * Phone validation + */ + + if ( + !/^\d{10}$/.test( + phone + ) + ) { + setError( + "phone number is invalid." + ); + + return; + } + setSavingPersonalInfo( true ); @@ -480,6 +522,7 @@ export default function InterviewerForm() { name, email, sid, + phone, availableDays ); @@ -530,6 +573,12 @@ export default function InterviewerForm() { .applicant .sid, + phone: + result + .applicant + .phone || + "", + availableDays: result .applicant @@ -711,6 +760,43 @@ export default function InterviewerForm() { className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-60" /> + +
+ + + + updateField( + "phone", + event.target.value.replace( + /\D/g, + "" + ) + ) + } + placeholder="10-digit phone number" + className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-60" + /> +
{/* Available days */} @@ -961,6 +1047,40 @@ export default function InterviewerForm() { className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none" /> + +
+ + + + updateField( + "phone", + event.target.value.replace( + /\D/g, + "" + ) + ) + } + placeholder="10-digit phone number" + className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none" + /> +
{/* Available days */} diff --git a/src/lib/supabase/actions/interviewers.actions.ts b/src/lib/supabase/actions/interviewers.actions.ts index f88d2ce..c76a150 100644 --- a/src/lib/supabase/actions/interviewers.actions.ts +++ b/src/lib/supabase/actions/interviewers.actions.ts @@ -54,13 +54,13 @@ const appsScriptRequest = if (isServer) { const appsScriptUrl = process.env - .GOOGLE_APPS_SCRIPT_URL; + .INT_GOOGLE_APPS_SCRIPT_URL; if ( !appsScriptUrl ) { throw new Error( - "GOOGLE_APPS_SCRIPT_URL is not configured." + "INT_GOOGLE_APPS_SCRIPT_URL is not configured." ); } @@ -159,6 +159,10 @@ const mapInterviewer = String( item.sid || "" ), + phone: + String( + item.phone || "" + ), availableDays: Array.isArray( @@ -255,6 +259,7 @@ export const createInterviewer = name: string, sid: string, email: string, + phone: string, availableDays: string[], responses: Record< string, @@ -279,6 +284,9 @@ export const createInterviewer = email: email.trim(), + phone: + phone.trim(), + availableDays: availableDays, @@ -373,6 +381,7 @@ export const updateInterviewerPersonalInfo = name: string, email: string, sid: string, + phone: string, availableDays: string[] ): Promise< UpdateInterviewerResult @@ -395,6 +404,9 @@ export const updateInterviewerPersonalInfo = sid: sid.trim(), + phone: + phone.trim(), + availableDays: availableDays, } diff --git a/src/pages/api/interviewer.ts b/src/pages/api/interviewer.ts index 6e05dce..08f67e4 100644 --- a/src/pages/api/interviewer.ts +++ b/src/pages/api/interviewer.ts @@ -9,7 +9,7 @@ export default async function handler( } try { - const scriptUrl = process.env.GOOGLE_APPS_SCRIPT_URL; + const scriptUrl = process.env.INT_GOOGLE_APPS_SCRIPT_URL; if (!scriptUrl) { console.error("Missing GOOGLE_APPS_SCRIPT_URL in environment"); diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 2ac05d2..212b95a 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -192,6 +192,7 @@ export type InterviewerType = { name: string; email: string; sid: string; + phone: string; availableDays: string[]; responses: Record; status: