'use client'; import { RootState } from 'redux/store'; import { useAppSelector } from '../redux/hooks'; import dynamic, { DynamicOptionsLoadingProps } from 'next/dynamic'; import { PaymentOptionViews } from 'views/checkout/steps/payment'; import { JSX, useMemo } from 'react'; const fallbackView = () => <>; const paymentTypeToView = { bkm_express: 'bkm', credit_card: 'credit-card', credit_payment: 'credit-payment', funds_transfer: 'funds-transfer', gpay: 'gpay', loyalty_money: 'loyalty', masterpass: 'credit-card', masterpass_rest: 'masterpass-rest', pay_on_delivery: 'pay-on-delivery', redirection: 'redirection', saved_card: 'saved-card' // Add other mappings as needed }; interface SelectedPaymentOptionViewProps { loader?: (loadingProps: DynamicOptionsLoadingProps) => JSX.Element; } export default function SelectedPaymentOptionView({ loader: Loader }: SelectedPaymentOptionViewProps) { const { payment_option, wallet_method } = useAppSelector( (state: RootState) => state.checkout.preOrder ); const Component = useMemo( () => dynamic( async () => { const customOption = PaymentOptionViews.find( (opt) => opt.slug === payment_option?.slug ); if (customOption) { const Component = customOption?.view; const componentWrapper = () => ; return new Promise((resolve) => { resolve(componentWrapper); }); } if ( payment_option?.payment_type === 'wallet' && wallet_method === 'apple_pay' ) { const mod = await import('@akinon/pz-apple-pay'); return typeof mod?.default === 'function' ? mod.default : fallbackView; } else if ( payment_option?.payment_type === 'wallet' && wallet_method === 'cybersource_uc' ) { const mod = await import('@akinon/pz-cybersource-uc'); return typeof mod?.CyberSourceUcPaymentOption === 'function' ? mod.CyberSourceUcPaymentOption : fallbackView; } if ( payment_option?.payment_type === 'wallet' && wallet_method === 'checkout_flow' ) { const mod = await import('@akinon/pz-flow-payment'); return typeof mod?.default === 'function' ? mod.default : fallbackView; } const view = paymentTypeToView[payment_option?.payment_type] || null; if (view) { try { const mod = await import( `views/checkout/steps/payment/options/${view}` ); return mod.default || fallbackView; } catch (error) { return fallbackView; } } return fallbackView; }, { ssr: false, loading: Loader || undefined } ), [payment_option?.pk] ); return ; }