// @ts-nocheck /** * External dependencies */ import PropTypes from 'prop-types'; import { __ } from '@wordpress/i18n'; import { useState, useEffect } from '@wordpress/element'; import { SubtotalsItem, TotalsFeesItem, TotalsCouponCodeInput, TotalsDiscountItem, TotalsFooterItem, TotalsShippingItem, TotalsTaxesItem, } from '@woocommerce/base-components/totals'; import ShippingRatesControl from '@woocommerce/base-components/shipping-rates-control'; import { COUPONS_ENABLED, SHIPPING_ENABLED, DISPLAY_CART_PRICES_INCLUDING_TAX, } from '@woocommerce/block-settings'; import { getCurrencyFromPriceResponse } from '@woocommerce/base-utils'; import { Card, CardBody } from 'wordpress-components'; import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount'; import { decodeEntities } from '@wordpress/html-entities'; import { useStoreCartCoupons, useShippingRates } from '@woocommerce/base-hooks'; import classnames from 'classnames'; /** * Internal dependencies */ import CheckoutButton from './checkout-button'; import CartLineItemsTitle from './cart-line-items-title'; import CartLineItemsTable from './cart-line-items-table'; import './style.scss'; import './editor.scss'; const renderShippingRatesControlOption = ( option ) => ( { label: decodeEntities( option.name ), value: option.rate_id, description: ( <> { option.price && ( ) } { option.price && option.delivery_time ? ' — ' : null } { decodeEntities( option.delivery_time ) } ), } ); const ShippingCalculatorOptions = ( { shippingRates, shippingRatesLoading, shippingAddress, } ) => { return (
{ __( 'Choose the shipping method.', 'woo-gutenberg-products-block' ) }
); }; /** * Component that renders the Cart block when user has something in cart aka "full". */ const Cart = ( { cartItems = [], cartTotals = {}, cartCoupons = [], isShippingCalculatorEnabled, isShippingCostHidden, shippingRates, isLoading = false, } ) => { const { updateShippingAddress, shippingRatesLoading } = useShippingRates(); const shippingAddress = shippingRates[ 0 ]?.destination; const [ showShippingCosts, setShowShippingCosts ] = useState( ! isShippingCostHidden ); const { applyCoupon, removeCoupon, isApplyingCoupon, isRemovingCoupon, } = useStoreCartCoupons(); useEffect( () => { if ( ! SHIPPING_ENABLED ) { return setShowShippingCosts( false ); } if ( isShippingCalculatorEnabled ) { if ( isShippingCostHidden ) { if ( shippingAddress?.country ) { return setShowShippingCosts( true ); } } else { return setShowShippingCosts( true ); } } return setShowShippingCosts( false ); }, [ isShippingCalculatorEnabled, isShippingCostHidden, shippingAddress ] ); const totalsCurrency = getCurrencyFromPriceResponse( cartTotals ); const cartClassName = classnames( 'wc-block-cart', { 'wc-block-cart--is-loading': isLoading, } ); return (

{ __( 'Cart totals', 'woo-gutenberg-products-block' ) }

{ isShippingCalculatorEnabled && ( ) } { showShippingCosts && (
{ __( 'Choose the shipping method.', 'woo-gutenberg-products-block' ) }
) } { ! DISPLAY_CART_PRICES_INCLUDING_TAX && ( ) } { COUPONS_ENABLED && ( ) }
); }; Cart.propTypes = { cartItems: PropTypes.array, cartTotals: PropTypes.shape( { total_items: PropTypes.string, total_items_tax: PropTypes.string, total_fees: PropTypes.string, total_fees_tax: PropTypes.string, total_discount: PropTypes.string, total_discount_tax: PropTypes.string, total_shipping: PropTypes.string, total_shipping_tax: PropTypes.string, total_tax: PropTypes.string, total_price: PropTypes.string, } ), isShippingCalculatorEnabled: PropTypes.bool, isShippingCostHidden: PropTypes.bool, isLoading: PropTypes.bool, /** * List of shipping rates to display. If defined, shipping rates will not be fetched from the API (used for the block preview). */ shippingRates: PropTypes.array, }; export default Cart;