woocommerce/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/billing/index.js

52 lines
1.1 KiB
JavaScript

/**
* External dependencies
*/
import {
createContext,
useContext,
useState,
useCallback,
} from '@wordpress/element';
/**
* Internal dependencies
*/
import { DEFAULT_STATE, DEFAULT_BILLING_CONTEXT_DATA } from './constants';
/**
* @typedef {import('@woocommerce/type-defs/contexts').BillingDataContext} BillingDataContext
*/
const BillingDataContext = createContext( DEFAULT_BILLING_CONTEXT_DATA );
/**
* @return {BillingDataContext} Returns data and functions related to billing.
*/
export const useBillingDataContext = () => {
return useContext( BillingDataContext );
};
export const BillingDataProvider = ( { children } ) => {
const [ billingData, setBillingDataState ] = useState( DEFAULT_STATE );
const setBillingData = useCallback( ( newData ) => {
setBillingDataState( ( prevState ) => ( {
...prevState,
...newData,
} ) );
}, [] );
/**
* @type {BillingDataContext}
*/
const billingDataValue = {
billingData,
setBillingData,
};
return (
<BillingDataContext.Provider value={ billingDataValue }>
{ children }
</BillingDataContext.Provider>
);
};