/** * External dependencies */ import { __ } from '@wordpress/i18n'; import { TotalsItem } from '@woocommerce/blocks-checkout'; import { getCurrencyFromPriceResponse } from '@woocommerce/price-format'; import { usePaymentMethods, useStoreCart, } from '@woocommerce/base-context/hooks'; import PaymentMethodIcons from '@woocommerce/base-components/cart-checkout/payment-method-icons'; import { getIconsFromPaymentMethods } from '@woocommerce/base-utils'; import { getSetting } from '@woocommerce/settings'; import { PaymentEventsProvider } from '@woocommerce/base-context'; import classNames from 'classnames'; import { isObject } from '@woocommerce/types'; /** * Internal dependencies */ import CartButton from '../mini-cart-cart-button-block/block'; import CheckoutButton from '../mini-cart-checkout-button-block/block'; const PaymentMethodIconsElement = (): JSX.Element => { const { paymentMethods } = usePaymentMethods(); return ( ); }; interface Props { children: JSX.Element | JSX.Element[]; className?: string; cartButtonLabel: string; checkoutButtonLabel: string; } /** * Checks if there are any children that are blocks. */ const hasChildren = ( children ): boolean => { return children.some( ( child ) => { if ( Array.isArray( child ) ) { return hasChildren( child ); } return isObject( child ) && child.key !== null; } ); }; const Block = ( { children, className, cartButtonLabel, checkoutButtonLabel, }: Props ): JSX.Element => { const { cartTotals } = useStoreCart(); const subTotal = getSetting( 'displayCartPricesIncludingTax', false ) ? parseInt( cartTotals.total_items, 10 ) + parseInt( cartTotals.total_items_tax, 10 ) : parseInt( cartTotals.total_items, 10 ); // The `Cart` and `Checkout` buttons were converted to inner blocks, but we still need to render the buttons // for themes that have the old `mini-cart.html` template. So we check if there are any inner blocks (buttons) and // if not, render the buttons. const hasButtons = hasChildren( children ); return (
{ hasButtons ? ( children ) : ( <> ) }
); }; export default Block;