>getSearchOrgUnitLocationsAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\n\n/**\n * ICartIconViewState: Interface for Cart Icon View State.\n */\ninterface ICartIconViewState {\n isModalOpen: boolean;\n}\n\n/**\n * Render Cart lines.\n * @param cartLines - Flyout cart line view props.\n * @param props - Cart icon view props.-\n * @returns JSX Element.\n */\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n return cartLines.map((cartLine, index) => {\n const cartLineIndex = index;\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\n/**\n * Initiate total price.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\n const totalPrice = price\n ? props.context.cultureFormatter.formatCurrency(price)\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\n return cart && !cart.hasInvoiceLine ? (\n \n \n {props.resources.totalPriceFormatString}\n {totalPrice}\n \n
\n ) : (\n <>>\n );\n};\n\n/**\n * Initiate subtotal message.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderSubtotalMessage = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n return cart && !cart.hasInvoiceLine ? {props.resources.subTotalMessage}
: null;\n};\n\n/**\n *\n * CartIconView component.\n * @extends {React.PureComponent}\n */\nexport class CartIconView extends React.PureComponent<\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\n ICartIconViewState\n> {\n private isAutoDisplayTriggered: boolean;\n\n private readonly cartIconRef: React.RefObject = React.createRef();\n\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\n super(props);\n this.isAutoDisplayTriggered = false;\n this.state = {\n isModalOpen: false\n };\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n window.addEventListener('keydown', this._escFunction, false);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('keydown', this._escFunction, false);\n }\n }\n\n /**\n * Render Cart Item count.\n * @returns JSX Element.\n */\n public render(): JSX.Element | null {\n const cart = this.props.data.cart.result ?? undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n if (shouldShowMiniCart) {\n if (!this.isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isModalOpen: true });\n this.isAutoDisplayTriggered = true;\n } else if (!this.state.isModalOpen) {\n // If modal is closed, reset the flag.\n this.isAutoDisplayTriggered = false;\n }\n }\n return (\n \n \n \n \n {this.props.flyoutTitle}\n {this._renderCartItemCount(this.props)}\n {this._renderCartCloseIcon()}\n \n \n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\n {this.props.checkoutBlockedDueToUnavailableFunds}\n {renderCartlines(this.props.cartlines, this.props)}\n \n \n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n {renderSubtotalMessage(this.props)}\n {this.props.checkoutAsSignInUserButton}\n {this.props.checkoutAsGuestButton}\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\n \n {this.props.data.cart.result?.isEmpty ? (\n \n ) : null}\n \n \n \n \n );\n }\n\n /**\n * Initiate modal container.\n * @returns Inode props.\n */\n private readonly _modalContainer = (): INodeProps => {\n return {\n tag: Modal,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__minicartmodal-container',\n wrapClassName: 'ms-cart-icon__minicartmodal',\n isOpen: this.state.isModalOpen,\n toggle: this.closeModal\n };\n };\n\n /**\n * Initiate open modal.\n */\n private readonly _openModal = (): void => {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\n this.setState({\n isModalOpen: true\n });\n };\n\n /**\n * Initiate close modal.\n */\n private readonly closeModal = (): void => {\n this.cartIconRef.current?.focus();\n this.setState({\n isModalOpen: false\n });\n };\n\n /**\n * Initiate cart close Icon.\n * @returns JSX Element.\n */\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\n return ;\n };\n\n /**\n * Render Cart Item count.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\n private readonly _renderCartItemCount = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const defaultCartItemCount: number = 0;\n\n const cartItemlength = props.data.cart.result ? props.data.cart.result.totalItemsInCart : defaultCartItemCount;\n const cartItemCount = `${cartItemlength} ${props.resources.items}`;\n\n return {cartItemCount};\n };\n\n /**\n * Handle escape click to close modal.\n * @param event - On press of any key.\n */\n private readonly _escFunction = (event: KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Escape && this.state.isModalOpen) {\n this.closeModal();\n }\n };\n}\n\nexport default CartIconView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["props","resources","szfcartQtyLabel","clonedCartIcon","React","cartIcon","cartQtyLabel","Node","Object","assign","miniCartWrapper","renderModuleAttributes","className","config","showCartIcon","FlyoutContainer","flyoutTitle","checkoutBlockedDueToUnavailableFunds","CartlinesWrapper","_renderCartlines","cartLines","map","cartLine","index","miniCartItemWrapper","key","cartline","storeLocation","context","telemetry","error","cartlines","totalPrice","renderCheckoutAsSignInUserButton","checkoutAsSignInUserButton","href","_getUrlSync","getUrlSync","actionContext","getCheckoutPageUrl","goToCartButton","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","viewDictionary","cn","async","validateCartAsync","cart","propsContext","cartResult","cartVersion","shouldRetry","arguments","length","undefined","Version","warning","debug","AsyncResult","resolve","_validationResult$Val","validationResult","CartsDataActions","callerContext","bypassCache","Id","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","ArrayExtensions","hasElements","_modifiedProduct$Beha2","modifiedProduct","find","product","RecordId","ProductId","Behavior","MaximumQuantity","input","cartLineId","LineId","toString","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","_renderDeliveryLocation","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","orgUnitLocations","foundProductDeliveryOption","productDeliveryOptions","deliveryOption","delivery","DeliveryOptions","option","Code","DeliveryMode","location","Description","shippingText","_renderStoreLocation","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","reactNodes","foundProductAvailability","_foundProductAvailabi","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","push","_assembleNode","foundProductDeliveryOptions","imageSettings","gridSettings","typeName","removeButtonText","removeItemClickHandler","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","RemoveCartItem","removeCartItemAttribute","getTelemetryAttributes","productUrl","getProductUrlSync","MsDyn365","isBrowser","isChannelTypeB2B","requestContext","_cartline$CatalogId","fullUrl","URL","searchParams","set","CatalogId","data","hasError","Quantity","CartLineItemComponent","catalogs","currentQuantity","isOutOfStock","isQuantityEditable","primaryImageUrl","PrimaryImageUrl","displayMode","channelDeliveryOptionConfig","deliveryLocation","remove","Button","onClick","title","getMiniCartData","ctx","miniCartData","CartLines","hasInvoiceLine","getActiveCartProductsAction","ActiveCartProductsInput","then","catch","exception","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","apiSettings","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","constructor","super","retailMultiplePickUpOptionEnabled","getSortedCartLines","sortOrder","lines","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","_removeItemFromCartHandler","cartlineToRemove","this","result","cartLineIds","removeCartLines","state","isCartValid","getTelemetryObject","request","telemetryPageName","friendlyName","payload","TelemetryEvent","CheckOut","Checkout","checkoutBySignInAttributes","contentAction","etext","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","reaction","_this$props$data$cart","setState","_setQuantityLimitsFeatureFlag","_validateCart","componentDidUpdate","prevProps","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$chan","_this$props$data$feat","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","guestCheckoutUrl","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","app","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","channel","EmailDeliveryModeCode","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","includeFlyout","status","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","replace","flyoutTooltip","tag","UncontrolledTooltip","placement","hideArrow","trigger","target","shouldShowCloseButton","cartPageUrl","hideAriaHidden","price","TotalAmount","priceString","totalPriceFormatString","cultureFormatter","formatCurrency","featureState","feature","Name","IsEnabled","viewProps","CartIconComponent","cartLabel","classnames","disabled","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","renderView","_cart$result$cart$Ver","_cart$result","lastValidatedCartVersion","ValidationResultsPairs","isAbsoluteUrl","urlCheck","returnURL","msdyn365Commerce","origin","includes","_this$props$data$cata","PickupDeliveryModeCode","FlyoutCartLineItems","cartLinesSortOrder","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","quantityDisplayString","quantityDisplayText","salesAgreementPricePrompt","inputQuantityAriaLabel","discountStringText","originalPriceText","currentPriceText","shippingChargesText","removeCartButtonText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","pickupDeliveryModeCode","_featureStatuses$find","_featureStatuses$find2","featureStatuses","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find3","customerInformation","customerInfo","IsB2b","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","__decorate","observer","SearchOrgUnitLocationsInput","getCacheKey","getCacheObjectType","dataCacheType","createSearchOrgUnitLocationsInputFunc","inputData","getSearchOrgUnitLocationsAction","searchOrgUnitLocationsAsync","retailActionDataAction","createObservableDataAction","action","CartIconView","cartIconRef","_modalContainer","Modal","wrapClassName","isOpen","isModalOpen","toggle","closeModal","_openModal","onTelemetryClick","_this$cartIconRef$cur","current","focus","_renderCartCloseIcon","_renderCartItemCount","cartItemCount","items","_escFunction","event","keyCode","KeyCodes","Escape","isAutoDisplayTriggered","componentDidMount","addEventListener","componentWillUnmount","removeEventListener","_this$props$data$cart2","_this$props$data$cart3","_this$props$data$cart4","ref","isEmpty","slots","emptyCart","cartLineIndex","promoContentItem","_props$data$cart$resu","emptyPrice","renderTotalPrice","_props$data$cart$resu2","subTotalMessage","renderSubtotalMessage","continueShoppingButtonTitle","renderCartlines","module","exports","ReactDOM"],"sourceRoot":""}