Files
heygermany-e2e-mrg3vnfz/apps/website/components/jobs/form/ProfessionalExperience.tsx
e2e 81ea8ef5d1
Some checks failed
Main / Setup and Test (push) Has been cancelled
Main / Build Website (push) Has been cancelled
chore: heygermany customer project
2026-07-11 10:31:48 +02:00

57 lines
2.1 KiB
TypeScript

import React from 'react'
import { Controller, useFormContext } from 'react-hook-form'
import type { DB } from '@heygermany/sdk'
import { ApplicationCandidateData, ApplicationCandidateWorkExperience, CandidateDocumentTypes } from '@heygermany/sdk'
import { FileUpload } from '../../ui/FileUpload'
import { useUploadCandidateFiles } from '@/hooks/useUploadCandidateFiles'
import { CandidateSection } from './CandidateSection'
import { Box, Text } from '@pikku/mantine/core'
import { useI18n } from '@/context/i18n-provider'
import { asI18n } from '@pikku/react'
export const ProfessionalExperience: React.FunctionComponent<{ candidate: ApplicationCandidateData }> = ({ candidate }) => {
const t = useI18n()
const { control, trigger, formState: { errors } } = useFormContext<ApplicationCandidateWorkExperience>()
const { uploadFiles, deleteFile } = useUploadCandidateFiles(candidate.candidateId, CandidateDocumentTypes.WORK_EXPERIENCE, trigger)
const validateWorkExperience = (files: any[]): boolean | string => {
if (files && files.length > 5) {
return t('jobs.professionalexperience.validation.maxfiles')
}
return true
}
return (
<CandidateSection
title={t('jobs.professionalexperience.title')}
example={t('jobs.professionalexperience.example')}
description={t('jobs.professionalexperience.description')}
>
<Box>
<Controller
name="workExperience"
control={control}
rules={{
validate: () => validateWorkExperience(candidate.workExperience)
}}
render={() => (
<Box mt="xs">
<FileUpload
files={candidate.workExperience.map((file: DB.CandidateDocument) => ({ id: file.documentId, fileName: file.fileName }))}
uploadFiles={uploadFiles}
deleteFile={deleteFile}
/>
</Box>
)}
/>
{errors.workExperience && (
<Text size="sm" c="dimmed" mt="xs">
{asI18n(errors.workExperience?.message ?? '')}
</Text>
)}
</Box>
</CandidateSection>
)
}