/** * CheckoutConfirmationDialog component * Displays checkout information and requests user confirmation before proceeding. */ import React, { useEffect, useState } from 'react'; interface CheckoutConfirmationRequest { price: string; state: 'ready' | 'insufficient_funds'; sessionMetadata: { sessionName: string; trackId: string; carIds: string[]; }; timeoutMs: number; } interface CheckoutConfirmationDialogProps { request: CheckoutConfirmationRequest; } export const CheckoutConfirmationDialog: React.FC = ({ request, }) => { const [remainingSeconds, setRemainingSeconds] = useState( Math.floor(request.timeoutMs / 1000) ); useEffect(() => { // Countdown timer const intervalId = setInterval(() => { setRemainingSeconds((prev) => { if (prev <= 1) { clearInterval(intervalId); window.electronAPI.confirmCheckout('timeout'); return 0; } return prev - 1; }); }, 1000); return () => clearInterval(intervalId); }, []); const handleConfirm = () => { window.electronAPI.confirmCheckout('confirmed'); }; const handleCancel = () => { window.electronAPI.confirmCheckout('cancelled'); }; return (

Confirm Checkout

Price: {request.price}
{request.state === 'insufficient_funds' && (
⚠️ Insufficient funds
)}
Session: {request.sessionMetadata.sessionName}
Track: {request.sessionMetadata.trackId}
Cars: {request.sessionMetadata.carIds.join(', ')}
Time remaining: {remainingSeconds}s
); };