import React from 'react'; import clsx from 'clsx'; import { Button, Icon, Modal } from '@theme/components'; import { useLocalization, useToast } from '@akinon/next/hooks'; import PluginModule, { Component } from '@akinon/next/components/plugin-module'; import { formatErrorMessage } from '@akinon/next/utils/format-error-message'; import { validateVariantSelection } from '../../utils/variant-validation'; import { VariantType } from '@akinon/next/types'; interface Product { pk: number; name: string; [key: string]: any; } interface ProductActionsProps { product: Product; variants: VariantType[]; inStock: boolean; isVariantLoading: boolean; onAddToCart: () => void; onAddToStockAlert: () => void; onClearError: () => void; isAddToCartLoading: boolean; isAddToStockAlertLoading: boolean; productError: React.ReactNode | null; isModalOpen: boolean; stockAlertResponseMessage: React.ReactNode | null; onCloseModal: () => void; } export const ProductActions: React.FC = ({ product, variants, inStock, isVariantLoading, onAddToCart, onAddToStockAlert, onClearError, isAddToCartLoading, isAddToStockAlertLoading, productError, isModalOpen, stockAlertResponseMessage, onCloseModal }) => { const { t } = useLocalization(); const { error: showError } = useToast(); const checkoutProviderProps = { product, clearBasket: true, addBeforeClick: () => validateVariantSelection(variants).isValid, openMiniBasket: false, className: clsx([ 'py-2.5', 'bg-black', 'relative', 'hover:bg-black', 'before:content-[""]', 'before:w-6', 'before:h-6', 'before:bg-white', 'before:absolute', 'before:rounded-r-[18px]', 'before:left-0', 'after:content-[""]', 'after:absolute', 'after:w-3', 'after:h-3', 'after:bg-[#d02c2f]', 'after:rounded-xl', 'after:left-1' ]), onError: (error: any) => { const formattedError = error?.data?.non_field_errors || Object.keys(error?.data || {}).map( (key) => `${key}: ${error?.data[key].join(', ')}` ); showError(formatErrorMessage(formattedError)); } }; const handleMainActionClick = () => { onClearError(); if (inStock) { onAddToCart(); } else { onAddToStockAlert(); } }; return ( <> {productError && (
{productError}
)}

{t('product.stock_alert.title')}

{stockAlertResponseMessage}

); };