mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 06:35:42 +00:00
Nationality mismatch issue resolution
This commit is contained in:
@@ -378,13 +378,13 @@ type FormData = z.infer<typeof formSchema>;
|
|||||||
|
|
||||||
export default function PassengersPage() {
|
export default function PassengersPage() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { searchCriteria, setPassengers, setCreateAccount, clearBooking } = useBookingStore();
|
const { searchCriteria, setPassengers, setCreateAccount } = useBookingStore();
|
||||||
const { user, isAuthenticated, updateUser } = useAuthStore();
|
const { user, isAuthenticated, updateUser } = useAuthStore();
|
||||||
const [faydaEnabled, setFaydaEnabled] = useState(true);
|
const [faydaEnabled, setFaydaEnabled] = useState(true);
|
||||||
const [verificationStatus, setVerificationStatus] = useState<Record<number, 'success' | 'error'>>({});
|
const [verificationStatus, setVerificationStatus] = useState<Record<number, 'success' | 'error'>>({});
|
||||||
const [saving, setSaving] = useState(false);
|
const [saving, setSaving] = useState(false);
|
||||||
const [formInitialized, setFormInitialized] = useState(false);
|
const [formInitialized, setFormInitialized] = useState(false);
|
||||||
const [nationalityMismatch, setNationalityMismatch] = useState(false);
|
|
||||||
|
|
||||||
const totalPassengers = (searchCriteria?.adultCount || 1) + (searchCriteria?.childCount || 0);
|
const totalPassengers = (searchCriteria?.adultCount || 1) + (searchCriteria?.childCount || 0);
|
||||||
|
|
||||||
@@ -451,19 +451,7 @@ export default function PassengersPage() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const userNationality = (passengerData?.nationality || user.nationality || '').toUpperCase().trim();
|
// Only populate first passenger
|
||||||
const searchNationality = (searchCriteria?.nationality || '').toUpperCase().trim();
|
|
||||||
console.log('Nationalities:', { userNationality, searchNationality });
|
|
||||||
|
|
||||||
// Check for nationality mismatch
|
|
||||||
if (userNationality !== searchNationality) {
|
|
||||||
console.log('Nationality mismatch detected');
|
|
||||||
setNationalityMismatch(true);
|
|
||||||
setFormInitialized(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only populate if nationalities match
|
|
||||||
console.log('Setting passenger 0 values');
|
console.log('Setting passenger 0 values');
|
||||||
setValue('passengers.0.name', passengerData?.fullName || user.fullName || '');
|
setValue('passengers.0.name', passengerData?.fullName || user.fullName || '');
|
||||||
setValue('passengers.0.dateOfBirth', passengerData?.dateOfBirth || user.dateOfBirth || '');
|
setValue('passengers.0.dateOfBirth', passengerData?.dateOfBirth || user.dateOfBirth || '');
|
||||||
@@ -489,15 +477,6 @@ export default function PassengersPage() {
|
|||||||
populateForm();
|
populateForm();
|
||||||
}, [isAuthenticated, user, searchCriteria, setValue]);
|
}, [isAuthenticated, user, searchCriteria, setValue]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (nationalityMismatch && formInitialized) {
|
|
||||||
setTimeout(() => {
|
|
||||||
const element = document.getElementById('nationality-mismatch');
|
|
||||||
element?.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
||||||
}, 100);
|
|
||||||
}
|
|
||||||
}, [nationalityMismatch, formInitialized]);
|
|
||||||
|
|
||||||
const openFaydaVerification = async (index: number) => {
|
const openFaydaVerification = async (index: number) => {
|
||||||
if (typeof window === 'undefined') return;
|
if (typeof window === 'undefined') return;
|
||||||
|
|
||||||
@@ -621,45 +600,6 @@ export default function PassengersPage() {
|
|||||||
|
|
||||||
if (!searchCriteria) return null;
|
if (!searchCriteria) return null;
|
||||||
|
|
||||||
if (nationalityMismatch && formInitialized) {
|
|
||||||
const searchLabel: Record<string, string> = { ETHIOPIAN: 'Ethiopian', DJIBOUTIAN: 'Djiboutian', OTHER: 'Other' };
|
|
||||||
return (
|
|
||||||
<div className="min-h-screen bg-gray-50 dark:bg-gray-900 py-12">
|
|
||||||
<div className="container mx-auto px-4">
|
|
||||||
<div className="max-w-lg mx-auto">
|
|
||||||
<div className="card border-red-300 dark:border-red-700" id="nationality-mismatch">
|
|
||||||
<div className="flex items-start gap-4">
|
|
||||||
<div className="text-red-500 text-2xl mt-0.5">⚠️</div>
|
|
||||||
<div>
|
|
||||||
<h2 className="text-lg font-semibold text-red-700 dark:text-red-400 mb-2">Nationality Mismatch</h2>
|
|
||||||
<p className="text-gray-700 dark:text-gray-300 text-sm mb-3">
|
|
||||||
You searched for an <strong>{searchLabel[searchCriteria.nationality] ?? searchCriteria.nationality}</strong> passenger,
|
|
||||||
but your account is registered as <strong>{user?.nationality}</strong>.
|
|
||||||
</p>
|
|
||||||
<p className="text-gray-600 dark:text-gray-400 text-sm mb-5">
|
|
||||||
You cannot proceed with this booking. Please restart and select the correct nationality on the search page.
|
|
||||||
</p>
|
|
||||||
<button
|
|
||||||
onClick={() => {
|
|
||||||
clearBooking();
|
|
||||||
if (typeof window !== 'undefined') {
|
|
||||||
window.location.href = '/booking/search';
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
className="btn-primary w-full flex items-center justify-center gap-2"
|
|
||||||
>
|
|
||||||
<ExternalLink className="w-5 h-5" />
|
|
||||||
Restart Booking
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!formInitialized) {
|
if (!formInitialized) {
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-gray-50 dark:bg-gray-900 py-12">
|
<div className="min-h-screen bg-gray-50 dark:bg-gray-900 py-12">
|
||||||
|
|||||||
Reference in New Issue
Block a user