'use client' import { Controller, useFormContext } from 'react-hook-form' import { Checkbox, Box, Text, Group, Stack, Title } from '@pikku/mantine/core' import type { DB } from '@heygermany/sdk' import { ApplicationCandidateData, ApplicationCandidateLanguage, CandidateDocumentTypes, LanguageLevels, } from '@heygermany/sdk' import { FileUpload } from '../../ui/FileUpload' import { useUploadCandidateFiles } from '@/hooks/useUploadCandidateFiles' import { useEffect } from 'react' import { CandidateSection } from './CandidateSection' import { useI18n } from '@/context/i18n-provider' import { EnumSelect } from '@/components/common/EnumSelect' import { asI18n } from '@pikku/react' export const GermanLanguage: React.FunctionComponent<{ candidate: ApplicationCandidateData }> = ({ candidate }) => { const t = useI18n() const { control, trigger, clearErrors, setValue, formState: { errors }, watch } = useFormContext() const languageCertificateProvided = watch('languageCertificateProvided') const selfAssessment = watch('languageSelfAssessmentLevel') useEffect(() => { if (languageCertificateProvided === null) { setValue('languageCertificateProvided', true) } else if (languageCertificateProvided === true) { setValue('languageSelfAssessmentLevel', null) } clearErrors() }, [languageCertificateProvided]) useEffect(() => { if (selfAssessment) { clearErrors() } }, [selfAssessment]) const { uploadFiles, deleteFile } = useUploadCandidateFiles(candidate.candidateId, CandidateDocumentTypes.LANGUAGE, trigger) const validateLanguages = (files?: any[], selfAssessment?: DB.LanguageLevel | null, certificateProvided?: boolean | null): boolean | string => { if (certificateProvided) { if (!files || files.length === 0) { return t('jobs.germanlanguage.validation.certificaterequired') } if (files.length > 5) { return t('jobs.germanlanguage.validation.maxfiles') } } else { if (!selfAssessment) { return t('jobs.germanlanguage.validation.selfassessmentrequired') } } return true } return ( ( field.onChange(!field.value)} /> {t('jobs.germanlanguage.nocertificate')} )} /> {languageCertificateProvided && ( validateLanguages(candidate.languageCertificates, undefined, languageCertificateProvided) }} render={() => ( ({ id: file.documentId, fileName: file.fileName }))} uploadFiles={uploadFiles} deleteFile={deleteFile} /> )} /> )} {!languageCertificateProvided && ( {t('jobs.germanlanguage.selfassessment.title')} {t('jobs.germanlanguage.selfassessment.description')} validateLanguages(undefined, value, languageCertificateProvided) }} render={({ field }) => ( )} /> )} {errors.languageCertificates && ( {asI18n(errors.languageCertificates?.message ?? '')} )} ) }