diff --git a/apps/portal/src/app/components/BilingualInput.tsx b/apps/portal/src/app/components/BilingualInput.tsx new file mode 100644 index 000000000..8e55c64eb --- /dev/null +++ b/apps/portal/src/app/components/BilingualInput.tsx @@ -0,0 +1,76 @@ +import { useState } from 'react'; +import { + TextInput, + UnstyledButton, + rem, + type TextInputProps, +} from '@mantine/core'; + +export interface BilingualValue { + en: string; + am: string; +} + +interface BilingualInputProps + extends Omit { + value: BilingualValue; + onChange: (value: BilingualValue) => void; +} + +export function BilingualInput({ + label, + value, + onChange, + required, + placeholder, + ...rest +}: BilingualInputProps) { + const [lang, setLang] = useState<'en' | 'am'>('en'); + + const toggle = () => setLang((l) => (l === 'en' ? 'am' : 'en')); + + return ( + onChange({ ...value, [lang]: e.currentTarget.value })} + rightSection={ + + {lang === 'en' ? 'EN' : 'AM'} + + } + styles={{ + input: { + paddingRight: rem(42), + }, + }} + {...rest} + /> + ); +} diff --git a/apps/portal/src/app/features/seafarer/pages/SeafarerRegistrationPage.tsx b/apps/portal/src/app/features/seafarer/pages/SeafarerRegistrationPage.tsx index 93b221535..b1ac7eb85 100644 --- a/apps/portal/src/app/features/seafarer/pages/SeafarerRegistrationPage.tsx +++ b/apps/portal/src/app/features/seafarer/pages/SeafarerRegistrationPage.tsx @@ -34,6 +34,8 @@ import { } from '@tabler/icons-react'; import { useNavigate } from 'react-router-dom'; import { notify } from '@ema-platform/ui'; +import { BilingualInput } from '../../../components/BilingualInput'; +import type { BilingualValue } from '../../../components/BilingualInput'; // --------------------------------------------------------------------------- // Dummy API @@ -261,9 +263,9 @@ export function SeafarerRegistrationPage() { const [submitting, setSubmitting] = useState(false); // Step 1 — Personal Information - const [firstName, setFirstName] = useState(''); - const [middleName, setMiddleName] = useState(''); - const [lastName, setLastName] = useState(''); + const [firstName, setFirstName] = useState({ en: '', am: '' }); + const [middleName, setMiddleName] = useState({ en: '', am: '' }); + const [lastName, setLastName] = useState({ en: '', am: '' }); const [gender, setGender] = useState(null); const [dob, setDob] = useState(''); const [placeOfBirth, setPlaceOfBirth] = useState(''); @@ -293,7 +295,7 @@ export function SeafarerRegistrationPage() { setFiles((prev) => ({ ...prev, [key]: f })); const canNext = () => { - if (active === 0) return !!firstName.trim() && !!lastName.trim() && !!gender && !!dob && !!placeOfBirth && !!nationality && !!nationalIdNumber.trim(); + if (active === 0) return !!firstName.en.trim() && !!lastName.en.trim() && !!gender && !!dob && !!placeOfBirth && !!nationality && !!nationalIdNumber.trim(); if (active === 1) return !!mobile.trim() && !!email.trim() && !!region && !!city.trim(); if (active === 2) return !!files.nationalId && !!files.photo; return true; @@ -353,9 +355,9 @@ export function SeafarerRegistrationPage() { - setFirstName(e.currentTarget.value)} /> - setMiddleName(e.currentTarget.value)} /> - setLastName(e.currentTarget.value)} /> + + +