diff --git a/packages/client/src/components/BoardingPassView.tsx b/packages/client/src/components/BoardingPassView.tsx new file mode 100644 index 00000000..71d90d53 --- /dev/null +++ b/packages/client/src/components/BoardingPassView.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { Separator } from '@/components/ui/separator'; +import { Button } from '@/components/ui/button'; +import { Plane, Download, Wallet, Printer } from 'lucide-react'; +import { apiClient, CheckInRecord } from '@/lib/api'; + +interface BoardingPassViewProps { + bookingId: string; + checkIn: CheckInRecord; + fromAirport?: string; + toAirport?: string; + flightNumber?: string; + airlineCode?: string; + passengerName?: string; + departureTime?: string; + gate?: string; + terminal?: string; +} + +export function BoardingPassView({ + bookingId, + checkIn, + fromAirport, + toAirport, + flightNumber, + airlineCode, + passengerName, + departureTime, + gate, + terminal, +}: BoardingPassViewProps) { + const pdfUrl = apiClient.getBoardingPassPdfUrl(bookingId); + + const handlePrint = () => { + window.print(); + }; + + return ( +
+ Flight {airlineCode}{flightNumber} +
+{passengerName || 'Valued Passenger'}
++ {departureTime ? new Date(departureTime).toLocaleString() : 'As Scheduled'} +
+{checkIn.seatNumber || 'Not assigned'}
+{gate || 'TBD'}
+{terminal || 'TBD'}
++ {checkIn.boardingPassCode} +
+