import { Button } from '@components/common/ui/Button.js'; import { useCheckout, useCheckoutDispatch } from '@components/frontStore/checkout/CheckoutContext.js'; import { _ } from '@evershop/evershop/lib/locale/translate/_'; import React, { useEffect } from 'react'; import { toast } from 'react-toastify'; interface CashOnDeliveryMethodProps { setting: { codDisplayName: string; }; } interface CODLogoProps { width?: number; height?: number; } function CODLogo({ width = 100, height = 30 }: CODLogoProps) { return ( Cash On Delivery ); } export default function CashOnDeliveryMethod({ setting }: CashOnDeliveryMethodProps) { const { checkoutSuccessUrl, orderPlaced, orderId, checkoutData } = useCheckout(); const { registerPaymentComponent } = useCheckoutDispatch(); useEffect(() => { if (orderPlaced && checkoutData.paymentMethod === 'cod') { // Redirect to the checkout success page window.location.href = `${checkoutSuccessUrl}/${orderId}`; } }, [orderPlaced, checkoutSuccessUrl, orderId]); useEffect(() => { registerPaymentComponent('cod', { nameRenderer: () => (
{setting.codDisplayName}
), formRenderer: () => (
{_( 'Conveniently pay with cash at your doorstep when your order is delivered.' )}
), checkoutButtonRenderer: () => { const { checkout } = useCheckoutDispatch(); const { loadingStates, orderPlaced } = useCheckout(); const handleClick = async (e: React.MouseEvent) => { e.preventDefault(); try { await checkout(); } catch (error) { toast.error( error.message || _('Failed to place order. Please try again.') ); } }; const isDisabled = loadingStates.placingOrder || orderPlaced; return ( ); } }); }, [registerPaymentComponent, setting.codDisplayName]); return null; } export const layout = { areaId: 'checkoutFormAfter', sortOrder: 10 }; export const query = ` query Query { setting { codDisplayName } } `;