@shopgate/engage
Version:
Shopgate's ENGAGE library.
5 lines • 2.45 kB
JavaScript
function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{useCallback,useMemo}from'react';import{I18n,ContextMenu}from'@shopgate/engage/components';import{DIRECT_SHIP,ROPIS,BOPIS}from"../../constants";import{menuToggleButton,menuToggleContainer}from"./CartContextMenuChangeFulfillmentContent.style";import{useFulfillmentState}from"../../locations.hooks";var contextMenuClasses={button:menuToggleButton,container:menuToggleContainer};/**
* The CartContextMenuChangeFulfillmentContent component renders a context menu which enables
* switching the active fulfillment method for a cart item.
* @returns {JSX}
*/var CartContextMenuChangeFulfillmentContent=function CartContextMenuChangeFulfillmentContent(){var labelMapping=_defineProperty(_defineProperty(_defineProperty({},DIRECT_SHIP,'cart.change_fulfillment.direct_ship'),ROPIS,'cart.change_fulfillment.ropis'),BOPIS,'cart.change_fulfillment.bopis');var _useFulfillmentState=useFulfillmentState(),fulfillmentMethods=_useFulfillmentState.fulfillmentMethods,enabledFulfillmentMethods=_useFulfillmentState.enabledFulfillmentMethods,cartItem=_useFulfillmentState.meta.cartItem,changeFulfillment=_useFulfillmentState.changeFulfillment;var activeFulfillmentMethod=useMemo(function(){var _cartItem$fulfillment;return((_cartItem$fulfillment=cartItem.fulfillment)===null||_cartItem$fulfillment===void 0?void 0:_cartItem$fulfillment.method)||DIRECT_SHIP;},[cartItem.fulfillment]);var handleChangeFulfillment=useCallback(function(method){changeFulfillment(method,cartItem);},[cartItem,changeFulfillment]);var selectableFulfillmentMethods=useMemo(function(){if(!enabledFulfillmentMethods||!fulfillmentMethods){return[];}return fulfillmentMethods.filter(function(method){return enabledFulfillmentMethods.includes(method)&&method!==activeFulfillmentMethod;});},[activeFulfillmentMethod,enabledFulfillmentMethods,fulfillmentMethods]);var disabled=selectableFulfillmentMethods.length===0;return React.createElement(ContextMenu,{classes:contextMenuClasses,disabled:disabled},selectableFulfillmentMethods.map(function(method){return React.createElement(ContextMenu.Item,{key:method,onClick:function onClick(){return handleChangeFulfillment(method);}},React.createElement(I18n.Text,{string:labelMapping[method]}));}));};export default CartContextMenuChangeFulfillmentContent;