diff --git a/src/components/InsufficientBalancePrompt.tsx b/src/components/InsufficientBalancePrompt.tsx index 1ef404b..d779f81 100644 --- a/src/components/InsufficientBalancePrompt.tsx +++ b/src/components/InsufficientBalancePrompt.tsx @@ -16,6 +16,8 @@ interface InsufficientBalancePromptProps { compact?: boolean; /** Additional className */ className?: string; + /** Callback to execute before opening top-up modal (e.g., save cart) */ + onBeforeTopUp?: () => Promise; } export default function InsufficientBalancePrompt({ @@ -23,11 +25,13 @@ export default function InsufficientBalancePrompt({ message, compact = false, className = '', + onBeforeTopUp, }: InsufficientBalancePromptProps) { const { t } = useTranslation(); const { formatAmount, currencySymbol } = useCurrency(); const [showMethodSelect, setShowMethodSelect] = useState(false); const [selectedMethod, setSelectedMethod] = useState(null); + const [isPreparingTopUp, setIsPreparingTopUp] = useState(false); // Auto-close modals when success notification appears const handleCloseAll = useCallback(() => { @@ -50,6 +54,20 @@ export default function InsufficientBalancePrompt({ setShowMethodSelect(false); }; + const handleTopUpClick = async () => { + if (onBeforeTopUp) { + setIsPreparingTopUp(true); + try { + await onBeforeTopUp(); + } catch { + // Silently ignore errors - still open the modal + } finally { + setIsPreparingTopUp(false); + } + } + setShowMethodSelect(true); + }; + if (compact) { return ( <> @@ -78,10 +96,15 @@ export default function InsufficientBalancePrompt({ @@ -139,19 +162,26 @@ export default function InsufficientBalancePrompt({