From 8a9cc8afff9ba8e42dcbcfe2cab8b98e874d32c2 Mon Sep 17 00:00:00 2001 From: Stephanos A Date: Wed, 3 Jun 2026 16:14:41 +0300 Subject: [PATCH] Passenger portal build issue resolution --- apps/edr-passenger-web/portal/next.config.js | 3 +- .../src/app/booking/confirmation/page.tsx | 10 +- .../app/booking/passengers/onsubmit-final.ts | 75 ------------ .../booking/passengers/onsubmit-updated.ts | 58 --------- .../app/booking/passengers/page-onsubmit.ts | 4 - .../src/app/booking/passengers/page-temp.tsx | 6 - .../src/app/booking/passengers/page.tsx | 14 +-- .../app/booking/passengers/patch-onsubmit.txt | 12 -- .../booking/passengers/updated-onsubmit.ts | 43 ------- .../booking/review/updated-handleConfirm.ts | 114 ------------------ .../portal/src/app/booking/seats/page.tsx | 4 +- .../portal/src/app/login/page.tsx | 2 - .../portal/src/utils/format.ts | 13 +- 13 files changed, 17 insertions(+), 341 deletions(-) delete mode 100644 apps/edr-passenger-web/portal/src/app/booking/passengers/onsubmit-final.ts delete mode 100644 apps/edr-passenger-web/portal/src/app/booking/passengers/onsubmit-updated.ts delete mode 100644 apps/edr-passenger-web/portal/src/app/booking/passengers/page-onsubmit.ts delete mode 100644 apps/edr-passenger-web/portal/src/app/booking/passengers/page-temp.tsx delete mode 100644 apps/edr-passenger-web/portal/src/app/booking/passengers/patch-onsubmit.txt delete mode 100644 apps/edr-passenger-web/portal/src/app/booking/passengers/updated-onsubmit.ts delete mode 100644 apps/edr-passenger-web/portal/src/app/booking/review/updated-handleConfirm.ts diff --git a/apps/edr-passenger-web/portal/next.config.js b/apps/edr-passenger-web/portal/next.config.js index 198341969..2818d502d 100644 --- a/apps/edr-passenger-web/portal/next.config.js +++ b/apps/edr-passenger-web/portal/next.config.js @@ -1,10 +1,9 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - output: 'export', reactStrictMode: true, transpilePackages: ['@edr/types', '@edr/ui-common'], images: { - unoptimized: true, // Required for static export + unoptimized: true, }, }; diff --git a/apps/edr-passenger-web/portal/src/app/booking/confirmation/page.tsx b/apps/edr-passenger-web/portal/src/app/booking/confirmation/page.tsx index 6bc0aa117..05cceeaf6 100644 --- a/apps/edr-passenger-web/portal/src/app/booking/confirmation/page.tsx +++ b/apps/edr-passenger-web/portal/src/app/booking/confirmation/page.tsx @@ -6,7 +6,7 @@ import { useRouter } from 'next/navigation'; import { useBookingStore } from '@/lib/booking-store'; import { useMutation, useQuery } from '@tanstack/react-query'; import { apiClient } from '@/lib/api-client'; -import { useEffect, useState } from 'react'; +import { useEffect, useState, useRef } from 'react'; import { CheckCircle, Download, Share2, Copy, Printer, Mail, Train } from 'lucide-react'; import { QRCodeSVG } from 'qrcode.react'; import { format } from 'date-fns'; @@ -15,6 +15,7 @@ export default function ConfirmationPage() { const router = useRouter(); const { bookingId, pnr, selectedSchedule, passengers, clearBooking } = useBookingStore(); const [copied, setCopied] = useState(false); + const confirmAttempted = useRef(false); const confirmMutation = useMutation({ mutationFn: () => apiClient.patch(`/bookings/${bookingId}/confirm`, { status: 'SUCCEEDED' }), @@ -27,7 +28,6 @@ export default function ConfirmationPage() { return await apiClient.get(`/bookings/${bookingId}`); } catch (error) { console.log('Booking API not available, using local data'); - // Return mock booking data return { id: bookingId, pnr, @@ -40,10 +40,11 @@ export default function ConfirmationPage() { }); useEffect(() => { - if (bookingId && !confirmMutation.isSuccess && !confirmMutation.isPending) { + if (bookingId && !confirmAttempted.current) { + confirmAttempted.current = true; confirmMutation.mutate(); } - }, [bookingId]); + }, [bookingId, confirmMutation]); const copyPNR = () => { if (pnr) { @@ -54,7 +55,6 @@ export default function ConfirmationPage() { }; const handleDownloadTickets = () => { - // Mock download - in production this would call the API alert('Ticket download will be available soon. Your tickets are displayed below.'); }; diff --git a/apps/edr-passenger-web/portal/src/app/booking/passengers/onsubmit-final.ts b/apps/edr-passenger-web/portal/src/app/booking/passengers/onsubmit-final.ts deleted file mode 100644 index 41ca47aae..000000000 --- a/apps/edr-passenger-web/portal/src/app/booking/passengers/onsubmit-final.ts +++ /dev/null @@ -1,75 +0,0 @@ -// This is the updated onSubmit function for passengers/page.tsx -// Replace the existing onSubmit function with this one - -const onSubmit = async (data: FormData) => { - setSaving(true); - try { - let passengerId = ''; - - console.log('[Passengers] onSubmit called, isAuthenticated:', isAuthenticated, 'user:', user); - - // For authenticated users, fetch the passenger profile to get the passengerId - if (isAuthenticated && user?.id) { - try { - console.log('[Passengers] Fetching passenger profile from /passengers/me'); - const passengerProfile: any = await apiClient.get('/passengers/me'); - console.log('[Passengers] Passenger profile response:', passengerProfile); - passengerId = passengerProfile?.id || ''; - console.log('[Passengers] Extracted passengerId:', passengerId); - } catch (error) { - console.error('[Passengers] Failed to fetch passenger profile:', error); - } - } - - console.log('[Passengers] passengerId before saving:', passengerId); - - const passengerDetails = data.passengers.map((p, i) => ({ - name: p.name, - dateOfBirth: p.dateOfBirth, - gender: p.gender, - nationality: p.nationality, - nationalId: p.nationalId, - passportNumber: p.passportNumber, - passportCountry: p.passportCountry, - phone: p.phone, - email: p.email, - isPrimaryPassenger: i === 0, - passengerId: i === 0 && passengerId ? passengerId : undefined, - })); - - const deviceId = typeof window !== 'undefined' - ? (localStorage.getItem('deviceId') || crypto.randomUUID()) - : crypto.randomUUID(); - - await apiClient.post('/passengers/save-details', { - passengers: passengerDetails, - userId: user?.id, - deviceId, - }); - - setPassengers(passengerDetails); - setCreateAccount(data.createAccount); - - // Save passengerId to booking store for later use - if (isAuthenticated && passengerId) { - const { setPassengerId } = useBookingStore.getState(); - setPassengerId(passengerId); - console.log('[Passengers] Saved passengerId to booking store:', passengerId); - } else { - console.warn('[Passengers] Not saving passengerId - isAuthenticated:', isAuthenticated, 'passengerId:', passengerId); - } - - // Store in localStorage as additional backup - if (typeof window !== 'undefined' && passengerId) { - localStorage.setItem('booking_passengerId', passengerId); - console.log('[Passengers] Stored passengerId in localStorage:', passengerId); - } - - router.push('/booking/seats'); - } catch (error) { - console.error('Failed to save passenger details:', error); - alert('Failed to save passenger details. Please try again.'); - } finally { - setSaving(false); - } -}; diff --git a/apps/edr-passenger-web/portal/src/app/booking/passengers/onsubmit-updated.ts b/apps/edr-passenger-web/portal/src/app/booking/passengers/onsubmit-updated.ts deleted file mode 100644 index 011617f8b..000000000 --- a/apps/edr-passenger-web/portal/src/app/booking/passengers/onsubmit-updated.ts +++ /dev/null @@ -1,58 +0,0 @@ - const onSubmit = async (data: FormData) => { - setSaving(true); - try { - let passengerId = ''; - - // For authenticated users, fetch the passenger profile to get the passengerId - if (isAuthenticated && user?.id) { - try { - const passengerProfile: any = await apiClient.get('/passengers/me'); - passengerId = passengerProfile?.id || ''; - console.log('Fetched passengerId:', passengerId); - } catch (error) { - console.error('Failed to fetch passenger profile:', error); - } - } - - const passengerDetails = data.passengers.map((p, i) => ({ - name: p.name, - dateOfBirth: p.dateOfBirth, - gender: p.gender, - nationality: p.nationality, - nationalId: p.nationalId, - passportNumber: p.passportNumber, - passportCountry: p.passportCountry, - phone: p.phone, - email: p.email, - isPrimaryPassenger: i === 0, - passengerId: i === 0 && passengerId ? passengerId : undefined, - })); - - const deviceId = typeof window !== 'undefined' - ? (localStorage.getItem('deviceId') || crypto.randomUUID()) - : crypto.randomUUID(); - - await apiClient.post('/passengers/save-details', { - passengers: passengerDetails, - userId: user?.id, - deviceId, - }); - - setPassengers(passengerDetails); - setCreateAccount(data.createAccount); - - // Save passengerId to booking store for later use - if (isAuthenticated && passengerId) { - const { setPassengerId } = useBookingStore.getState(); - setPassengerId(passengerId); - console.log('Saved passengerId to booking store:', passengerId); - } - - router.push('/booking/seats'); - } catch (error) { - console.error('Failed to save passenger details:', error); - alert('Failed to save passenger details. Please try again.'); - } finally { - setSaving(false); - } - }; diff --git a/apps/edr-passenger-web/portal/src/app/booking/passengers/page-onsubmit.ts b/apps/edr-passenger-web/portal/src/app/booking/passengers/page-onsubmit.ts deleted file mode 100644 index a10b7555c..000000000 --- a/apps/edr-passenger-web/portal/src/app/booking/passengers/page-onsubmit.ts +++ /dev/null @@ -1,4 +0,0 @@ - const onSubmit = async (data: FormData) => { - setSaving(true); - try { - const passengerDetails = data.passengers.map((p, i) => ({\n name: p.name,\n dateOfBirth: p.dateOfBirth,\n gender: p.gender,\n nationality: p.nationality,\n nationalId: p.nationalId,\n passportNumber: p.passportNumber,\n passportCountry: p.passportCountry,\n phone: p.phone,\n email: p.email,\n isPrimaryPassenger: i === 0,\n passengerId: i === 0 && isAuthenticated ? user?.passenger?.id : undefined,\n }));\n\n const deviceId = typeof window !== 'undefined'\n ? (localStorage.getItem('deviceId') || crypto.randomUUID())\n : crypto.randomUUID();\n\n await apiClient.post('/passengers/save-details', {\n passengers: passengerDetails,\n userId: user?.id,\n deviceId,\n });\n\n setPassengers(passengerDetails);\n setCreateAccount(data.createAccount);\n \n // Save passengerId from authenticated user to booking store\n if (isAuthenticated && user?.passenger?.id) {\n const { setPassengerId } = useBookingStore.getState();\n setPassengerId(user.passenger.id);\n }\n \n router.push('/booking/seats');\n } catch (error) {\n console.error('Failed to save passenger details:', error);\n alert('Failed to save passenger details. Please try again.');\n } finally {\n setSaving(false);\n }\n }; diff --git a/apps/edr-passenger-web/portal/src/app/booking/passengers/page-temp.tsx b/apps/edr-passenger-web/portal/src/app/booking/passengers/page-temp.tsx deleted file mode 100644 index 9e6d11d56..000000000 --- a/apps/edr-passenger-web/portal/src/app/booking/passengers/page-temp.tsx +++ /dev/null @@ -1,6 +0,0 @@ -'use client'; - -export const dynamic = 'force-dynamic'; - -import { useForm, useFieldArray } from 'react-hook-form'; -import { zodResolver } from '@hookform/resolvers/zod'; \ No newline at end of file diff --git a/apps/edr-passenger-web/portal/src/app/booking/passengers/page.tsx b/apps/edr-passenger-web/portal/src/app/booking/passengers/page.tsx index 6ec365a7d..e24d971c9 100644 --- a/apps/edr-passenger-web/portal/src/app/booking/passengers/page.tsx +++ b/apps/edr-passenger-web/portal/src/app/booking/passengers/page.tsx @@ -52,7 +52,6 @@ export default function PassengersPage() { const { user, isAuthenticated, updateUser } = useAuthStore(); const [faydaEnabled, setFaydaEnabled] = useState(true); const [verificationStatus, setVerificationStatus] = useState>({}); - const [updatingUser, setUpdatingUser] = useState(false); const [saving, setSaving] = useState(false); const [formInitialized, setFormInitialized] = useState(false); const [nationalityMismatch, setNationalityMismatch] = useState(false); @@ -309,7 +308,9 @@ export default function PassengersPage() {