[offers][fix] Fix offer submission form ()

* [offers][fix] Fix breadcrumbs alignment

* [offers][fix] Fix field array
pull/373/head
Ai Ling 2 years ago committed by GitHub
parent f179c4ef1f
commit 9595aabccf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,7 +7,7 @@ export function Breadcrumbs({ stepLabels, currentStep }: BreadcrumbsProps) {
return (
<div className="flex space-x-1">
{stepLabels.map((label, index) => (
<div key={label}>
<div key={label} className="flex space-x-1">
{index === currentStep ? (
<p className="text-sm text-purple-700">{label}</p>
) : (

@ -7,6 +7,11 @@ import { PlusIcon } from '@heroicons/react/20/solid';
import { TrashIcon } from '@heroicons/react/24/outline';
import { Button, Dialog } from '@tih/ui';
import {
defaultFullTimeOfferValues,
defaultInternshipOfferValues,
} from '~/pages/offers/submit';
import FormMonthYearPicker from './components/FormMonthYearPicker';
import FormSelect from './components/FormSelect';
import FormTextArea from './components/FormTextArea';
@ -479,7 +484,13 @@ function OfferDetailsFormArray({
label="Add another offer"
size="lg"
variant="tertiary"
onClick={() => append({})}
onClick={() =>
append(
jobType === JobType.FullTime
? defaultFullTimeOfferValues
: defaultInternshipOfferValues,
)
}
/>
</div>
);
@ -488,16 +499,18 @@ function OfferDetailsFormArray({
export default function OfferDetailsForm() {
const [jobType, setJobType] = useState(JobType.FullTime);
const [isDialogOpen, setDialogOpen] = useState(false);
const { control, register } = useFormContext();
const { control } = useFormContext();
const fieldArrayValues = useFieldArray({ control, name: 'offers' });
const toggleJobType = () => {
fieldArrayValues.remove();
if (jobType === JobType.FullTime) {
setJobType(JobType.Internship);
fieldArrayValues.append(defaultInternshipOfferValues);
} else {
setJobType(JobType.FullTime);
fieldArrayValues.append(defaultFullTimeOfferValues);
}
fieldArrayValues.remove();
};
const switchJobTypeLabel = () =>
@ -523,7 +536,6 @@ export default function OfferDetailsForm() {
}
setDialogOpen(true);
}}
{...register(`offers.${0}.jobType`)}
/>
</div>
<div className="mx-5 w-1/3">
@ -538,7 +550,6 @@ export default function OfferDetailsForm() {
}
setDialogOpen(true);
}}
{...register(`offers.${0}.jobType`)}
/>
</div>
</div>

@ -21,25 +21,35 @@ import { getCurrentMonth, getCurrentYear } from '~/utils/offers/time';
import { trpc } from '~/utils/trpc';
const defaultOfferValues = {
comments: '',
companyId: '',
job: {},
jobType: JobType.FullTime,
location: '',
monthYearReceived: {
month: getCurrentMonth() as Month,
year: getCurrentYear(),
},
negotiationStrategy: '',
};
export const defaultFullTimeOfferValues = {
...defaultOfferValues,
jobType: JobType.FullTime,
};
export const defaultInternshipOfferValues = {
...defaultOfferValues,
jobType: JobType.Internship,
};
const defaultOfferProfileValues = {
background: {
educations: [],
experiences: [{ jobType: JobType.FullTime }],
specificYoes: [],
},
offers: [
{
comments: '',
companyId: '',
job: {},
jobType: JobType.FullTime,
location: '',
monthYearReceived: {
month: getCurrentMonth() as Month,
year: getCurrentYear(),
},
negotiationStrategy: '',
},
],
offers: [defaultOfferValues],
};
type FormStep = {
@ -55,7 +65,7 @@ export default function OffersSubmissionPage() {
const scrollToTop = () =>
pageRef.current?.scrollTo({ behavior: 'smooth', top: 0 });
const formMethods = useForm<OfferProfileFormData>({
defaultValues: defaultOfferValues,
defaultValues: defaultOfferProfileValues,
mode: 'all',
});
const { handleSubmit, trigger } = formMethods;
@ -121,8 +131,17 @@ export default function OffersSubmissionPage() {
if (!result) {
return;
}
data = removeInvalidMoneyData(data);
const background = cleanObject(data.background);
background.specificYoes = data.background.specificYoes.filter(
(specificYoe) => specificYoe.domain && specificYoe.yoe > 0,
);
if (Object.entries(background.experiences[0]).length === 1) {
background.experiences = [];
}
const offers = data.offers.map((offer: OfferDetailsFormData) => ({
...offer,
monthYearReceived: new Date(
@ -130,15 +149,9 @@ export default function OffersSubmissionPage() {
offer.monthYearReceived.month,
),
}));
const postData = { background, offers };
postData.background.specificYoes = data.background.specificYoes.filter(
(specificYoe) => specificYoe.domain && specificYoe.yoe > 0,
);
const postData = { background, offers };
if (Object.entries(postData.background.experiences[0]).length === 1) {
postData.background.experiences = [];
}
createMutation.mutate(postData);
};

Loading…
Cancel
Save