diff --git a/apps/portal/src/components/offers/offersSubmission/submissionForm/BackgroundForm.tsx b/apps/portal/src/components/offers/offersSubmission/submissionForm/BackgroundForm.tsx index 07696d77..63e0148b 100644 --- a/apps/portal/src/components/offers/offersSubmission/submissionForm/BackgroundForm.tsx +++ b/apps/portal/src/components/offers/offersSubmission/submissionForm/BackgroundForm.tsx @@ -9,7 +9,6 @@ import { Currency, CURRENCY_OPTIONS, } from '~/utils/offers/currency/CurrencyEnum'; -import { validateNumber } from '~/utils/offers/form'; import { EducationFieldOptions } from '../../EducationFields'; import { EducationLevelOptions } from '../../EducationLevels'; @@ -35,11 +34,10 @@ function YoeSection() { label="Total YOE" placeholder="0" required={true} - type="text" + type="number" {...register(`background.totalYoe`, { min: { message: FieldError.NON_NEGATIVE_NUMBER, value: 0 }, required: FieldError.REQUIRED, - validate: validateNumber, valueAsNumber: true, })} /> @@ -50,10 +48,9 @@ function YoeSection() { @@ -67,10 +64,9 @@ function YoeSection() { @@ -123,10 +119,9 @@ function FullTimeJobFields() { placeholder="0.00" startAddOn="$" startAddOnType="label" - type="text" + type="number" {...register(`background.experiences.0.totalCompensation.value`, { min: { message: FieldError.NON_NEGATIVE_NUMBER, value: 0 }, - validate: validateNumber, valueAsNumber: true, })} /> @@ -147,10 +142,9 @@ function FullTimeJobFields() { @@ -194,10 +188,9 @@ function InternshipJobFields() { placeholder="0.00" startAddOn="$" startAddOnType="label" - type="text" + type="number" {...register(`background.experiences.0.monthlySalary.value`, { min: { message: FieldError.NON_NEGATIVE_NUMBER, value: 0 }, - validate: validateNumber, valueAsNumber: true, })} /> @@ -212,10 +205,9 @@ function InternshipJobFields() { diff --git a/apps/portal/src/components/offers/offersSubmission/submissionForm/OfferDetailsForm.tsx b/apps/portal/src/components/offers/offersSubmission/submissionForm/OfferDetailsForm.tsx index c9a26670..9b24c5e6 100644 --- a/apps/portal/src/components/offers/offersSubmission/submissionForm/OfferDetailsForm.tsx +++ b/apps/portal/src/components/offers/offersSubmission/submissionForm/OfferDetailsForm.tsx @@ -13,8 +13,6 @@ import { TrashIcon } from '@heroicons/react/24/outline'; import { JobType } from '@prisma/client'; import { Button, Dialog, HorizontalDivider } from '@tih/ui'; -import { validateNumber } from '~/utils/offers/form'; - import { defaultFullTimeOfferValues, defaultInternshipOfferValues, @@ -158,13 +156,12 @@ function FullTimeOfferDetailsForm({ required={true} startAddOn="$" startAddOnType="label" - type="text" + type="number" {...register( `offers.${index}.offersFullTime.totalCompensation.value`, { min: { message: FieldError.NON_NEGATIVE_NUMBER, value: 0 }, required: FieldError.REQUIRED, - validate: validateNumber, valueAsNumber: true, }, )} @@ -192,10 +189,9 @@ function FullTimeOfferDetailsForm({ placeholder="0" startAddOn="$" startAddOnType="label" - type="text" + type="number" {...register(`offers.${index}.offersFullTime.baseSalary.value`, { min: { message: FieldError.NON_NEGATIVE_NUMBER, value: 0 }, - validate: validateNumber, valueAsNumber: true, })} /> @@ -216,10 +212,9 @@ function FullTimeOfferDetailsForm({ placeholder="0" startAddOn="$" startAddOnType="label" - type="text" + type="number" {...register(`offers.${index}.offersFullTime.bonus.value`, { min: { message: FieldError.NON_NEGATIVE_NUMBER, value: 0 }, - validate: validateNumber, valueAsNumber: true, })} /> @@ -240,10 +235,9 @@ function FullTimeOfferDetailsForm({ placeholder="0" startAddOn="$" startAddOnType="label" - type="text" + type="number" {...register(`offers.${index}.offersFullTime.stocks.value`, { min: { message: FieldError.NON_NEGATIVE_NUMBER, value: 0 }, - validate: validateNumber, valueAsNumber: true, })} /> @@ -400,11 +394,10 @@ function InternshipOfferDetailsForm({ required={true} startAddOn="$" startAddOnType="label" - type="text" + type="number" {...register(`offers.${index}.offersIntern.monthlySalary.value`, { min: { message: FieldError.NON_NEGATIVE_NUMBER, value: 0 }, required: FieldError.REQUIRED, - validate: validateNumber, valueAsNumber: true, })} /> diff --git a/apps/portal/src/utils/offers/form.tsx b/apps/portal/src/utils/offers/form.tsx index 52ee4deb..ac03e281 100644 --- a/apps/portal/src/utils/offers/form.tsx +++ b/apps/portal/src/utils/offers/form.tsx @@ -1,9 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { Validate } from 'react-hook-form'; - -import { FieldError } from '~/components/offers/constants'; - /** * Removes empty objects, empty strings, `null`, `undefined`, and `NaN` values from an object. * Does not remove empty arrays. @@ -89,16 +85,3 @@ export function removeInvalidMoneyData(object: any) { }); return object; } - -/** - * Validation rule for numbers. - * @param value - * @returns `true` if value is a number, otherwise error message. - */ -export const validateNumber: Validate = (value) => { - // Checks for NaN value, as the value passed in by the form is already converted to number pre-validation. - if (value !== value) { - return FieldError.NUMBER; - } - return true; -};