80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import clsx from 'clsx';
|
|
import { withFilteredAttributes } from '@woocommerce/shared-hocs';
|
|
import { FormStep } from '@woocommerce/blocks-components';
|
|
import { useCheckoutAddress } from '@woocommerce/base-context/hooks';
|
|
import { useSelect } from '@wordpress/data';
|
|
import { CHECKOUT_STORE_KEY } from '@woocommerce/block-data';
|
|
|
|
/**
|
|
* Internal dependencies
|
|
*/
|
|
import Block from './block';
|
|
import attributes from './attributes';
|
|
import { useCheckoutBlockContext } from '../../context';
|
|
import {
|
|
getBillingAddresssBlockTitle,
|
|
getBillingAddresssBlockDescription,
|
|
} from './utils';
|
|
|
|
const FrontendBlock = ( {
|
|
title,
|
|
description,
|
|
children,
|
|
className,
|
|
}: {
|
|
title: string;
|
|
description: string;
|
|
children: JSX.Element;
|
|
className?: string;
|
|
} ): JSX.Element | null => {
|
|
const { showFormStepNumbers } = useCheckoutBlockContext();
|
|
const checkoutIsProcessing = useSelect( ( select ) =>
|
|
select( CHECKOUT_STORE_KEY ).isProcessing()
|
|
);
|
|
const {
|
|
showCompanyField,
|
|
requireCompanyField,
|
|
showApartmentField,
|
|
requireApartmentField,
|
|
showPhoneField,
|
|
requirePhoneField,
|
|
} = useCheckoutBlockContext();
|
|
const { showBillingFields, forcedBillingAddress, useBillingAsShipping } =
|
|
useCheckoutAddress();
|
|
|
|
if ( ! showBillingFields && ! useBillingAsShipping ) {
|
|
return null;
|
|
}
|
|
|
|
title = getBillingAddresssBlockTitle( title, forcedBillingAddress );
|
|
description = getBillingAddresssBlockDescription(
|
|
description,
|
|
forcedBillingAddress
|
|
);
|
|
return (
|
|
<FormStep
|
|
id="billing-fields"
|
|
disabled={ checkoutIsProcessing }
|
|
className={ clsx( 'wc-block-checkout__billing-fields', className ) }
|
|
title={ title }
|
|
description={ description }
|
|
showStepNumber={ showFormStepNumbers }
|
|
>
|
|
<Block
|
|
showCompanyField={ showCompanyField }
|
|
requireCompanyField={ requireCompanyField }
|
|
showApartmentField={ showApartmentField }
|
|
requireApartmentField={ requireApartmentField }
|
|
showPhoneField={ showPhoneField }
|
|
requirePhoneField={ requirePhoneField }
|
|
/>
|
|
{ children }
|
|
</FormStep>
|
|
);
|
|
};
|
|
|
|
export default withFilteredAttributes( attributes )( FrontendBlock );
|