import { Area } from '@components/common/Area.js'; import { ExtendableTable, TableColumn } from '@components/common/ExtendableTable.js'; import { Image } from '@components/common/Image.js'; import { ProductNoThumbnail } from '@components/common/ProductNoThumbnail.js'; import { CartItem } from '@components/frontStore/cart/CartContext.js'; import { ItemQuantity } from '@components/frontStore/cart/ItemQuantity.js'; import { _ } from '@evershop/evershop/lib/locale/translate/_'; import React from 'react'; interface CartItemsTableProps { items: CartItem[]; showPriceIncludingTax?: boolean; loading?: boolean; onSort?: (key: string, direction: 'asc' | 'desc') => void; currentSort?: { key: string; direction: 'asc' | 'desc' }; onRemoveItem?: (itemId: string) => Promise; } export const DefaultCartItemList: React.FC = ({ items, showPriceIncludingTax = true, loading = false, onSort, currentSort, onRemoveItem }) => { const columns: TableColumn[] = [ { key: 'productInfo', header: { label: _('Product'), className: '' }, className: 'font-medium align-top', sortable: false, render: (row) => { const priceValue = showPriceIncludingTax ? row.productPriceInclTax?.text : row.productPrice?.text; return (
{row.thumbnail ? ( {row.productName} ) : ( )}
{row.productName}
{row.variantOptions?.map((option) => ( {option.attributeName}:{' '} {option.optionText} ))} {priceValue} x {row.qty} { e.preventDefault(); onRemoveItem?.(row.cartItemId); }} > {_('Remove')} {row.errors?.map((error, index) => ( {error} ))}
); } }, { key: 'qty', header: { label: _('Quantity'), className: 'text-right' }, sortable: true, render: (row) => { return (
{({ quantity, increase, decrease }) => (
{quantity}
)}
); } }, { key: 'lineTotal', header: { label: _('Total'), className: 'text-right' }, sortable: true, render: (row) => { const totalValue = showPriceIncludingTax ? row.lineTotalInclTax?.text : row.lineTotal?.text; return (
{totalValue}
); } } ]; const [rows, setRows] = React.useState(items); React.useEffect(() => { setRows(items); }, [items]); return ( <> ); };