/** * External dependencies */ import { Fragment, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import AddressForm from '@woocommerce/base-components/address-form'; import defaultAddressFields from '@woocommerce/base-components/address-form/default-address-fields'; import { FormStep, CheckoutForm, NoShipping, Policies, } from '@woocommerce/base-components/checkout'; import { PlaceOrderButton, ReturnToCartButton, } from '@woocommerce/base-components/cart-checkout'; import TextInput from '@woocommerce/base-components/text-input'; import ShippingRatesControl from '@woocommerce/base-components/shipping-rates-control'; import CheckboxControl from '@woocommerce/base-components/checkbox-control'; import { getCurrencyFromPriceResponse } from '@woocommerce/base-utils'; import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount'; import { CheckoutProvider } from '@woocommerce/base-context'; import { ExpressCheckoutFormControl, PaymentMethods, } from '@woocommerce/base-components/payment-methods'; import { SHIPPING_ENABLED } from '@woocommerce/block-settings'; import { decodeEntities } from '@wordpress/html-entities'; import { useShippingRates } from '@woocommerce/base-hooks'; import { Sidebar, SidebarLayout, Main, } from '@woocommerce/base-components/sidebar-layout'; import { getSetting } from '@woocommerce/settings'; /** * Internal dependencies */ import CheckoutSidebar from './sidebar.js'; import './style.scss'; import '../../../payment-methods-demo'; const Block = ( { attributes, cartCoupons = [], cartItems = [], cartTotals = {}, isEditor = false, shippingRates = [], } ) => { const [ selectedShippingRate, setSelectedShippingRate ] = useState( {} ); const [ contactFields, setContactFields ] = useState( {} ); const [ shouldSavePayment, setShouldSavePayment ] = useState( true ); const [ billingFields, setBillingFields ] = useState( {} ); const [ useShippingAsBilling, setUseShippingAsBilling ] = useState( attributes.useShippingAsBilling ); const renderShippingRatesControlOption = ( option ) => ( { label: decodeEntities( option.name ), value: option.rate_id, description: decodeEntities( option.description ), secondaryLabel: ( ), secondaryDescription: decodeEntities( option.delivery_time ), } ); const useShippingAddressAsBilling = isEditor ? attributes.useShippingAsBilling : useShippingAsBilling; const showBillingFields = ! SHIPPING_ENABLED || ! useShippingAddressAsBilling; const addressFields = { ...defaultAddressFields, company: { ...defaultAddressFields.company, hidden: ! attributes.showCompanyField, required: attributes.requireCompanyField, }, address_2: { ...defaultAddressFields.address_2, hidden: ! attributes.showAddress2Field, }, }; const { shippingRatesLoading, shippingAddress: shippingFields, setShippingAddress: setShippingFields, } = useShippingRates(); return ( ( { __( 'Already have an account? ', 'woo-gutenberg-products-block' ) } { __( 'Log in.', 'woo-gutenberg-products-block' ) } ) } > setContactFields( { ...contactFields, email: newValue, } ) } required={ true } /> setContactFields( { ...contactFields, keepUpdated: ! contactFields.keepUpdated, } ) } /> { SHIPPING_ENABLED && ( { attributes.showPhoneField && ( setShippingFields( { ...shippingFields, phone: newValue, } ) } required={ attributes.requirePhoneField } /> ) } setUseShippingAsBilling( isChecked ) } /> ) } { showBillingFields && ( ) } { SHIPPING_ENABLED && ( shippingRates.length === 0 && isEditor ? ( ) : ( setSelectedShippingRate( { ...selectedShippingRate, orderNote: ! selectedShippingRate.orderNote, } ) } /> ) ) } { /*@todo this should be something the payment method controls*/ } setShouldSavePayment( ! shouldSavePayment ) } /> { attributes.showReturnToCart && ( ) } { attributes.showPolicyLinks && } ); }; export default Block;