@shopgate/engage
Version:
Shopgate's ENGAGE library.
69 lines • 2.65 kB
JavaScript
import React, { useMemo, useCallback } from 'react';
import PropTypes from 'prop-types';
import Context from "./CartItemProvider.context";
import connect from "./CartItemProvider.connector";
/* eslint-disable max-len */
/**
* The CartItem Provider
* @param {Object} props The component props.
* @param {Object} props.cartItem The cart item data.
* @param {boolean} [props.isEditable=true] Whether the cart item is editable.
* @param {boolean} [props.isOrderDetails=false] Whether the component is used in order details.
* @param {boolean} [props.cartIsDirectShipOnly=false] Whether the cart is direct ship only.
* @param {boolean} [props.isCheckoutConfirmation=false] Whether the component is used in checkout confirmation.
* @param {boolean} [props.cartHasLineItemPromotions=false] Whether the cart has line item promotions.
* @param {Object|null} [props.location=null] The location data.
* @param {React.ReactNode} [props.children=null] Child components.
* @param {number} props.enabledFulfillmentMethodsCount The count of enabled fulfillment methods.
* @returns {JSX.Element} The rendered component.
*/
import { jsx as _jsx } from "react/jsx-runtime";
const CartItemProvider = ({
cartItem,
location,
isEditable,
children,
enabledFulfillmentMethodsCount,
isOrderDetails,
isCheckoutConfirmation,
cartIsDirectShipOnly,
cartHasLineItemPromotions
}) => {
const actions = useMemo(() => new Map(), []);
const registerFulfillmentAction = useCallback((action, callback) => {
actions.set(action, callback);
}, [actions]);
const invokeFulfillmentAction = useCallback((action, ...args) => {
if (!actions.has(action)) {
return;
}
actions.get(action).apply(void 0, args);
}, [actions]);
const value = useMemo(() => ({
registerFulfillmentAction,
invokeFulfillmentAction,
cartItem,
location,
isEditable,
isOrderDetails,
isCheckoutConfirmation,
cartIsDirectShipOnly,
cartHasLineItemPromotions,
merchantFulfillmentMethodsCount: enabledFulfillmentMethodsCount
}), [cartItem, location, enabledFulfillmentMethodsCount, invokeFulfillmentAction, isEditable, isOrderDetails, isCheckoutConfirmation, cartIsDirectShipOnly, cartHasLineItemPromotions, registerFulfillmentAction]);
return /*#__PURE__*/_jsx(Context.Provider, {
value: value,
children: children
});
};
CartItemProvider.defaultProps = {
children: null,
location: null,
isEditable: true,
isOrderDetails: false,
cartIsDirectShipOnly: false,
isCheckoutConfirmation: false,
cartHasLineItemPromotions: false
};
export default connect(CartItemProvider);
/* eslint-enable max-len */