{"version":3,"file":"static/js/9.4e066405f8691cff3e09.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout-delivery-options/mands-checkout-delivery-options.props.autogenerated.ts?d448","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout-delivery-options/components/mands-checkout-delivery-options.description.tsx?7431","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout-delivery-options/components/mands-checkout-delivery-options.error-message.tsx?5880","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout-delivery-options/components/mands-checkout-delivery-options.error-title.tsx?8e1a","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout-delivery-options/components/mands-checkout-delivery-options.radio-button.tsx?b304","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout-delivery-options/mands-checkout-delivery-options.tsx?0d75","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout-delivery-options/mands-checkout-delivery-options.view.tsx?cc89","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/checkout-errors/checkout-errors.ts?a8e9","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/components/alert.tsx?d3d3","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/components/get-line-items.tsx?4960","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/components/order-summary-lineitem.tsx?7ab6","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/components/get-order-summary.tsx?0bc5","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/components/guided-card.tsx?c438","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/components/guided-form.tsx?be83","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/components/place-order-button.tsx?7445","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/common/checkout.tsx?a81b","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/common/place-order.tsx?36d2","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/common/empty-active-cart.tsx?9da6","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/common/iframe.tsx?82b6","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/common/payment-instrument-message.ts?c237","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/common/index.ts?e3f6","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/mands-checkout.tsx?e376","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/methods/place-order.ts?064d","webpack://Msdyn365.Commerce.Online/./src/modules/mands-checkout/mands-checkout.view.tsx?bef5","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/common/utilities.ts?cc71","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/common/get-groups.tsx?065c","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/common/get-order-information.tsx?ae21","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/common/address.tsx?fb59","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/common/label.tsx?aff2","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/common/get-sales-line.tsx?a316","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/common/get-sales-lines.tsx?1058","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/components/get-help.tsx?0ab7","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/components/get-order-summary.tsx?8ac2","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/components/get-payment-methods.tsx?76ca","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/mands-order-details.tsx?682d","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-details/mands-order-details.view.tsx?45bc","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/common/label.tsx?84d5","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/actions/get-order-shipment-history.ts?10f2","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/common/utilities.ts?1362","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/common/get-groups.tsx?7acf","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/common/get-order-information.tsx?bc0f","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/common/address.tsx?37a8","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/common/get-sales-line.tsx?adff","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/common/get-sales-lines.tsx?43d3","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/components/get-sales-order.tsx?c979","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/actions/get-sales-order-originators.ts?4a93","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/mands-order-history.tsx?b74a","webpack://Msdyn365.Commerce.Online/./src/modules/mands-order-history/mands-order-history.view.tsx?cd3c","webpack://Msdyn365.Commerce.Online/./src/themes/mands/utilities/helper-functions.tsx?61ca","webpack://Msdyn365.Commerce.Online/./src/themes/mands/utilities/vendor-logo/vendor-logo.tsx?162c","webpack://Msdyn365.Commerce.Online/./src/themes/mands/views/cart.view.tsx?ccc5","webpack://Msdyn365.Commerce.Online/./src/themes/mands/views/components/product.component.tsx?e4ef","webpack://Msdyn365.Commerce.Online/./src/themes/mands/views/components/promocode.component.tsx?ef88","webpack://Msdyn365.Commerce.Online/./src/themes/mands/views/custom-components/get-line-items.tsx?b3f5","webpack://Msdyn365.Commerce.Online/./src/themes/mands/views/header.view.tsx?93d7","webpack://Msdyn365.Commerce.Online/./src/themes/mands/views/mands-checkout.view.tsx?00e5","webpack://Msdyn365.Commerce.Online/./src/modules/bulk-purchase/bulk-purchase.tsx?9fd5","webpack://Msdyn365.Commerce.Online/./src/modules/bulk-purchase/bulk-purchase.view.tsx?feac","webpack://Msdyn365.Commerce.Online/./src/validate-cart.ts?cd50","webpack://Msdyn365.Commerce.Online/./src/Common/get-product.ts?0a21","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://Msdyn365.Commerce.Online/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://Msdyn365.Commerce.Online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.tsx?d4e4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.view.tsx?d8c2","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.description.tsx?840c","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-message.tsx?8ca3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-title.tsx?f7e7","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.radio-button.tsx?9df9","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/checkout-delivery-options.tsx?6764","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?1e75","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-form.tsx?4540","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-item.tsx?d186","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-list.tsx?a3f3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/title.tsx?3b2f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/checkout-gift-card.tsx?8fc3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/checkout-gift-card.view.tsx?d99f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-input.tsx?cadb","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-label.tsx?e02b","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-text.tsx?895a","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/checkout-loyalty.tsx?8b4b","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/checkout-loyalty.view.tsx?b79f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/checkout.tsx?6737","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/checkout.view.tsx?e4cc","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/alert.tsx?cb1e","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-invoice-payment-summary.tsx?9549","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-line-items.tsx?92f8","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-order-summary.tsx?4a81","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/guided-card.tsx?58e0","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/guided-form.tsx?f018","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/place-order-button.tsx?9b41","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/methods/checkout.ts?7b6b","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/methods/place-order.ts?5aa0","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/components/get-form.tsx?e249","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/components/get-item.tsx?4862","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/gift-card-balance-check.tsx?d1f8","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/gift-card-balance-check.view.tsx?a0c9","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/components/cartlineitem.component.tsx?eb8c","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/components/promocode.component.tsx?d9d6","webpack://Msdyn365.Commerce.Online/./src/modules/header/components/header-preferred-store.tsx?ee9c","webpack://Msdyn365.Commerce.Online/./src/modules/header/components/logo.tsx?f27e","webpack://Msdyn365.Commerce.Online/./src/modules/header/components/nav-icon.tsx?2475","webpack://Msdyn365.Commerce.Online/./src/modules/header/header.tsx?e91a","webpack://Msdyn365.Commerce.Online/./src/modules/header/header.view.tsx?cf0f","webpack://Msdyn365.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/order-summary-lineitem.tsx?8a98","webpack://Msdyn365.Commerce.Online/./src/modules/product-collection/product-collection.tsx?4008","webpack://Msdyn365.Commerce.Online/./src/modules/product-collection/product-collection.view.tsx?5d36","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/add-to-list/add-to-cart-selected-items.tsx?de21","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?ca97","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-drawer.tsx?8701","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-form.tsx?5cbb","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-product.ts?187e","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-header-component.tsx?69b3","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-row-component.tsx?cd92","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-table/quick-order-grid-table-component.tsx?7cbc","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/quick-order-grid.tsx?fddf","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/utilities.ts?1806","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/quick-order-grid.view.tsx?f941","webpack://Msdyn365.Commerce.Online/./src/modules/ratings-histogram/component/components.tsx?f324","webpack://Msdyn365.Commerce.Online/./src/modules/ratings-histogram/ratings-histogram.tsx?f6bc","webpack://Msdyn365.Commerce.Online/./src/modules/ratings-histogram/ratings-histogram.view.tsx?5bff","webpack://Msdyn365.Commerce.Online/./src/modules/video-player/components/additional-content.tsx?b368","webpack://Msdyn365.Commerce.Online/./src/modules/video-player/video-player.tsx?53e5","webpack://Msdyn365.Commerce.Online/./src/modules/video-player/video-player.view.tsx?fedb"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IMandsCheckoutDeliveryOptions contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum filterDeliveryModeOption {\r\n none = 'none',\r\n filterOutNonCarrierDeliveryMode = 'filterOutNonCarrierDeliveryMode'\r\n}\r\n\r\nexport const enum useDefaultDeliveryOption {\r\n none = 'none',\r\n displaySelectedDeliveryOption = 'displaySelectedDeliveryOption',\r\n notDisplaySelectedDeliveryOption = 'notDisplaySelectedDeliveryOption'\r\n}\r\n\r\nexport interface IMandsCheckoutDeliveryOptionsConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n className?: string;\r\n headerChargesWithoutProration?: boolean;\r\n filterDeliveryModeOption?: filterDeliveryModeOption;\r\n useDefaultDeliveryOption?: useDefaultDeliveryOption;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IMandsCheckoutDeliveryOptionsResources {\r\n deliveryOptionsNotFound: string;\r\n genericErrorMessage: string;\r\n errorMessageTitle: string;\r\n ariaLabelText: string;\r\n priceFree: string;\r\n saveBtnLabel: string;\r\n editBtnLabel: string;\r\n cancelBtnLabel: string;\r\n deliveryOptionAriaLabel: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface IMandsCheckoutDeliveryOptionsProps extends Msdyn365.IModule {\r\n resources: IMandsCheckoutDeliveryOptionsResources;\r\n config: IMandsCheckoutDeliveryOptionsConfig;\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n}\n\n/**\n *\n * AddPaymentForm SFC\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description }) => {\n if (!description) {\n return null;\n }\n\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n *\n * AddPaymentForm SFC\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

{message}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorTitleProps {\n title?: string;\n}\n\n/**\n *\n * AddPaymentForm SFC\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\n if (!title) {\n return null;\n }\n\n return

{title}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n *\n * AddPaymentForm SFC\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Button, IModuleProps, INodeProps, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Address, CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { IMandsCheckoutDeliveryOptionsData } from './mands-checkout-delivery-options.data';\nimport { IMandsCheckoutDeliveryOptionsProps, filterDeliveryModeOption } from './mands-checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/mands-checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/mands-checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/mands-checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/mands-checkout-delivery-options.radio-button';\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { focusOnCheckoutError } from '../mands-checkout/checkout-errors/checkout-errors';\nexport interface ICheckoutDeliveryOptionsModuleProps\n extends IMandsCheckoutDeliveryOptionsProps,\n IModuleStateProps {}\n\nexport interface ICheckoutDeliveryOption {\n DeliveryOption: INodeProps;\n description?: React.ReactNode;\n price?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\n code: string;\n radioButton?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsList {\n DeliveryOptionsList: INodeProps;\n list: ICheckoutDeliveryOptionEdit[];\n}\n\nexport interface ICheckoutDeliveryOptionsError {\n Error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsViewState {\n isLoading: boolean;\n isError: boolean;\n isShowList: boolean;\n isShowSelected: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutDeliveryOptionsViewProps extends IMandsCheckoutDeliveryOptionsProps<{}> {\n CheckoutDeliveryOptions: IModuleProps;\n selectedItemId: string;\n deliveryOptionsData: DeliveryOption[];\n isLoading: boolean;\n errorMessageData: string;\n viewState: ICheckoutDeliveryOptionsViewState;\n deliveryOptions?: ICheckoutDeliveryOptionsList;\n deliveryOptionSelected?: ICheckoutDeliveryOption;\n errorMessage?: ICheckoutDeliveryOptionsError;\n waiting?: React.ReactNode;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n onDeliveryOptionChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n checkoutErrorRef?: React.RefObject;\n}\n/**\n * FilterDeliveryModeOption enum type.\n */\nexport const enum FilterDeliveryModeOption {\n /**\n * The None member.\n */\n None = 0,\n /**\n * The FilterOutNonCarrierDeliveryMode member.\n */\n FilterOutNonCarrierDeliveryMode = 1,\n /**\n * The DoNotFilterByChannel member.\n */\n DoNotFilterByChannel = 2\n}\n/**\n *\n * CheckoutDeliveryOptions component\n * @extends {React.Component>}\n */\n// @ts-ignore\n@withModuleState\n@observer\nclass CheckoutDeliveryOptions extends React.Component {\n @observable private selectedItemId: string = '';\n @observable private deliveryOptions: DeliveryOption[] = [];\n @observable private isLoading: boolean = false;\n @observable private errorMessage?: string;\n // VSI upgraded - START\n private cartDeliveryMode?: string;\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n public get expressPaymentDetailsFromCartPage() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n return properties ? JSON.parse(properties) : null;\n }\n public get isExpressPaymentAppliedInCartPage(): boolean {\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\n }\n public async componentDidMount(): Promise {\n this.props.data.checkout.then(async () => {\n await this.init();\n });\n\n // @ts-ignore: Compiler not reconizing condition check for function params\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n }\n );\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\n checkoutError.errorMessage\n ) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n /* VSI upgraded - END */\n public render(): JSX.Element | null {\n if (!this.canShip()) {\n return null;\n }\n const {\n moduleState: { isReady, isUpdating, hasError }\n } = this.props;\n console.log('delivery option');\n const isError = !this.isLoading && hasError;\n const isShowList = !this.isLoading && !hasError && isUpdating;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\n errorMessageData: this.errorMessage,\n viewState: {\n isLoading: this.isLoading,\n isError: isError,\n isShowList: isShowList,\n isShowSelected: isShowSelected,\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\n },\n CheckoutDeliveryOptions: {\n moduleProps: this.props,\n className: classname('ms-checkout-delivery-options', this.props.config.className)\n },\n deliveryOptions: {\n // @ts-ignore\n DeliveryOptionsList: {\n className: 'ms-checkout-delivery-options__list'\n },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n checkoutErrorRef: this.checkoutErrorRef,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n status: this.canShip() ? 'updating' : 'disabled'\n });\n /* VSI upgraded - START - To get saced delivery options on page reloading */\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n await this.loadDeliveryOptions();\n /* VSI upgraded - END */\n };\n\n private canShip = (): boolean => {\n return this.getCartLinesForShipping().length > 0;\n };\n\n private getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n const channelConfig = this.props.context.request.channel;\n\n // @ts-ignore\n return {\n // @ts-ignore\n DeliveryOption: {\n className: 'ms-checkout-delivery-options__option-selected'\n },\n description: ,\n price: (\n \n )\n };\n };\n\n private getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-ignore\n CheckoutDeliveryOptionsError: {\n tag: 'span',\n className: 'ms-address-form__error',\n role: 'alert',\n 'aria-live': 'assertive'\n },\n title: ,\n message: \n };\n };\n\n private getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n const channelConfig = this.props.context.request.channel;\n\n // @ts-ignore\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n return {\n // @ts-ignore\n DeliveryOption: { className: 'ms-checkout-delivery-options__option' },\n code: deliveryOption.Code || '',\n radioButton: (\n \n ),\n description: (\n \n ),\n price: (\n \n )\n };\n });\n };\n\n private getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save' } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change' } = this.props.resources;\n return (\n \n );\n };\n\n private getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n );\n };\n\n private setError = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.errorMessage = errorMessage;\n };\n\n private clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private onSave = (): void => {\n this.onSubmit();\n };\n\n private onEdit = (): void => {\n this.props.telemetry.information('Delivery options onEdit is called.');\n this.clearError();\n this.onUpdating();\n };\n\n private onSubmit = (): void => {\n this.props.telemetry.information('Delivery options onSubmit is called.');\n /* VSI upgraded - 10.0.14 - START */\n // tslint:disable-next-line:no-floating-promises\n this.updateCartDeliverySpecification(this.selectedItemId);\n /* VSI upgraded - 10.0.14 - END */\n };\n\n private onCancel = (): void => {\n this.props.telemetry.information('Delivery options onCancel is called.');\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\n } else {\n this.onUpdating();\n }\n };\n\n private getSavedDeliveryOption = (): string | undefined => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\n };\n /* VSI upgraded - START - Updated following function and removed unused updateCartLineDeliverySpecification() function */\n private updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\n if (deliveryModeId.trim() === '') {\n return;\n }\n\n const { resources } = this.props;\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const updateCartDeliverySpecificationInput = {\n deliveryModeId: deliveryModeId,\n shippingAddress: checkoutState.shippingAddress\n };\n\n this.clearError();\n this.onPending();\n\n await checkoutState.checkoutCart\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then(response => {\n if (response.status === 'FAILED') {\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\n // this.setError(resources.genericErrorMessage);\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\n } else {\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n }\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n })\n .catch(() => {\n this.setError(resources.genericErrorMessage);\n });\n };\n /* VSI upgraded - START - */\n private getCartLinesForShipping = (): CartLine[] => {\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n return ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode !== pickupDeliveryModeCode : cartLine\n );\n };\n private getDeliveryOptions = async (shippingAddress: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n const cartId = (cartState.cart as Cart).Id;\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // first store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n // clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({ cart });\n }\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const response = await getDeliveryOptionsAsync(\n { callerContext: context.actionContext, queryResultSettings: {} },\n cartId,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n );\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n if (response && response.length) {\n this.deliveryOptions = response;\n }\n } catch (error) {\n this.setError(resources.genericErrorMessage);\n }\n if (this.deliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else {\n /* START VSI Customization - {change in the condition of if !ShippingAddress to ShippingAddress} */\n if (\n this.cartDeliveryMode &&\n this.isDeliveryModeExists(this.cartDeliveryMode) &&\n this.props.data.checkout.result?.checkoutCart.cart.ShippingAddress\n ) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n }\n /* END VSI Customization - {change in the condition of if !ShippingAddress to ShippingAddress} */\n }\n this.isLoading = false;\n }\n };\n // Added following function\n private isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n // Updated following function\n private loadDeliveryOptions = async (): Promise => {\n const shippingAddress = this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress;\n if (this.canShip() && shippingAddress) {\n await this.getDeliveryOptions(shippingAddress);\n }\n };\n /* VSi upgraded - END */\n private onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private onReady = () => {\n this.props.moduleState.onReady();\n };\n\n private onUpdating = () => {\n this.props.moduleState.onUpdating();\n };\n\n private onPending = () => {\n this.props.moduleState.onPending();\n };\n}\n\nexport default CheckoutDeliveryOptions;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport {\n ICheckoutDeliveryOption,\n ICheckoutDeliveryOptionEdit,\n ICheckoutDeliveryOptionsError,\n ICheckoutDeliveryOptionsList,\n ICheckoutDeliveryOptionsViewProps\n} from './mands-checkout-delivery-options';\n\nconst DeliveryOptionList: React.FC = ({ DeliveryOptionsList, list }) => {\n if (!list || list.length === 0) {\n return null;\n }\n\n return (\n \n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\n return (\n \n {deliveryOption.radioButton}\n {deliveryOption.description}\n {deliveryOption.price}\n \n );\n })}\n \n );\n};\n\nconst DeliveryOptionSelected: React.FC = ({ DeliveryOption, description, price }) => {\n return (\n \n {description}\n {price}\n \n );\n};\n\nconst ErrorMessage: React.FC = ({ Error, title, message }) => {\n return (\n \n {title}\n {message}\n \n );\n};\n\nconst CheckoutDeliveryOptionsView: React.FC = props => {\n const {\n CheckoutDeliveryOptions,\n viewState,\n deliveryOptions,\n deliveryOptionSelected,\n errorMessage,\n waiting,\n saveButton,\n editButton,\n cancelButton,\n checkoutErrorRef\n } = props;\n\n return (\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\n \n {viewState.isLoading && waiting}\n {viewState.isError && errorMessage && }\n {viewState.isShowList && deliveryOptions && }\n {viewState.isShowSelected && deliveryOptionSelected && }\n {viewState.isShowSaveButton && saveButton}\n {viewState.isShowEditButton && editButton}\n {viewState.isShowCancelButton && cancelButton}\n \n );\n};\n\nexport default CheckoutDeliveryOptionsView;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport {\r\n CheckoutModule,\r\n ErrorCode,\r\n ErrorLocation,\r\n ErrorMessageResource,\r\n getCheckoutState,\r\n ICheckoutError,\r\n ICheckoutState\r\n} from '@msdyn365-commerce/global-state/';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- create global class\r\nexport class CheckoutErrors {\r\n public static readonly ActionError: ICheckoutError = {\r\n errorCode: ErrorCode.ActionError,\r\n errorMessageResource: ErrorMessageResource.checkoutTimeoutErrorMessage,\r\n errorLocation: ErrorLocation.Checkout\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard,\r\n errorMessageResource: ErrorMessageResource.blockedLoyaltyCardErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue,\r\n errorMessageResource: ErrorMessageResource.customerAccountLimitSignDifferentFromAmountDueErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsAvailableCreditLimitErrorMessage,\r\n errorLocation: ErrorLocation.Checkout\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices,\r\n errorMessageResource: ErrorMessageResource.customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_FraudRisk: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_FraudRisk,\r\n errorMessageResource: ErrorMessageResource.fraudRiskErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed,\r\n errorMessageResource: ErrorMessageResource.giftCardBalanceInquiryFailedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutGiftCard\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,\r\n errorMessageResource: ErrorMessageResource.giftCardCurrencyMismatchErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutGiftCard\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion,\r\n errorMessageResource: ErrorMessageResource.invalidCartVersionErrorMessage,\r\n errorLocation: ErrorLocation.Checkout\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber,\r\n errorMessageResource: ErrorMessageResource.invalidLoyaltyCardNumberErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\r\n errorMessageResource: ErrorMessageResource.invalidPaymentRequestErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\r\n errorMessageResource: ErrorMessageResource.invalidPaymentRequestConsoleErrorMessage,\r\n errorLocation: ErrorLocation.Console\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines,\r\n errorMessageResource: ErrorMessageResource.missingRequiredCartTenderLinesErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed,\r\n errorMessageResource: ErrorMessageResource.multipleCustomerAccountPaymentsNotAllowedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender,\r\n errorMessageResource: ErrorMessageResource.noMoreThanOneLoyaltyTenderErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry,\r\n errorMessageResource: ErrorMessageResource.noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutGiftCard\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard,\r\n errorMessageResource: ErrorMessageResource.noTenderLoyaltyCardErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints,\r\n errorMessageResource: ErrorMessageResource.notEnoughRewardPointsErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided,\r\n errorMessageResource: ErrorMessageResource.paymentAlreadyVoidedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance,\r\n errorMessageResource: ErrorMessageResource.paymentAmountExceedsGiftBalanceErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutGiftCard\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\r\n errorMessageResource: ErrorMessageResource.paymentRequiresMerchantPropertiesErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\r\n errorMessageResource: ErrorMessageResource.paymentRequiresMerchantPropertiesConsoleErrorMessage,\r\n errorLocation: ErrorLocation.Console\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount,\r\n errorMessageResource: ErrorMessageResource.paymentUsingUnauthorizedAccountErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed,\r\n errorMessageResource: ErrorMessageResource.refundAmountMoreThanAllowedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutLoyalty\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment,\r\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired,\r\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported,\r\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment,\r\n errorMessageResource: ErrorMessageResource.unableToCancelPaymentErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo,\r\n errorMessageResource: ErrorMessageResource.unableToReadCardTokenInfoErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult: ICheckoutError = {\r\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult,\r\n errorMessageResource: ErrorMessageResource.unableToRetrieveCardPaymentAcceptResultErrorMessage,\r\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\r\n };\r\n\r\n public static readonly checkoutErrorsList: ICheckoutError[] = [\r\n CheckoutErrors.ActionError,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_FraudRisk,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo,\r\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult\r\n ];\r\n}\r\n\r\nexport async function setCheckoutErrors(\r\n errorCode: string,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n resources: any,\r\n isExpressCheckoutApplied: boolean,\r\n ctx: IActionContext,\r\n apiError?: string | undefined\r\n): Promise {\r\n let clientCheckoutError: ICheckoutError | undefined;\r\n const consoleCheckoutErrors: ICheckoutError[] = [];\r\n\r\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\r\n ctx.telemetry.exception(error);\r\n throw error;\r\n });\r\n\r\n // find the checkout errors\r\n for (const checkoutError of CheckoutErrors.checkoutErrorsList) {\r\n if (errorCode === checkoutError.errorCode) {\r\n if (checkoutError.errorLocation === ErrorLocation.Console) {\r\n const consoleCheckoutError: ICheckoutError = {\r\n errorCode: checkoutError.errorCode,\r\n errorMessageResource: checkoutError.errorMessageResource,\r\n errorLocation: checkoutError.errorLocation\r\n };\r\n consoleCheckoutErrors.push(consoleCheckoutError);\r\n } else {\r\n if (clientCheckoutError) {\r\n ctx.telemetry.exception(new Error('Invalid number of client checkout errors.'));\r\n throw new Error('Invalid number of client checkout errors.');\r\n } else {\r\n clientCheckoutError = {\r\n errorCode: checkoutError.errorCode,\r\n errorMessageResource: checkoutError.errorMessageResource,\r\n errorLocation: checkoutError.errorLocation\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n // log the console checkout errors\r\n for (const consoleCheckoutError of consoleCheckoutErrors) {\r\n consoleCheckoutError.errorMessage = getCheckoutErrorMessage(resources, consoleCheckoutError.errorMessageResource!, apiError!);\r\n console.log(consoleCheckoutError.errorMessage);\r\n }\r\n\r\n // handle the client checkout error\r\n if (clientCheckoutError) {\r\n clientCheckoutError.errorMessage = getCheckoutErrorMessage(resources, clientCheckoutError.errorMessageResource!, apiError!);\r\n\r\n if (isExpressCheckoutApplied && clientCheckoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument) {\r\n clientCheckoutError.errorLocation = ErrorLocation.Checkout;\r\n }\r\n\r\n await checkoutState.updateCheckoutError({ newCheckoutError: clientCheckoutError });\r\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: true });\r\n } else {\r\n // if could not map to any checkout error(s), show the API error message over generic error\r\n if (consoleCheckoutErrors.length === 0) {\r\n const genericError = {\r\n errorLocation: ErrorLocation.Checkout\r\n };\r\n if (apiError) {\r\n genericError['errorMessage'] = apiError;\r\n } else {\r\n genericError['errorMessage'] = resources.genericErrorMessage;\r\n }\r\n\r\n await checkoutState.updateCheckoutError({ newCheckoutError: genericError });\r\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: true });\r\n }\r\n }\r\n}\r\n\r\nexport async function focusOnCheckoutError(checkoutErrorRef: React.RefObject, ctx: IActionContext): Promise {\r\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\r\n ctx.telemetry.exception(error);\r\n throw error;\r\n });\r\n\r\n checkoutErrorRef.current && checkoutErrorRef.current.scrollIntoView();\r\n\r\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule.None });\r\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: false });\r\n}\r\n\r\nexport async function setCheckoutErrorFocus(checkoutModuleId: string, ctx: IActionContext): Promise {\r\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\r\n ctx.telemetry.exception(error);\r\n throw error;\r\n });\r\n\r\n for (const checkoutModule of Object.keys(CheckoutModule)) {\r\n if (checkoutModuleId.includes(CheckoutModule[checkoutModule])) {\r\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule[checkoutModule] });\r\n return;\r\n }\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction getCheckoutErrorMessage(resources: any, errorMessageResource: ErrorMessageResource, errorMessageFromAPI: string): string {\r\n const errorResource = Object.keys(resources).find(resource => resource === errorMessageResource);\r\n // return API error when error resource string is not found in checkout definition file\r\n return errorResource !== undefined ? resources[errorResource] : errorMessageFromAPI;\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface IAlertProps {\n message: string;\n}\n\nconst CheckoutAlert: React.FC = ({ message }) => (\n

\n {message}\n

\n);\n\nexport default CheckoutAlert;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport * as React from 'react';\nimport { IMandsCheckoutData } from '../mands-checkout.data';\nimport { IMandsCheckoutProps } from '../mands-checkout.props.autogenerated';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\n\ntype deliveryType = 'pickup' | 'ship';\n\nexport interface IPickUpAtStore {\n PickUpAtStore: INodeProps;\n label: React.ReactNode;\n location: React.ReactNode;\n}\n\nexport interface ILineItem {\n LineId: string;\n LineItem: INodeProps;\n item?: React.ReactNode;\n pickUpAtStore?: IPickUpAtStore;\n}\n\nexport interface ILineItemDeliveryGroup {\n LineItemDeliveryGroup: INodeProps;\n LineItemList: INodeProps;\n heading: React.ReactNode;\n lineItems: ILineItem[];\n}\n\nexport interface ILineItems {\n LineItems: INodeProps;\n Header: INodeProps;\n heading: React.ReactNode;\n editLink: React.ReactNode;\n itemsForPickup?: ILineItemDeliveryGroup;\n itemsForShip?: ILineItemDeliveryGroup;\n}\n\n// tslint:disable-next-line:max-func-body-length\nexport const getLineItems = (input: IMandsCheckoutProps): ILineItems | undefined => {\n const _getDeliveryLocation = (cartLine: CartLine): string => {\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\n return '';\n }\n\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\n return location.InventoryLocationId === cartLine.FulfillmentStoreId;\n });\n\n return locationMatch && locationMatch.OrgUnitName;\n };\n\n const _getProduct = (productId: number): SimpleProduct | undefined => {\n const products = get(input, 'data.products.result') || [];\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n };\n\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\n const {\n id,\n typeName,\n context,\n config: { imageSettings, showShippingChargesForLineItems },\n resources: {\n quantityDisplayString,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n configString,\n inputQuantityAriaLabel,\n discountStringText,\n shippingCharges\n },\n context: {\n request: { gridSettings }\n }\n } = input;\n const catalogs = input.data.catalogs?.result;\n\n if (!product) {\n return;\n }\n const currencyCode = get(input, 'context.request.channel.Currency');\n\n return (\n \n );\n };\n\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\n const {\n resources: { pickUpAtStoreWithLocationText }\n } = input;\n\n return {\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\n label: {pickUpAtStoreWithLocationText},\n location:
{pickupDeliveryLocation}
\n };\n };\n\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n return items.map(cartLine => {\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const isPickUp = cartLine.DeliveryMode === pickupDeliveryModeCode;\n return {\n LineId: cartLine.LineId || '',\n LineItem: { className: 'ms-checkout__line-item' },\n item: _getLineItemComponent(cartLine),\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined\n };\n });\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\n } = input;\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title = type === 'ship' ? shippingCountCheckoutLineItem : inStorePickUpLabel;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _countItems = (items: CartLine[]): number => {\n return items.reduce((count, item) => {\n return count + (item.Quantity || 0);\n // tslint:disable-next-line:align\n }, 0);\n };\n\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n return type === 'ship'\n ? cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode !== pickupDeliveryModeCode)\n : cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === pickupDeliveryModeCode);\n };\n\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\n const items = _filterItemsByDiliveryType(type);\n\n if (items.length === 0) {\n return undefined;\n }\n\n const count = _countItems(items);\n const title = _getGroupTitleComponent(count, type);\n\n return {\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n heading:
{title}
,\n lineItems: _getLineItemsComponents(items)\n };\n };\n\n const _getLineItems = (): ILineItems | undefined => {\n const {\n context,\n config: { lineItemsHeading },\n data: { products },\n resources: { editCartText }\n } = input;\n\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n\n if (!cart || !cart.CartLines || !cart.CartLines.length || !products) {\n return undefined;\n }\n\n return {\n LineItems: { className: 'ms-checkout__line-items' },\n Header: { className: 'ms-checkout__line-items-header' },\n heading: lineItemsHeading && ,\n editLink: (\n \n {editCartText}\n \n ),\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\n itemsForShip: _getLineItemsByDeliveryType('ship')\n };\n };\n\n return _getLineItems();\n};\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { Cart, ChannelConfiguration, GiftCard } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\r\nexport interface IOrderSummaryProps {\r\n subTotalLabel: string;\r\n shippingLabel: string;\r\n taxLabel: string;\r\n orderTotalLabel: string;\r\n loyaltyLabel?: string;\r\n giftcardLabel?: string;\r\n totalDiscountsLabel: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n cart: Cart;\r\n channelConfiguration: ChannelConfiguration;\r\n id: string;\r\n typeName: string;\r\n freeText?: string;\r\n toBeCalculatedText?: string;\r\n checkoutState?: ICheckoutState;\r\n customerAccountLabel?: string;\r\n}\r\n\r\nexport interface IOrderSummaryLines {\r\n subtotal: React.ReactNode;\r\n shipping?: React.ReactNode;\r\n tax: React.ReactNode;\r\n orderTotal: React.ReactNode;\r\n totalDiscounts?: React.ReactNode;\r\n giftCard?: React.ReactNode;\r\n loyalty?: React.ReactNode;\r\n customerAccount?: React.ReactNode;\r\n}\r\n\r\ninterface IOrderSummaryLineProps {\r\n label: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n price?: number;\r\n freeText?: string;\r\n toBeCalculatedText?: string;\r\n id: string;\r\n typeName: string;\r\n cssLabel: string;\r\n}\r\n\r\ninterface IShippingOrderLine {\r\n cart: Cart;\r\n channelConfiguration: ChannelConfiguration;\r\n canShip?: boolean;\r\n hasDeliveryMethod?: boolean;\r\n hasShippingMethod?: boolean;\r\n freightFee?: number;\r\n}\r\n\r\nconst OrderSummaryLine: React.FC = ({\r\n price,\r\n label,\r\n context,\r\n id,\r\n typeName,\r\n toBeCalculatedText,\r\n freeText,\r\n cssLabel\r\n}) => {\r\n return (\r\n

\r\n {label}\r\n {price || price === 0 ? (\r\n \r\n ) : (\r\n {toBeCalculatedText}\r\n )}\r\n

\r\n );\r\n};\r\n\r\nconst _buildOrderSummarySection = (\r\n props: IOrderSummaryProps,\r\n price: number | undefined,\r\n label: string,\r\n cssLabel: string\r\n): React.ReactNode => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\r\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\r\n};\r\n\r\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\r\n const giftCardCounter = (count: number, giftCard: GiftCard) => {\r\n return count + (giftCard.Balance || 0);\r\n };\r\n const giftCardTotalValue = (checkoutState.giftCards || []).reduce(giftCardCounter, 0);\r\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\r\n return Math.min(giftCardTotalValue, amount);\r\n};\r\n\r\nconst getDeliveryConfiguration = (cart: Cart, channelConfiguration: ChannelConfiguration): IShippingOrderLine => {\r\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\r\n const cartLines = cart.CartLines || [];\r\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\r\n\r\n const freightFeeFromCart = cart.ChargeAmount;\r\n\r\n const freightFeeFromCartLines = cartLines.reduce((count, cartLine) => {\r\n return (\r\n count +\r\n (cartLine.ChargeLines || []).reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.IsShipping && chargeLine.CalculatedAmount ? chargeLine.CalculatedAmount : 0);\r\n }, 0)\r\n );\r\n }, 0);\r\n\r\n const freightFee =\r\n (cart.ChargeLines && cart.ChargeLines.length && cart.DeliveryMode && cart.DeliveryMode.length && freightFeeFromCart) ||\r\n freightFeeFromCartLines;\r\n\r\n const canShip =\r\n deliveryModes.some(deliveryMode => deliveryMode !== pickupDeliveryModeCode) ||\r\n (cart.ChargeLines && cart.ChargeLines.length && cart.DeliveryMode && cart.DeliveryMode.length > 0);\r\n const hasDeliveryMethod =\r\n deliveryModes.some(deliveryMode => !!deliveryMode) ||\r\n (cart.ChargeLines && cart.ChargeLines.length && cart.DeliveryMode && cart.DeliveryMode.length > 0);\r\n const hasShippingMethod =\r\n deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== pickupDeliveryModeCode) ||\r\n (cart.ChargeLines && cart.ChargeLines.length && cart.DeliveryMode && cart.DeliveryMode.length > 0);\r\n return {\r\n canShip,\r\n hasDeliveryMethod,\r\n hasShippingMethod,\r\n freightFee\r\n } as IShippingOrderLine;\r\n};\r\n\r\nexport const OrderSummary = (props: IOrderSummaryProps) => {\r\n const { NetPrice, TaxAmount, DiscountAmountWithoutTax = 0, TotalAmount } = props.cart;\r\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(props.cart, props.channelConfiguration);\r\n const reactNodes: IOrderSummaryLines = {\r\n subtotal: _buildOrderSummarySection(props, NetPrice, props.subTotalLabel, 'net-price'),\r\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, props.taxLabel, 'tax-amount'),\r\n orderTotal: _buildOrderSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\r\n };\r\n\r\n if (canShip) {\r\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, props.shippingLabel, 'shipping');\r\n }\r\n if (props.checkoutState) {\r\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\r\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\r\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\r\n\r\n if (loyaltyAmount > 0) {\r\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\r\n }\r\n\r\n if (giftCardAmount > 0) {\r\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, props.giftcardLabel || 'Gift card amount', 'gift-card');\r\n }\r\n\r\n reactNodes.orderTotal = _buildOrderSummarySection(\r\n { ...props, freeText: undefined },\r\n totalAmountAfterGiftCard,\r\n props.orderTotalLabel,\r\n 'total'\r\n );\r\n }\r\n\r\n if (DiscountAmountWithoutTax > 0) {\r\n reactNodes.totalDiscounts = _buildOrderSummarySection(\r\n props,\r\n -DiscountAmountWithoutTax,\r\n props.totalDiscountsLabel,\r\n 'total-discounts'\r\n );\r\n }\r\n\r\n return reactNodes;\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IOrderSummaryLines, OrderSummary } from './order-summary-lineitem';\nimport { Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport get from 'lodash/get';\nimport * as React from 'react';\nimport { IMandsCheckoutData } from '../mands-checkout.data';\nimport { IMandsCheckoutProps } from '../mands-checkout.props.autogenerated';\n\nexport interface IOrderSummary {\n orderSummaryProps: INodeProps;\n heading?: React.ReactNode;\n lines?: IOrderSummaryLines;\n}\nexport const getOrderSummary = (input: IMandsCheckoutProps): IOrderSummary => {\n const {\n config: { orderSummaryHeading },\n data: { checkout },\n resources: {\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n customerAccountLabel\n },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutState = get(checkout, 'result');\n const cart = get(checkout, 'result.checkoutCart.cart');\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\n const channelConfiguration = context.request.channel!;\n\n return {\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\n heading: orderSummaryHeading && ,\n lines: showLineItems\n ? OrderSummary({\n checkoutState,\n cart,\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n context,\n typeName,\n id,\n channelConfiguration,\n telemetry,\n customerAccountLabel\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport get from 'lodash/get';\nimport { focusOnCheckoutError, setCheckoutErrorFocus } from '../checkout-errors';\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nexport interface ICheckoutGuidedCardProps {\n id?: string;\n step: number;\n title?: HeadingType;\n disabled?: boolean; // module is not available\n isActive?: boolean; // step === currentStep\n isVisted?: boolean; // step < currentStep\n isExpanded?: boolean;\n isReady?: boolean;\n isPending?: boolean;\n isUpdating?: boolean;\n isSubmitting?: boolean;\n isMobile?: boolean;\n hasInitialized?: boolean;\n hasControlGroup?: boolean;\n children: React.ReactNode;\n shouldFocus?: boolean;\n moduleState?: IModuleStateManager;\n actionContext?: IActionContext;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n onNext(): void;\n}\n\n/**\n *\n * CheckoutGuidedCard component\n * @extends {React.Component}\n */\nclass CheckoutGuidedCard extends React.PureComponent {\n private editButtonRef: React.RefObject = React.createRef();\n private formCardRef: React.RefObject = React.createRef();\n\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\n /**\n * Move to next step when current step is ready\n */\n const { isActive, isReady, onNext, isVisted, onEdit, shouldFocus, children, moduleState, actionContext } = this.props;\n\n // Move to next step after completing the current step\n if (isActive && isReady) {\n onNext();\n }\n\n // Set the focus to Edit button once edit button appear\n // (It happens when current step switch to isReady status)\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\n const canEdit = isReady && isVisted && !!onEdit;\n if (!prevCanEdit && canEdit) {\n this.focusOnEditButton();\n this.scrollToTitle();\n }\n\n // Set the focus to the first focusable element\n // (It happens when current step switch to isUpdating status)\n if (prevProps.isReady && !isReady) {\n this.focusOnFirstFocusableElement();\n }\n\n // Set the focus for the checkout error\n if (shouldFocus && actionContext) {\n const childrenModules = this._getModules(children);\n // Set the focus for the module within the checkout section container\n if (childrenModules.length > 0) {\n for (const childModule of childrenModules) {\n const childId = this._getId(childModule);\n const childState = moduleState?.getModule(childId);\n if (childState?.hasError) {\n setCheckoutErrorFocus(childId, actionContext);\n return;\n }\n }\n } else {\n focusOnCheckoutError(this.formCardRef, actionContext);\n }\n }\n }\n\n public render(): JSX.Element | null {\n const {\n title,\n disabled,\n isExpanded,\n isActive,\n isVisted,\n children,\n isReady,\n isPending,\n isUpdating,\n hasInitialized,\n hasControlGroup,\n onEdit,\n resource\n } = this.props;\n const { changeBtnLabel } = resource;\n\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\n\n return (\n \n
\n {this.getTitle()}\n\n {canEdit && (\n \n {changeBtnLabel}\n \n )}\n
\n\n \n
{children}
\n\n {this.renderFooder()}\n \n \n );\n }\n\n private renderFooder = (): JSX.Element | null => {\n const { isVisted, isReady, isSubmitting, hasControlGroup, onCancel, onSubmit, resource } = this.props;\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\n\n const canSubmit = !isReady && onSubmit;\n const canCancel = !isReady && isVisted && onCancel;\n\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\n return null;\n }\n\n return (\n
\n {canSubmit && (\n \n {isVisted ? saveBtnLabel : saveAndContinueBtnLabel}\n \n )}\n {canCancel && (\n \n )}\n
\n );\n };\n\n private focusOnFirstFocusableElement = (): void => {\n // eslint-disable-next-line react/no-find-dom-node\n const node = ReactDOM.findDOMNode(this) as HTMLElement;\n const focussableElements = `\n a:not([disabled]),\n button:not([disabled]),\n input[type=submit]:not([disabled]),\n input[type=checkbox]:not([disabled]),\n input[type=text]:not([disabled]),\n input[type=radio]:not([disabled]),\n input[type=password]:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\n `;\n\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\n child && child.focus && child.focus();\n };\n\n private focusOnEditButton = (): void => {\n // Focus on edit button\n const editButton =\n this.editButtonRef &&\n this.editButtonRef.current &&\n this.editButtonRef.current.focus &&\n (this.editButtonRef.current as HTMLElement);\n editButton && editButton.focus();\n };\n\n private scrollToTitle = (): void => {\n // scroll window to the title of the step that was just completed only in mobile viewport\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\n formCard && formCard.scrollIntoView();\n };\n\n private getTitle = (): JSX.Element => {\n const { step, title } = this.props;\n const { headingTag: Tag = 'h2', text = '' } = title || {};\n return (\n \n {step + 1}. \n {text && {text}}\n \n );\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _getModules = (item: React.ReactNode): any[] => {\n return get(item, 'props.modules.primary') || [];\n };\n private readonly _getId = (item: React.ReactNode): string => {\n return get(item, 'id') || '';\n };\n}\n\nexport default CheckoutGuidedCard;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\nimport get from 'lodash/get';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport GuidedCard from '../components/guided-card';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\nexport interface ICheckoutGuidedFormProps {\n items: React.ReactNode[];\n moduleState: IModuleStateManager;\n disableGuidedCheckoutFlow?: boolean;\n isMobile?: boolean;\n isEditor?: boolean;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n requestContext?: ICoreContext;\n shouldEnableCheckoutErrorDisplayMessaging?: boolean;\n shouldFocusOnCheckoutError?: boolean | undefined;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n}\n\ninterface ICheckoutGuidedFormState {\n currentStep: number;\n}\n\nconst paymentInstrumentModuleId = 'payment-instrument';\n\n/**\n *\n * CheckoutGuidedForm component\n * @extends {React.Component}\n */\n@observer\nclass CheckoutGuidedForm extends React.Component {\n public state: ICheckoutGuidedFormState = {\n currentStep: 0\n };\n\n public componentDidMount(): void {\n /**\n * Append child modules\n */\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\n this.props.moduleState.init({ childIds });\n }\n\n public render(): JSX.Element | null {\n const { moduleState, items, resource } = this.props;\n\n if (!items || !moduleState) {\n return null;\n }\n let previousModuleHasError = false;\n const childModule = this._enableAfterModule();\n\n return (\n
\n {items.map((item: React.ReactNode) => {\n const childId = this.getId(item);\n const step = this.getStep(childId);\n const title = this.getHeading(item);\n const state = this.props.moduleState.getModule(childId);\n const {\n isReady,\n isPending,\n isUpdating,\n isDisabled,\n onEdit,\n onCancel,\n onSubmit,\n hasModuleState,\n hasInitialized,\n hasError\n } = state || ({} as IModuleStateManager);\n const shouldFocus =\n !!this.props.shouldEnableCheckoutErrorDisplayMessaging &&\n !!this.props.shouldFocusOnCheckoutError &&\n !previousModuleHasError &&\n hasError;\n previousModuleHasError = previousModuleHasError || shouldFocus;\n return (\n \n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\n \n );\n })}\n
\n );\n }\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _enableAfterModule = (): string => {\n const childIds: string[] = this.props.items.map((item: React.ReactNode) => get(item, 'props.id')).filter(Boolean);\n let id: string = '';\n for (let i = 0; i < childIds.length - 1; i++) {\n const childId = childIds[i];\n const nextChildId = childIds[i + 1];\n if (this._isPaymentSectionContainer(childId) && nextChildId) {\n id = nextChildId;\n }\n }\n return id;\n };\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n const sectionState = this.props.moduleState.getModule(moduleId);\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n sectionState.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n if (isPaymentSectionContainer) {\n return true;\n }\n return false;\n };\n\n private getEnabledModules = (): string[] => {\n const {\n moduleState: { childIds, getModule }\n } = this.props;\n return childIds.filter((childId: string) => {\n const state = getModule(childId);\n return !!state && !state.isDisabled;\n });\n };\n\n private getStep = (id: string): number => {\n return this.getEnabledModules().indexOf(id);\n };\n\n private getId = (item: React.ReactNode): string => {\n return get(item, 'props.id') || '';\n };\n\n private getHeading = (item: React.ReactNode): Heading => {\n return get(item, 'props.config.heading') || '';\n };\n\n private isExpanded = (step: number, moduleChildId: string, childId: string): boolean => {\n if (this.props.isEditor) {\n // Editorial mode: Expand all the drawers\n return true;\n }\n if (this.props.shouldEnableSinglePaymentAuthorizationCheckout && moduleChildId === childId) {\n return true;\n }\n return step > -1 && step <= this.state.currentStep;\n };\n\n private isActive = (step: number): boolean => {\n return step === this.state.currentStep;\n };\n\n private isVisted = (step: number): boolean => {\n return step > -1 && step < this.state.currentStep;\n };\n\n private onNext = (): void => {\n this.setState({\n currentStep: this.state.currentStep + 1\n });\n };\n}\n\nexport default CheckoutGuidedForm;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\ninterface ICheckoutPlaceOrderButtonProps {\n canPlaceOrder: boolean;\n placeOrderText: string;\n placeOrder(): Promise;\n}\n\nconst CheckoutPlaceOrderButton: React.FC = ({ placeOrderText, canPlaceOrder, placeOrder }) => {\n const [isBusy, setIsBusy] = useState(false);\n const onPlaceOrder = async () => {\n if (isBusy || !canPlaceOrder) {\n return;\n }\n setIsBusy(true);\n await placeOrder();\n setIsBusy(false);\n };\n return (\n \n {placeOrderText}\n \n );\n};\n\nexport default CheckoutPlaceOrderButton;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { checkoutAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { getTenderTypesAsync, resolveCardTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport {\r\n Address,\r\n CardPaymentAcceptResult,\r\n CardType,\r\n CartTenderLine,\r\n RetailOperation,\r\n SalesOrder,\r\n TenderType,\r\n TokenizedPaymentCard\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nexport const OPERATIONS = {\r\n PayCard: 201,\r\n PayGiftCertificate: 214,\r\n PayLoyalty: 207,\r\n PayCustomerAccount: 202\r\n};\r\n\r\nconst getCardTypeId = async (ctx: IActionContext, cardPrefix: string = ''): Promise => {\r\n try {\r\n const response = await resolveCardTypesAsync({ callerContext: ctx }, cardPrefix, CardType.Unknown);\r\n if (response && response.length > 0) {\r\n return response[0].TypeId;\r\n }\r\n } catch (error) {\r\n ctx.telemetry.error('Call to resolveCardTypesAsync failed.', error);\r\n }\r\n return undefined;\r\n};\r\n\r\nconst findTenderIdTypeByOperationId = (tenderTypes: TenderType[], operationId: RetailOperation): string | undefined => {\r\n const matchedTenderType = tenderTypes.find(tenderType => tenderType.OperationId === operationId);\r\n if (matchedTenderType) {\r\n return matchedTenderType.TenderTypeId;\r\n }\r\n return;\r\n};\r\n\r\nconst roundNumber = (value: number) => Number(value.toFixed(2));\r\n\r\nasync function getLoyaltyTenderLine(\r\n ctx: IActionContext,\r\n LoyaltyCardId: string,\r\n Amount: number = 0,\r\n Currency: string = 'USD'\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayLoyalty);\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n LoyaltyCardId\r\n };\r\n}\r\n\r\nasync function getGiftCardTenderLine(\r\n ctx: IActionContext,\r\n GiftCardId: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n tenderTypeId?: string,\r\n giftCardPin?: string,\r\n giftCardExpirationYear?: number,\r\n giftCardExpirationMonth?: number\r\n): Promise {\r\n let TenderTypeId = tenderTypeId;\r\n\r\n if (!TenderTypeId) {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayGiftCertificate);\r\n }\r\n\r\n const GiftCardPin = giftCardPin;\r\n const GiftCardExpirationYear = giftCardExpirationYear;\r\n const GiftCardExpirationMonth = giftCardExpirationMonth;\r\n return {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n GiftCardId,\r\n GiftCardPin,\r\n GiftCardExpirationYear,\r\n GiftCardExpirationMonth\r\n };\r\n}\r\n\r\nasync function getCreditCardTenderLine(\r\n ctx: IActionContext,\r\n tokenizedPaymentCard: TokenizedPaymentCard,\r\n cardPrefix: string = '',\r\n Amount: number = 0,\r\n Currency: string = 'USD',\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n let cartTypeId = tokenizedPaymentCard.CardTypeId;\r\n\r\n if (!cartTypeId) {\r\n cartTypeId = await getCardTypeId(ctx, cardPrefix);\r\n }\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get card tender type');\r\n }\r\n\r\n if (!cartTypeId) {\r\n throw new Error('Fail to get card type id');\r\n }\r\n\r\n const TenderTypeId = tokenizedPaymentCard.TenderType ?? findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n Amount,\r\n TenderTypeId,\r\n CardTypeId: cartTypeId\r\n };\r\n cardTenderLine.TokenizedPaymentCard = {\r\n ...tokenizedPaymentCard,\r\n CardTypeId: cartTypeId,\r\n\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: tokenizedPaymentCard.House || 'N/A',\r\n ...(tokenizedPaymentCard.CardTokenInfo && {\r\n CardTokenInfo: {\r\n ...tokenizedPaymentCard.CardTokenInfo,\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardTokenInfo'\r\n }\r\n }),\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\n/**\r\n * Get credit card tender line.\r\n * @param context - Action context.\r\n * @param amount - Due amount for credit card.\r\n * @param currency - Currency.\r\n * @param cardPaymentAcceptResult - CardPaymentAcceptResult.\r\n * @param billingAddress - BillingAddress.\r\n * @returns - The credit card tender line.\r\n */\r\nasync function getCreditCardTenderLineForSinglePaymentAuth(\r\n context: IActionContext,\r\n amount: number = 0,\r\n currency: string = 'USD',\r\n cardPaymentAcceptResult?: CardPaymentAcceptResult,\r\n billingAddress?: Address\r\n): Promise {\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: context, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n const tenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCard);\r\n\r\n if (cardPaymentAcceptResult) {\r\n cardPaymentAcceptResult.TokenizedPaymentCard = {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard',\r\n House: 'N/A',\r\n ...(billingAddress && {\r\n Phone: billingAddress.Phone,\r\n Country: billingAddress.ThreeLetterISORegionName,\r\n Address1: billingAddress.Street,\r\n City: billingAddress.City,\r\n State: billingAddress.State,\r\n Zip: billingAddress.ZipCode\r\n })\r\n };\r\n }\r\n\r\n const cardTenderLine: CartTenderLine = {\r\n // @ts-expect-error -- existing data.\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency: currency,\r\n Amount: amount,\r\n TenderTypeId: tenderTypeId,\r\n CardPaymentAcceptResult: cardPaymentAcceptResult\r\n };\r\n\r\n return cardTenderLine;\r\n}\r\n\r\nasync function createCustomerAccountTenderLine(ctx: IActionContext, Amount: number, Currency: string = 'USD'): Promise {\r\n const CustomerId = null;\r\n if (!ctx.requestContext.user.isAuthenticated) {\r\n ctx.telemetry.error('A customer id is required to pay with customer account');\r\n }\r\n\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: ctx, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n ctx.telemetry.error('No tender types found for this channel');\r\n }\r\n\r\n const TenderTypeId = findTenderIdTypeByOperationId(tenderTypes, OPERATIONS.PayCustomerAccount);\r\n if (!TenderTypeId) {\r\n ctx.telemetry.error('No customer account tender type');\r\n }\r\n return {\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine',\r\n 'Amount@odata.type': '#Decimal',\r\n Currency,\r\n TenderTypeId,\r\n Amount,\r\n\r\n // @ts-expect-error\r\n CustomerId\r\n };\r\n}\r\n\r\nexport const CartCheckout = async (\r\n ctx: IActionContext,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n): Promise => {\r\n const checkoutState = await getCheckoutState(ctx).catch(error => {\r\n throw error;\r\n });\r\n\r\n const cartState = checkoutState.checkoutCart;\r\n\r\n const channelConfiguration = ctx.requestContext.channel;\r\n\r\n if (!cartState || Object.keys(cartState).length === 0 || !channelConfiguration) {\r\n throw new Error('Fail to placeOrder');\r\n }\r\n\r\n const {\r\n giftCardExtends,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n guestCheckoutEmail,\r\n billingAddress,\r\n loyaltyAmount,\r\n cardPaymentAcceptResult,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n isExpressCheckoutApplied,\r\n isExpressAddressApplied\r\n } = checkoutState;\r\n const { Currency } = channelConfiguration;\r\n\r\n let amountDue = cartState.cart.AmountDue || 0;\r\n let cartTenderLines;\r\n const getTenderLinePromises = [];\r\n const loyaltyCardNumber = cartState.cart.LoyaltyCardId;\r\n\r\n // Pay by loyalty first\r\n if (loyaltyAmount && loyaltyCardNumber) {\r\n const chargedAmount = roundNumber(Math.min(loyaltyAmount, amountDue));\r\n const loyaltyTenderLinePromise = getLoyaltyTenderLine(ctx, loyaltyCardNumber, chargedAmount, Currency);\r\n getTenderLinePromises.push(loyaltyTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout loyalty tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout loyalty tender line is not added when no loyaltyAmount or loyaltyCardNumber.');\r\n }\r\n\r\n // Then by customer account\r\n if (checkoutState.customerAccountAmount > 0) {\r\n const chargedAmount = roundNumber(Math.min(checkoutState.customerAccountAmount, amountDue));\r\n const customerAccountTenderLinePromise = createCustomerAccountTenderLine(ctx, chargedAmount, Currency);\r\n getTenderLinePromises.push(customerAccountTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout customer account amount tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout customer account amount tender line is not added when customerAccountAmount is 0.');\r\n }\r\n\r\n // Then by gift card\r\n if (giftCardExtends && giftCardExtends.length > 0) {\r\n giftCardExtends.some(giftCardExtend => {\r\n if (giftCardExtend.Balance && amountDue > 0) {\r\n const chargedAmount = roundNumber(Math.min(giftCardExtend.Balance, amountDue));\r\n const tenderTypeId = giftCardExtend.TenderTypeId;\r\n const giftCardPin = giftCardExtend.Pin;\r\n const giftCardExpirationYear = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[1], 10)\r\n : undefined;\r\n const giftCardExpirationMonth = giftCardExtend.ExpirationDate\r\n ? Number.parseInt(giftCardExtend.ExpirationDate?.split('/')[0], 10)\r\n : undefined;\r\n const creditCardTenderLinePromise = getGiftCardTenderLine(\r\n ctx,\r\n giftCardExtend.Id,\r\n chargedAmount,\r\n Currency,\r\n tenderTypeId,\r\n giftCardPin,\r\n giftCardExpirationYear,\r\n giftCardExpirationMonth\r\n );\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n amountDue = roundNumber(amountDue - chargedAmount);\r\n\r\n ctx.telemetry.information('Checkout gift card tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout gift card tender line is not added when no balance or no remaining balance.');\r\n }\r\n return amountDue === 0;\r\n });\r\n }\r\n\r\n // Pay the rest by credit card\r\n if (amountDue > 0) {\r\n let creditCardTenderLinePromise: Promise;\r\n\r\n if (\r\n shouldEnableSinglePaymentAuthorizationCheckout &&\r\n (!(isExpressCheckoutApplied && !isExpressAddressApplied) || (isExpressCheckoutApplied && isPaymentVerificationRedirection))\r\n ) {\r\n creditCardTenderLinePromise = getCreditCardTenderLineForSinglePaymentAuth(\r\n ctx,\r\n amountDue,\r\n Currency,\r\n cardPaymentAcceptResult,\r\n billingAddress\r\n );\r\n } else {\r\n if (!tokenizedPaymentCard) {\r\n throw new Error('Fail to placeOrder: no token found');\r\n }\r\n creditCardTenderLinePromise = getCreditCardTenderLine(\r\n ctx,\r\n tokenizedPaymentCard,\r\n cardPrefix,\r\n amountDue,\r\n Currency,\r\n billingAddress\r\n );\r\n }\r\n\r\n getTenderLinePromises.push(creditCardTenderLinePromise);\r\n\r\n ctx.telemetry.information('Checkout credit card tender line is added.');\r\n } else {\r\n ctx.telemetry.information('Checkout credit card tender line is not added when no remaining balance for credit card.');\r\n }\r\n\r\n if (getTenderLinePromises.length > 0) {\r\n // When payment methods is required\r\n cartTenderLines = await Promise.all(getTenderLinePromises).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!cartTenderLines || cartTenderLines.length === 0) {\r\n throw new Error('Fail to placeOrder: fail to get cart tender lines');\r\n }\r\n } else {\r\n ctx.telemetry.information('TenderLinePromises length is 0.');\r\n }\r\n\r\n const cartVersion = updatedCartVersion || cartState.cart.Version;\r\n\r\n ctx.telemetry.information('Checkout checkoutAsync is called.');\r\n\r\n // Proceed checkout\r\n const salesOrder = await checkoutAsync(\r\n { callerContext: ctx, bypassCache: 'get' },\r\n cartState.cart.Id,\r\n guestCheckoutEmail,\r\n undefined,\r\n undefined,\r\n cartTenderLines || null,\r\n cartVersion\r\n ).catch(async error => {\r\n if (checkoutState.shouldEnableSinglePaymentAuthorizationCheckout) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n if (error.data?.AdditionalContext) {\r\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is sent for single payment auth.');\r\n\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown type.\r\n await checkoutState.updateRedirectAdditionalContext({\r\n newRedirectAdditionalContext: error?.data?.AdditionalContext as string\r\n });\r\n await checkoutState.updateRedirectPaymentConnectorId({\r\n newRedirectPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\r\n });\r\n } else {\r\n ctx.telemetry.warning('CheckoutAsync call failed. AdditionalContext is not sent for single payment auth.');\r\n\r\n await checkoutState.updateIsCheckoutCallFailed({ newIsCheckoutCallFailed: true });\r\n\r\n await checkoutState.updateCheckoutErrorPaymentConnectorId({\r\n newCheckoutErrorPaymentConnectorId: cardPaymentAcceptResult?.Settings?.PaymentConnectorId as string\r\n });\r\n\r\n if (isPaymentVerificationRedirection) {\r\n ctx.telemetry.warning('RefreshCart when isPaymentVerificationRedirection is true.');\r\n\r\n await checkoutState.checkoutCart.refreshCart({});\r\n await checkoutState.updateIsExpressCheckoutApplied({ newIsExpressCheckoutApplied: false });\r\n await checkoutState.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\r\n }\r\n }\r\n }\r\n\r\n throw error;\r\n });\r\n\r\n if (!salesOrder) {\r\n ctx.telemetry.error('Failed to placeOrder: fail to checkout.');\r\n throw new Error('Fail to placeOrder: fail to checkout');\r\n }\r\n\r\n return salesOrder;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartCheckout } from './checkout';\r\nimport { EmptyActiveCart } from './empty-active-cart';\r\n\r\nexport const PlaceOrder = async (\r\n ctx: IActionContext,\r\n checkoutState: ICheckoutState | undefined,\r\n orderedProducts: SimpleProduct[] | undefined,\r\n redirect: boolean,\r\n updatedCartVersion?: number,\r\n isPaymentVerificationRedirection?: boolean\r\n) => {\r\n //@ts-ignore\r\n return new Promise(async (resolve: () => void, reject: (reason?: Error) => void) => {\r\n ctx.telemetry.information('Checkout place-order method is triggered.');\r\n\r\n let salesOrder: SalesOrder;\r\n\r\n // Proceed checkout\r\n try {\r\n salesOrder = await CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n // Remove purchased items from the active cart\r\n try {\r\n ctx.telemetry.information('Checkout emptyActiveCart is called.');\r\n await EmptyActiveCart(ctx);\r\n } catch (error) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n if (redirect) {\r\n ctx.telemetry.information('Redirect to order confirmation page.');\r\n\r\n // Redirect to the order confirmation page\r\n const orderConfirmationUrl = getUrlSync('orderConfirmation', ctx) || '';\r\n if (!orderConfirmationUrl) {\r\n reject(new Error('Error: No orderConfirmationUrl'));\r\n return;\r\n }\r\n\r\n const separator = orderConfirmationUrl.includes('?') ? '&' : '?';\r\n const url = `${orderConfirmationUrl}${separator}transactionId=${salesOrder.Id}`;\r\n window.location.assign(url);\r\n } else {\r\n ctx.telemetry.information('Not redirect to order confirmation page.');\r\n\r\n if (checkoutState) {\r\n const result = await checkoutState.updateSalesOrder({\r\n newSalesOrder: salesOrder,\r\n newOrderedProducts: orderedProducts || []\r\n });\r\n\r\n if (result.status === 'FAILED') {\r\n reject(new Error('Error: Updating error state failed'));\r\n return;\r\n }\r\n } else {\r\n reject(new Error('Error: No checkout state'));\r\n return;\r\n }\r\n resolve();\r\n }\r\n });\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartState, getCheckoutState } from '@msdyn365-commerce/global-state';\r\n\r\nexport const EmptyActiveCart = async (ctx: IActionContext): Promise => {\r\n let cartState;\r\n let checkoutState;\r\n const lineItemIdsToRemove = [];\r\n\r\n try {\r\n cartState = await getCartState(ctx);\r\n checkoutState = await getCheckoutState(ctx);\r\n } catch (error) {\r\n throw error;\r\n }\r\n\r\n if (!cartState || !cartState.cart) {\r\n throw new Error('Fail to fetch active cart');\r\n }\r\n\r\n if (!checkoutState || !checkoutState.checkoutCart) {\r\n throw new Error('Fail to fetch checkoutCart cart');\r\n }\r\n\r\n const activeCart = cartState.cart;\r\n const checkoutCart = checkoutState.checkoutCart.cart;\r\n\r\n for (const activeCartLine of activeCart.CartLines || []) {\r\n for (const checkoutCartLine of checkoutCart.CartLines || []) {\r\n if (activeCartLine.LineId && activeCartLine.LineId === checkoutCartLine.LineId) {\r\n lineItemIdsToRemove.push(activeCartLine.LineId);\r\n }\r\n }\r\n }\r\n\r\n try {\r\n await cartState.removeCartLines({ cartLineIds: lineItemIdsToRemove });\r\n await cartState.removeAllPromoCodes({});\r\n await checkoutState.removeCheckoutCartId({});\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IPaymentConnectorPostMessage } from './payment-instrument-message';\r\n\r\n/**\r\n * Payment iFrame interface.\r\n */\r\nexport interface IPaymentFrameElementProps {\r\n className?: string;\r\n moduleName?: string;\r\n iframeAriaLabel: string;\r\n displayContent?: string;\r\n sourceUrl?: string;\r\n requestUrlOrigin?: string;\r\n messageOrigin?: string;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- public props.\r\n css?: string;\r\n height?: number;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- public event.\r\n onIFrameMessage?(event: MessageEvent): void;\r\n}\r\n\r\n/**\r\n * Default post message name.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Existing name.\r\nexport const POST_MESSAGE_NAME = 'message';\r\n\r\n/**\r\n * Get host name.\r\n * @param url - The url.\r\n * @returns The host name.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Public props.\r\nconst getHostName = (url: string = ''): string => {\r\n return (url.includes('//') ? url.split('/')[2] : url.split('/')[0]).toLowerCase();\r\n};\r\n\r\n/**\r\n *\r\n * IFrameElement component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class Iframe extends React.PureComponent {\r\n private readonly iframeRef: React.RefObject;\r\n\r\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility -- Existing code.\r\n constructor(props: IPaymentFrameElementProps) {\r\n super(props);\r\n this.iframeRef = React.createRef();\r\n }\r\n\r\n public componentDidMount(): void {\r\n window.addEventListener(POST_MESSAGE_NAME, this.onEvent);\r\n\r\n this.updateContentDocument();\r\n }\r\n\r\n public componentDidUpdate(previousProps: IPaymentFrameElementProps): void {\r\n if (previousProps.displayContent !== this.props.displayContent) {\r\n this.updateContentDocument();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener(POST_MESSAGE_NAME, this.onEvent);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { sourceUrl, className, iframeAriaLabel, height, moduleName = 'checkout-payment-instrument' } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Post message.\r\n * @param parameters - Payment connector post message.\r\n */\r\n public postMessage = (parameters: IPaymentConnectorPostMessage): void => {\r\n if (this.iframeRef.current?.contentWindow?.postMessage) {\r\n this.iframeRef.current.contentWindow.postMessage(parameters.message, parameters.targetOrigin);\r\n }\r\n };\r\n\r\n /**\r\n * On event.\r\n * @param event - The message event.\r\n */\r\n private readonly onEvent = (event: MessageEvent) => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- IFrame.\r\n const { sourceUrl, onIFrameMessage, requestUrlOrigin, messageOrigin } = this.props;\r\n const sourceHost = getHostName(sourceUrl);\r\n const eventHost = getHostName(event.origin);\r\n const requestHost = getHostName(requestUrlOrigin);\r\n const messageHost = getHostName(messageOrigin);\r\n\r\n // Important: security check\r\n // check actual origin matches with expected origin\r\n if (\r\n !onIFrameMessage ||\r\n (sourceUrl && !(sourceHost === eventHost || requestHost === eventHost || messageHost === eventHost)) ||\r\n (!sourceUrl && !(requestHost === eventHost || messageHost === eventHost))\r\n ) {\r\n return;\r\n }\r\n\r\n onIFrameMessage(event);\r\n };\r\n\r\n /**\r\n * Update content document.\r\n */\r\n private readonly updateContentDocument = (): void => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing props.\r\n const { displayContent, sourceUrl, css } = this.props;\r\n if (!sourceUrl && displayContent && this.iframeRef.current) {\r\n const innerDocument = this.iframeRef.current.contentDocument;\r\n\r\n if (innerDocument) {\r\n innerDocument.open();\r\n innerDocument.write(displayContent);\r\n if (css) {\r\n // Append custom style\r\n const style = document.createElement('style');\r\n const cssNote = document.createTextNode(css);\r\n style.appendChild(cssNote);\r\n innerDocument.head.appendChild(style);\r\n }\r\n\r\n innerDocument.close();\r\n }\r\n }\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/**\r\n * Payment connect post message type.\r\n */\r\nexport enum PaymentConnectorPostMessageType {\r\n CardPrefix = 'msax-cc-cardprefix',\r\n Error = 'msax-cc-error',\r\n Height = 'msax-cc-height',\r\n Result = 'msax-cc-result',\r\n Submit = 'msax-cc-submit',\r\n ExtraContext = 'msax-cc-extracontext',\r\n Redirect = 'msax-cc-redirect',\r\n Showoverlay = 'msax-cc-showoverlay',\r\n Hideoverlay = 'msax-cc-hideoverlay',\r\n ShippingAddress = 'msax-shipping-address'\r\n}\r\n\r\n/**\r\n * Interface for payment connector post message.\r\n */\r\nexport interface IPaymentConnectorPostMessage {\r\n message: string;\r\n targetOrigin: string;\r\n}\r\n\r\n/**\r\n * Payment connector message.\r\n * @param data - Data with message.\r\n * @param messageType - Message type.\r\n * @returns Payment connector post message.\r\n */\r\nexport function paymentConnectorMessage(data: string, messageType: PaymentConnectorPostMessageType): IPaymentConnectorPostMessage {\r\n return {\r\n message: JSON.stringify({\r\n type: messageType,\r\n value: data\r\n }),\r\n targetOrigin: '*'\r\n };\r\n}\r\n\r\n/**\r\n * Payment connector extra context message.\r\n * @param data - The data.\r\n * @returns The payment connector post message.\r\n */\r\nexport function paymentConnectorExtraContextMessage(data: string): IPaymentConnectorPostMessage {\r\n return paymentConnectorMessage(data, PaymentConnectorPostMessageType.ExtraContext);\r\n}\r\n\r\n/**\r\n * Payment connector submit message.\r\n * @returns The payment connector post message.\r\n */\r\nexport function paymentConnectorSubmitMessage(): IPaymentConnectorPostMessage {\r\n return paymentConnectorMessage('true', PaymentConnectorPostMessageType.Submit);\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nexport * from './add-payment-form';\r\nexport * from './error';\r\nexport * from './iframe';\r\nexport * from './payment-instrument-message';\r\nexport * from './waiting';\r\nexport * from './with-visibility-observer';\r\nexport * from './interfaces';\r\nexport * from './place-order';\r\nexport * from './empty-active-cart';\r\nexport * from './country-codes';\r\nexport { CartCheckout } from './checkout';\r\nexport * from './get-checkout-return-url';\r\n\r\n/**\r\n * AsyncResultStatusCode.\r\n */\r\nexport enum AsyncResultStatusCode {\r\n LOADING = 'LOADING',\r\n SUCCESS = 'SUCCESS',\r\n FAILED = 'FAILED'\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Button, Heading, IModuleProps, INodeProps, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport { AsyncResultStatus, getUrlSync } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport { action, computed, when, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { IMandsCheckoutData } from './mands-checkout.data';\nimport { IMandsCheckoutProps } from './mands-checkout.props.autogenerated';\nimport AlertComponent from './components/alert';\nimport { getLineItems, ILineItems } from './components/get-line-items';\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\nimport GuidedFormComponent from './components/guided-form';\nimport PlaceOrderButtonComponent from './components/place-order-button';\nimport placeOrder from './methods/place-order';\n\n// import { AsyncResultStatus } from '@msdyn365-commerce/retail-proxy'\nimport { Address, TokenizedPaymentCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport { focusOnCheckoutError, setCheckoutErrors } from './checkout-errors';\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from './common';\nexport * from './components/get-line-items';\nexport * from './components/get-order-summary';\n\ntype DeviceType = 'Mobile';\n\ninterface ICheckoutState {\n errorMessage: string;\n isPlaceOrderClicked?: boolean;\n}\n\nexport interface ICheckoutViewProps extends IMandsCheckoutProps {\n className: string;\n canShow?: boolean;\n isEmptyCart?: boolean;\n isConsentGiven?: boolean;\n hasError?: boolean;\n cartStatus?: string;\n isMobile?: boolean;\n isEditorialMode?: boolean;\n backToShoppingUrl?: string;\n editCartLink?: string;\n hasSalesOrder: boolean;\n\n checkoutProps: IModuleProps;\n headerProps: INodeProps;\n bodyProps: INodeProps;\n mainProps: INodeProps;\n mainControlProps: INodeProps;\n sideProps: INodeProps;\n sideControlFirstProps: INodeProps;\n sideControlSecondProps: INodeProps;\n\n guidedForm?: React.ReactNode;\n title?: React.ReactNode;\n loading?: React.ReactNode;\n alert?: React.ReactNode;\n orderSummary?: IOrderSummary;\n lineItems?: ILineItems;\n placeOrderButton?: React.ReactNode;\n keepShoppingButton?: React.ReactNode;\n orderConfirmation?: React.ReactNode;\n checkoutExpressPaymentContainer?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\nexport interface ICheckoutModuleProps extends IMandsCheckoutProps, IModuleStateProps {}\n\n/**\n *\n * CheckoutContainer component\n * @extends {React.Component}\n */\n// @ts-ignore\n@withModuleState\n@observer\nclass Checkout extends React.Component {\n public state: ICheckoutState = {\n errorMessage: '',\n isPlaceOrderClicked: false\n };\n\n @computed get cartStatus(): AsyncResultStatus {\n return get(this.props, 'data.checkout.status');\n }\n\n @computed get isEmptyCart(): boolean {\n if (this.isEditorialMode) {\n // Editorial mode: Ignore empty cart\n return false;\n }\n const cart = get(this.props, 'data.checkout.result.checkoutCart.cart');\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\n }\n\n @computed get hasError(): boolean {\n const cart = get(this.props, 'data.checkout.result.checkoutCart.cart');\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\n }\n\n @computed get isEditorialMode(): boolean {\n return get(this.props, 'context.request.params.isEditor');\n }\n\n @computed get canPlaceOrder(): boolean {\n return this.props.moduleState.isReady;\n }\n @computed get isPaidOffByCustomerAccount(): boolean {\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\n return customerAccountAmount === amountDue;\n }\n\n public componentDidMount(): void {\n const {\n resources: { genericErrorMessage }\n } = this.props;\n\n when(\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\n async () => {\n if (this.expressPaymentDetailsFromCartPage) {\n const {\n email,\n tenderLine,\n tokenizedPaymentCard,\n paymentTenderType: paymentTenderTypeFromCartPage,\n isExpressCheckoutAppliedInCartPage,\n isExpressAddressAppliedInCartPage,\n cardPaymentAcceptResult,\n address\n } = this.expressPaymentDetailsFromCartPage;\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\n newEmailAddressFromExpressCheckout: email ?? '',\n newTenderLine: tenderLine,\n newTokenizedPaymentCard: tokenizedPaymentCard,\n newPaymentTenderType: paymentTenderTypeFromCartPage,\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\n newCardPaymentAcceptResult: cardPaymentAcceptResult\n });\n if (isExpressAddressAppliedInCartPage && address) {\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\n newBillingAddressFromExpressCheckout: address\n });\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\n newShippingAddressFromExpressCheckout: address\n });\n } else {\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\n }\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\n newExtensionProperties: [\n {\n Key: 'expressPaymentDetails',\n Value: { StringValue: '' }\n }\n ]\n });\n }\n }\n );\n\n // @ts-ignore: Compiler not reconizing condition check for function params\n when(\n () => this.hasError,\n () => {\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.context.telemetry.error('Failed to get cart');\n }\n );\n\n // @ts-ignore: Compiler not reconizing condition check for function params\n when(\n () => {\n return this.isEmptyCart;\n },\n () => {\n const editCartLink = getUrlSync('cart', this.props.context.actionContext) || '';\n if (window && editCartLink) {\n // Redirect to cart page if cart is empty\n window.location.assign(editCartLink);\n } else {\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.context.telemetry.error('Cart is empty, but no editCartLink found');\n }\n }\n );\n // Reaction to update the error message when there is a checkout error.\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\n const checkoutPaymentErrorLocation: boolean =\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\n : checkoutErrorLocation;\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n checkoutError &&\n checkoutError.errorMessage &&\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n }\n public componentDidUpdate(): void {\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\n this.state.errorMessage\n ) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\n const properties =\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\n property => property.Key === 'expressPaymentDetails'\n )?.Value?.StringValue ?? '';\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\n }\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n // tslint:disable-next-line:max-func-body-length\n public render(): JSX.Element {\n const {\n moduleState,\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\n resources\n } = this.props;\n const { errorMessage } = this.state;\n const { backToShopping, placeOrderText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\n const checkoutClass = classnames('ms-checkout', className);\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\n // @ts-expect-error - check the key of slot\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\n // @ts-expect-error - check the key of slot\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n const isMobile =\n this.props.context.request &&\n this.props.context.request.device &&\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\n\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const editCartLink = getUrlSync('cart', this.props.context.actionContext) || '';\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldEnableCheckoutErrorDisplayMessaging =\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\n\n let viewProps: ICheckoutViewProps = {\n ...this.props,\n className: checkoutClass,\n checkoutErrorRef: this.checkoutErrorRef,\n isEmptyCart: this.isEmptyCart,\n isConsentGiven,\n hasError: this.hasError,\n hasSalesOrder: this.props.data.checkout?.result! !== undefined && this.props.data.checkout?.result?.salesOrder! !== undefined,\n // hasSalesOrder: false,\n cartStatus: this.cartStatus,\n isMobile,\n backToShoppingUrl,\n editCartLink,\n isEditorialMode: this.isEditorialMode,\n orderConfirmation:\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\n ? this.props.slots.orderConfirmation[0]\n : undefined,\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\n headerProps: { className: 'ms-checkout__head' },\n bodyProps: { className: 'ms-checkout__body' },\n mainProps: { className: 'ms-checkout__main' },\n mainControlProps: { className: 'ms-checkout__main-control' },\n sideProps: { className: 'ms-checkout__side' },\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\n title: checkoutHeading && ,\n checkoutExpressPaymentContainer\n };\n\n if (isConsentGiven === false) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else if (!this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart) {\n viewProps = {\n ...viewProps,\n loading: \n };\n } else if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else {\n viewProps = {\n ...viewProps,\n alert: errorMessage && ,\n canShow: true,\n guidedForm: checkoutInformation ? (\n \n ) : (\n undefined\n ),\n orderSummary: getOrderSummary(this.props),\n lineItems: getLineItems(this.props),\n placeOrderButton: (\n \n ),\n keepShoppingButton: backToShoppingUrl && (\n \n {backToShopping}\n \n )\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\n if (isLoading) {\n return AsyncResultStatusCode.LOADING;\n }\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\n if (isSuccess) {\n return AsyncResultStatusCode.SUCCESS;\n }\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\n if (isFailed) {\n return AsyncResultStatusCode.FAILED;\n }\n return undefined;\n }\n\n private getSlotItems = (key: string): React.ReactNode[] | undefined => {\n const { slots } = this.props;\n return slots && slots[key] && slots[key].length ? slots[key] : undefined;\n };\n\n private onPlaceOrder = async (): Promise => {\n const {\n resources: { genericErrorMessage },\n context: { actionContext },\n slots: { orderConfirmation }\n } = this.props;\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\n this.setState({ isPlaceOrderClicked: true });\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\n await placeOrder(actionContext, this.props.data.checkout.result, this.props.data.products.result, !hasOrderConfirmation).catch(\n error => {\n this.handleCheckoutError(error);\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.telemetry.exception(error);\n }\n );\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n /**\n * Save the address as Shipping and Billing address.\n * @param tokenizedPaymentCard - Tokenized payment card.\n */\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\n const checkoutState = this.props.data.checkout.result;\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\n }\n };\n /**\n * Get address from tokenizedPaymentCard.\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\n * @returns The address.\n */\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\n const address: Address = {\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\n Name: tokenizedPaymentCard.NameOnCard,\n Street: tokenizedPaymentCard.Address1,\n StreetNumber: tokenizedPaymentCard.Address2,\n City: tokenizedPaymentCard.City,\n State: tokenizedPaymentCard.State,\n ZipCode: tokenizedPaymentCard.Zip,\n Phone: tokenizedPaymentCard.Phone\n };\n return address;\n };\n /**\n * Handle checkout errors.\n * @param error -- The error on checkout api failure.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly handleCheckoutError = (error: any) => {\n const {\n resources: {\n genericErrorMessage,\n invalidCartVersionErrorMessage,\n missingRequiredCartTenderLinesErrorMessage,\n timeoutErrorMessage\n },\n context: { actionContext }\n } = this.props;\n const checkoutResult = this.props.data.checkout.result;\n const apiError = error && error.message;\n if (error?.statusCode === 500) {\n const errorMessage = timeoutErrorMessage;\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n this.setState({ isPlaceOrderLoading: false });\n return;\n }\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\n const errorCode = error && error.name ? error.name : '';\n // apiError message will be used if errorcode resource/enums is unavailable\n setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\n } else {\n let errorMessage = genericErrorMessage;\n this.setState({ isPlaceOrderClicked: false });\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n errorMessage = invalidCartVersionErrorMessage;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\n // If api error is not available show generic message\n errorMessage = apiError || genericErrorMessage;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n error.data?.AdditionalContext &&\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\n ) {\n return;\n }\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n }\n };\n}\n\nexport default Checkout;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\n\nimport { PlaceOrder } from '../common/place-order';\n\nexport default async (\n ctx: IActionContext,\n checkoutState: ICheckoutState | undefined,\n orderedProducts: SimpleProduct[] | undefined,\n redirect: boolean,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n) => {\n return PlaceOrder(ctx, checkoutState, orderedProducts, redirect, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from './mands-checkout';\n\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\n \n {item}\n {pickUpAtStore && }\n \n);\n\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\n \n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\n \n \n {heading}\n {editLink}\n \n {itemsForPickup && }\n {itemsForShip && }\n \n);\n\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.subtotal}\n {lines.shipping}\n {lines.tax}\n {lines.totalDiscounts}\n {lines.loyalty}\n {lines.customerAccount}\n {lines.giftCard}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst CheckoutView: React.FC = props => {\n const {\n canShow,\n checkoutProps,\n headerProps,\n hasSalesOrder,\n bodyProps,\n mainProps,\n mainControlProps,\n sideProps,\n sideControlFirstProps,\n sideControlSecondProps,\n orderConfirmation,\n loading,\n alert,\n title,\n guidedForm,\n orderSummary,\n lineItems,\n placeOrderButton,\n keepShoppingButton,\n checkoutExpressPaymentContainer,\n checkoutErrorRef\n } = props;\n\n return (\n \n {!hasSalesOrder && !checkoutExpressPaymentContainer && {title}}\n {!hasSalesOrder && (\n \n {loading}\n {alert}\n {canShow && (\n <>\n \n {guidedForm}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n {orderSummary && }\n \n {placeOrderButton}\n {keepShoppingButton}\n \n {lineItems && }\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n )}\n \n )}\n {hasSalesOrder && orderConfirmation}\n \n );\n};\n\nexport default CheckoutView;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IAny, ICoreContext, IGeneric, IImageSettings, IModule } from '@msdyn365-commerce/core';\r\nimport { SalesLine, TenderType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\r\nimport groupBy from 'lodash/groupBy';\r\nimport { ISalesLine } from './get-sales-line';\r\n\r\nexport interface IModuleComponentProps extends IModule {\r\n config: {\r\n imageSettings?: IImageSettings;\r\n };\r\n}\r\n\r\nexport interface IPriceContext {\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext>;\r\n telemetry: ITelemetry;\r\n freePriceText: string;\r\n}\r\n\r\nexport const getTenderIdOperationIdMap = (tenderTypes: TenderType[]): object => {\r\n return tenderTypes.reduce((map, tenderType) => {\r\n if (tenderType.TenderTypeId) {\r\n map[tenderType.TenderTypeId] = tenderType.OperationId;\r\n }\r\n return map;\r\n // tslint:disable-next-line:align\r\n }, {});\r\n};\r\n\r\nexport const countItems = (salesLines: SalesLine[]) => {\r\n return salesLines.reduce((count, salesLine) => {\r\n return count + (salesLine.Quantity || 0);\r\n // tslint:disable-next-line:align\r\n }, 0);\r\n};\r\n\r\nexport const getSalesLinesByDelivery = (salesLines?: SalesLine[], pickupDeliveryModeCode?: string): SalesLine[] => {\r\n if (!salesLines || !salesLines.length) {\r\n return [];\r\n }\r\n return salesLines.filter(salesLine =>\r\n // isPickUp ? getPickUp : getOthers\r\n pickupDeliveryModeCode ? salesLine.DeliveryMode === pickupDeliveryModeCode : salesLine.DeliveryMode !== pickupDeliveryModeCode\r\n );\r\n};\r\n\r\nexport const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=80&h=80&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=147&h=147&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n};\r\n\r\nexport type IDeliveryType = 'pickUp' | 'ship' | 'unknown';\r\n\r\nexport type ISalesStatusCode = 'canceled' | 'readyForPickup' | 'pickedUp' | 'processing' | 'shipped' | 'partialShipped' | 'unknown';\r\n\r\nexport const getSalesStatusCode = (deliveryType: IDeliveryType, salesLine: SalesLine, statusValue?: number): ISalesStatusCode => {\r\n const QuantityInvoiced = salesLine.QuantityInvoiced || 0;\r\n const QuantityOrdered = salesLine.QuantityOrdered || 0;\r\n console.log('QuantityInvoiced', QuantityInvoiced);\r\n console.log('QuantityOrdered', QuantityOrdered);\r\n if (QuantityInvoiced > 0 && QuantityInvoiced < QuantityOrdered) {\r\n return 'partialShipped';\r\n }\r\n if (statusValue === 7) {\r\n return 'canceled';\r\n }\r\n if (deliveryType === 'pickUp') {\r\n switch (statusValue) {\r\n case 3:\r\n return 'readyForPickup';\r\n case 4:\r\n return 'pickedUp';\r\n default:\r\n return 'processing';\r\n }\r\n } else if (deliveryType === 'ship') {\r\n switch (statusValue) {\r\n case 3:\r\n return 'processing';\r\n case 4:\r\n return 'shipped';\r\n default:\r\n return 'processing';\r\n }\r\n } else {\r\n return 'unknown';\r\n }\r\n};\r\n\r\nexport type ITrackingId = string | 'unknown';\r\nexport type IAddressId = string | 'unknown';\r\n\r\nexport interface IGroupData {\r\n deliveryType: IDeliveryType;\r\n salesStatus: ISalesStatusCode;\r\n addressId: IAddressId | 'unknown';\r\n trackingId: ITrackingId | 'unknown';\r\n count: number;\r\n salesLines: ISalesLine[];\r\n}\r\n\r\nexport const groupSalesLines = (salesLines: ISalesLine[]): IGroupData[] => {\r\n const getGroupByDeliveryType = (items: ISalesLine[]) => groupBy(items, item => item.data.deliveryType);\r\n const getGroupBySalesStatusCode = (items: ISalesLine[]) => groupBy(items, item => item.data.salesStatus);\r\n const getGroupByTrackingId = (items: ISalesLine[]) => groupBy(items, item => item.data.salesLine.TrackingId || 'unknown');\r\n const getGroupByAddressId = (items: ISalesLine[]) =>\r\n groupBy(items, item => (item.data.salesLine.ShippingAddress && item.data.salesLine.ShippingAddress.RecordId) || 'unknown');\r\n\r\n const flatGroup: IGroupData[] = [];\r\n\r\n // 1) Group by delivery type\r\n // @ts-ignore\r\n const group = getGroupByDeliveryType(salesLines);\r\n\r\n // 2) Group by sales status code\r\n Object.entries(group).forEach(([deliveryType, groupByDeliveryType]) => {\r\n // @ts-ignore\r\n group[deliveryType] = getGroupBySalesStatusCode(groupByDeliveryType);\r\n\r\n Object.entries(group[deliveryType]).forEach(([salesStatus, groupBySalesStatusCode]) => {\r\n // @ts-ignore 3) Group by address id\r\n groupBySalesStatusCode[salesStatus] = getGroupByAddressId(groupBySalesStatusCode);\r\n\r\n // @ts-ignore\r\n Object.entries(groupBySalesStatusCode[salesStatus]).forEach(([addressId, groupByAddressId]) => {\r\n // @ts-ignore 4) Group by address id\r\n groupByAddressId[addressId] = getGroupByTrackingId(groupByAddressId);\r\n\r\n // @ts-ignore\r\n Object.entries(groupByAddressId[addressId]).forEach(([trackingId, groupByTrackingId]) => {\r\n flatGroup.push({\r\n // @ts-ignore\r\n deliveryType,\r\n // @ts-ignore\r\n salesStatus,\r\n addressId,\r\n trackingId,\r\n // @ts-ignore\r\n count: countItems(groupByTrackingId.map(item => item.data.salesLine)),\r\n // @ts-ignore\r\n salesLines: groupByTrackingId\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n return flatGroup;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISalesLine } from './get-sales-line';\r\nimport { groupSalesLines, IDeliveryType, ISalesStatusCode } from './utilities';\r\n\r\nexport interface IGroupDelivery {\r\n deliveryProps: INodeProps;\r\n heading: React.ReactNode;\r\n count: React.ReactNode;\r\n processing: React.ReactNode;\r\n trackingInfo: React.ReactNode;\r\n address: React.ReactNode;\r\n}\r\n\r\nexport interface IGroup {\r\n groupProps: INodeProps;\r\n salesLinesProps: INodeProps;\r\n delivery: IGroupDelivery;\r\n salesLines: ISalesLine[];\r\n // row data\r\n data: {\r\n count: number;\r\n deliveryType: IDeliveryType;\r\n salesStatus: ISalesStatusCode;\r\n };\r\n}\r\n\r\nexport interface IGroupsInput {\r\n moduleName: string;\r\n salesLines: ISalesLine[];\r\n resources: {\r\n orderItemLabel: string;\r\n orderItemsLabel: string;\r\n shippingItemToOBOCustomerLabel?: string;\r\n };\r\n isOboRequest?: boolean;\r\n customerName?: string;\r\n}\r\n\r\nexport interface IGroups {\r\n groupsProps: INodeProps;\r\n groups: IGroup[];\r\n}\r\n\r\nexport const getGroups = ({\r\n moduleName,\r\n salesLines,\r\n customerName,\r\n isOboRequest,\r\n resources: { orderItemLabel, orderItemsLabel, shippingItemToOBOCustomerLabel }\r\n}: IGroupsInput): IGroups => {\r\n const groups = groupSalesLines(salesLines).map(group => {\r\n const { deliveryType, salesStatus, count, salesLines: _salesLines } = group;\r\n const itemLabel = count === 1 ? orderItemLabel : orderItemsLabel;\r\n const groupProps = { className: `${moduleName}__group deliveryType-${deliveryType} salesStatus-${salesStatus}` };\r\n const salesLinesProps = { className: `${moduleName}__sales-lines` };\r\n const address = _salesLines[0].address;\r\n const trackingInfo = _salesLines[0].trackingInfo;\r\n const isProcessing = _salesLines[0].data.salesStatus === 'processing';\r\n const delivery = {\r\n deliveryProps: { className: `${moduleName}__group-delivery` },\r\n heading: (\r\n \r\n {isProcessing ? _salesLines[0].deliveryType : _salesLines[0].salesStatus}\r\n \r\n ),\r\n processing: isProcessing ? (\r\n {_salesLines[0].salesStatus}\r\n ) : (\r\n undefined\r\n ),\r\n count: {`(${count} ${itemLabel})`},\r\n trackingInfo,\r\n address\r\n };\r\n return {\r\n groupProps,\r\n salesLinesProps,\r\n delivery,\r\n salesLines: _salesLines,\r\n data: {\r\n count,\r\n deliveryType,\r\n salesStatus\r\n }\r\n };\r\n });\r\n\r\n return {\r\n groupsProps: { className: `${moduleName}__groups` },\r\n groups\r\n };\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { ChannelIdentity, Customer, OrderOriginator, OrderShipments, OrgUnitLocation, SalesOrder } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { countItems, IModuleComponentProps, IPriceContext } from './utilities';\r\nimport { isOboRequest } from '@msdyn365-commerce/core';\r\n\r\nexport interface IOrderInformationInputResources {\r\n receiptEmailMessage?: string;\r\n orderItemLabel: string;\r\n orderItemsLabel: string;\r\n processingLabel: string;\r\n orderIdLabel: string;\r\n confirmationIdLabel: string;\r\n trackingLabel: string;\r\n trackingAriaLabel: string;\r\n trackingComingSoonLabel: string;\r\n orderPlacedByFullText?: string;\r\n orderPlacedByYouText?: string;\r\n orderOnBehalfOfText?: string;\r\n}\r\nexport interface IOrderInformationInput {\r\n moduleName: string;\r\n channelReferenceId?: string;\r\n receiptEmail?: string;\r\n createdDate?: string;\r\n amount?: number;\r\n priceContext: IPriceContext;\r\n salesId?: string;\r\n hasTrackingInfo?: boolean;\r\n count?: number;\r\n resources: IOrderInformationInputResources;\r\n originator?: OrderOriginator;\r\n isYou?: [boolean, boolean];\r\n isB2bAdmin?: boolean;\r\n isOnlineStore?: boolean;\r\n priceCurrency?: string;\r\n}\r\nconst callCenterChannelTypeValue = 4;\r\nexport interface IOrderInformation {\r\n orderInformationProps: INodeProps;\r\n placedBy?: React.ReactNode;\r\n salesId: React.ReactNode;\r\n receiptEmail: React.ReactNode;\r\n createdDate: React.ReactNode;\r\n count: React.ReactNode;\r\n amount: React.ReactNode;\r\n channelReferenceId: React.ReactNode;\r\n}\r\n\r\nconst getPlacedBy = (\r\n moduleName: string,\r\n originator: OrderOriginator | undefined,\r\n isYou: [boolean, boolean] | undefined,\r\n orderPlacedByFullText: string | undefined,\r\n orderPlacedByYouText: string | undefined,\r\n orderOnBehalfOfText: string | undefined\r\n): React.ReactNode | undefined => {\r\n let placedByNode: React.ReactNode | undefined;\r\n if (originator) {\r\n const placedByName =\r\n originator.StaffId && originator.StaffName\r\n ? originator.StaffName\r\n : originator.CustomerId && originator.CustomerName\r\n ? originator.CustomerName\r\n : '-';\r\n const onBehalfOfText = originator.StaffId && originator.StaffName && originator.CustomerId && originator.CustomerName;\r\n placedByNode = (\r\n
\r\n {orderPlacedByFullText} {placedByName} {isYou && isYou[0] && ` ${orderPlacedByYouText}`}\r\n {onBehalfOfText && (\r\n
\r\n {orderOnBehalfOfText} {`${originator.CustomerName}`}\r\n {isYou && isYou[1] && ` ${orderPlacedByYouText}`}\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n return placedByNode;\r\n};\r\n\r\nexport const getOrderInformation = ({\r\n moduleName,\r\n channelReferenceId,\r\n receiptEmail,\r\n createdDate,\r\n amount,\r\n priceContext,\r\n originator,\r\n isYou,\r\n salesId,\r\n count,\r\n priceCurrency,\r\n resources: {\r\n receiptEmailMessage,\r\n orderItemLabel,\r\n orderItemsLabel,\r\n processingLabel,\r\n orderIdLabel,\r\n orderPlacedByFullText,\r\n orderPlacedByYouText,\r\n orderOnBehalfOfText,\r\n confirmationIdLabel\r\n }\r\n}: IOrderInformationInput): IOrderInformation => ({\r\n orderInformationProps: { className: `${moduleName}__order-information` },\r\n placedBy: getPlacedBy(moduleName, originator, isYou, orderPlacedByFullText, orderPlacedByYouText, orderOnBehalfOfText),\r\n salesId: {`${orderIdLabel} ${salesId || processingLabel}`},\r\n receiptEmail: receiptEmail && (\r\n \r\n {receiptEmailMessage}\r\n {receiptEmail}\r\n \r\n ),\r\n createdDate: {createdDate},\r\n count: count !== undefined && count > 0 && (\r\n \r\n {count === 1 ? `${count} ${orderItemLabel}` : `${count} ${orderItemsLabel}`}\r\n \r\n ),\r\n amount: (amount || amount === 0) && (\r\n \r\n ),\r\n channelReferenceId: channelReferenceId && (\r\n {`${confirmationIdLabel} ${channelReferenceId}`}\r\n )\r\n});\r\n\r\ninterface IProps extends IModuleComponentProps {\r\n resources: IOrderInformationInputResources;\r\n customer?: Customer;\r\n}\r\n\r\n/**\r\n * Retrieves channel is online store or not.\r\n * @param channelTypeValue - The channel type.\r\n * @param channelAddress - Channel Address.\r\n * @returns {Boolean} that indicates that the channel is in the online store.\r\n */\r\nexport const isOnlineStoreChannel = (channelTypeValue: number | undefined, channelAddress: string | undefined): boolean => {\r\n return channelTypeValue !== callCenterChannelTypeValue && !channelAddress;\r\n};\r\nexport const getOrderChannelTypeValue: (order: SalesOrder | OrderShipments, channelIdentities?: ChannelIdentity[]) => number | undefined = (\r\n order: SalesOrder | OrderShipments,\r\n channelIdentities?: ChannelIdentity[]\r\n) => {\r\n const orderChannel = channelIdentities?.find(channel => {\r\n return channel.RecordId === order.ChannelId;\r\n });\r\n\r\n const channelType = orderChannel?.ChannelType.Value;\r\n return channelType;\r\n};\r\n\r\n/**\r\n * Retrieves order channel address.\r\n * @param order - Order info.\r\n * @param orgUnitLocations - OrgUnitLocation data.\r\n * @returns String with the address of the channel or an empty string.\r\n */\r\nexport const getOrderChannelAddress: (order: SalesOrder | OrderShipments, orgUnitLocations?: OrgUnitLocation[]) => string = (\r\n order: SalesOrder | OrderShipments,\r\n orgUnitLocations?: OrgUnitLocation[]\r\n) => {\r\n const orderOrgUnitLocation = orgUnitLocations?.find(location => {\r\n return location.ChannelId === order.ChannelId;\r\n });\r\n\r\n const channelAddress = orderOrgUnitLocation?.Address ?? '';\r\n return channelAddress;\r\n};\r\n\r\n/**\r\n * @param {Customer} customer A current customer.\r\n * @param {OrderOriginator} originator The order originator.\r\n * */\r\nexport const getOrderInfomationInput = (\r\n props: IProps,\r\n moduleName: string,\r\n order: SalesOrder | OrderShipments,\r\n priceContext: IPriceContext,\r\n channelIdentities?: ChannelIdentity[],\r\n orgUnitLocations?: OrgUnitLocation[],\r\n customer?: Customer,\r\n originator?: OrderOriginator,\r\n showChannelInfo?: boolean,\r\n isSalesInvoice?: boolean,\r\n shouldShowQrCode?: boolean\r\n): IOrderInformationInput => {\r\n const {\r\n resources,\r\n context: {\r\n request: {\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = props;\r\n\r\n // @ts-ignore OrderShipments doesnt has ChannelId\r\n const showTrackingInfo = !!order.ChannelId && order.ChannelId === channelId;\r\n\r\n const locale = get(props, 'context.request.locale') || 'en-US';\r\n const count = order.SalesLines && order.SalesLines.length ? countItems(order.SalesLines) : 0;\r\n const channelTypeValue = getOrderChannelTypeValue(order, channelIdentities);\r\n const channelAddress = getOrderChannelAddress(order, orgUnitLocations);\r\n const isYou =\r\n !isOboRequest(props.context.request) &&\r\n originator?.CustomerId &&\r\n originator?.CustomerName &&\r\n !originator?.StaffId &&\r\n !originator?.StaffName &&\r\n customer?.AccountNumber === originator?.CustomerId\r\n ? true\r\n : false;\r\n const isYouObo = !isYou && !isOboRequest(props.context.request);\r\n return {\r\n moduleName: moduleName,\r\n createdDate: (order.CreatedDateTime && new Date(order.CreatedDateTime).toLocaleDateString(locale)) || '',\r\n salesId: order.SalesId,\r\n priceCurrency: order.CurrencyCode,\r\n originator: originator,\r\n isYou: [isYou, isYouObo],\r\n isB2bAdmin: customer?.IsB2bAdmin,\r\n // @ts-ignore OrderShipments doesnt has ReceiptEmail\r\n receiptEmail: order.ReceiptEmail,\r\n channelReferenceId: order.ChannelReferenceId,\r\n amount: order.TotalAmount || 0,\r\n priceContext: priceContext,\r\n count,\r\n resources,\r\n isOnlineStore: isOnlineStoreChannel(channelTypeValue, channelAddress)\r\n };\r\n};\r\n","/* eslint-disable no-redeclare */\r\n/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Address as AddressRetail } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { IDeliveryType } from './utilities';\r\n\r\nexport type addressType = 'store' | 'ship';\r\n\r\nexport interface IShippingAddressProps {\r\n moduleName: string;\r\n address: AddressRetail;\r\n deliveryType: IDeliveryType;\r\n resource: {\r\n shipToLabel: string;\r\n storeLabel: string;\r\n phoneLabel: string;\r\n phoneAriaLabel: string;\r\n };\r\n}\r\n\r\nconst Address: React.SFC = ({\r\n moduleName,\r\n address,\r\n deliveryType,\r\n resource: { shipToLabel, storeLabel, phoneLabel, phoneAriaLabel }\r\n}) => (\r\n
\r\n
{deliveryType === 'pickUp' ? storeLabel : shipToLabel}
\r\n {address.Name && {address.Name}}\r\n {address.FullAddress && {address.FullAddress}}\r\n\r\n {/* TODO: Address format is based on country format\r\n {address.Name && {address.Name}}\r\n {address.Street && {address.Street} }\r\n {address.City && {address.City}}\r\n {address.State && {`, ${address.State}`}}\r\n {address.ZipCode && {` ${address.ZipCode}`}}\r\n {address.Phone && (\r\n {phoneLabel}\r\n \r\n {address.Phone}\r\n \r\n \r\n )} */}\r\n
\r\n);\r\n\r\nexport default React.memo(Address);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\ninterface ILabelProps {\r\n className: string;\r\n label: string;\r\n}\r\n\r\nconst Label: React.FC = ({ className, label }) => {label};\r\n\r\nexport default Label;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport { Image } from '@msdyn365-commerce/core';\r\nimport { ProductCatalog, SalesLine, Shipment, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport Address from './address';\r\nimport LabelComponent from './label';\r\nimport { defaultImageSettings, getSalesStatusCode, IDeliveryType, IModuleComponentProps, ISalesStatusCode } from './utilities';\r\n\r\nexport type ISalesStatusStringMap = {\r\n [x in ISalesStatusCode]: string | undefined;\r\n};\r\n\r\nexport type IDeliveryTypeStringMap = {\r\n [x in IDeliveryType]: string | undefined;\r\n};\r\n\r\nexport interface ISalesLineResources {\r\n productDimensionTypeSize: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeStyle: string;\r\n salesLineQuantityText: string;\r\n configString: string;\r\n shipToLabel: string;\r\n storeLabel: string;\r\n phoneLabel: string;\r\n phoneAriaLabel: string;\r\n buyItAgainAriaLabel: string;\r\n buyItAgainLabel: string;\r\n orderStatusReadyForPickup: string;\r\n orderStatusPickedUp: string;\r\n orderStatusShipped: string;\r\n orderStatusCanceled: string;\r\n orderStatusProcessing: string;\r\n pickedUpSalesLines: string;\r\n deliveredSalesLines: string;\r\n trackingLabel: string;\r\n trackingAriaLabel: string;\r\n trackingComingSoonLabel: string;\r\n discountStringText: string;\r\n orderStatusPartialShipped: string;\r\n}\r\n\r\nexport interface IGetSalesLineInput {\r\n moduleName: string;\r\n moduleComponentProps: IModuleComponentProps;\r\n product: SimpleProduct;\r\n shipment?: Shipment;\r\n salesLine: SalesLine;\r\n isCurrentChannel: boolean;\r\n resources: ISalesLineResources;\r\n imageOnly?: boolean;\r\n catalogs?: ProductCatalog[];\r\n priceCurrency?: string;\r\n}\r\n\r\nexport interface ISalesLine {\r\n salesLineProps: INodeProps;\r\n salesLine: React.ReactNode;\r\n address?: React.ReactNode;\r\n buyAgainButton?: React.ReactNode;\r\n salesStatus: React.ReactNode;\r\n deliveryType: React.ReactNode;\r\n trackingInfo: React.ReactNode;\r\n\r\n // row data\r\n data: {\r\n salesLine: SalesLine;\r\n product: SimpleProduct;\r\n shipment?: Shipment;\r\n deliveryType: IDeliveryType;\r\n productUrl: string | undefined;\r\n salesStatus: ISalesStatusCode;\r\n };\r\n}\r\nenum deliveryTypeEnum {\r\n ship = 'ship',\r\n email = 'email',\r\n carryOut = 'carryOut',\r\n pickUp = 'pickUp'\r\n}\r\n\r\nexport const getDeliveryTypeClassName = (\r\n deliveryType: string,\r\n deliveryTypeStringMap: IDeliveryTypeStringMap,\r\n retailMultiplePickupOption?: boolean\r\n): string | undefined => {\r\n switch (deliveryType) {\r\n case deliveryTypeEnum.ship:\r\n case deliveryTypeEnum.carryOut:\r\n case deliveryTypeEnum.email:\r\n return deliveryType;\r\n default:\r\n return deliveryTypeEnum.pickUp;\r\n }\r\n};\r\n// tslint:disable-next-line:max-func-body-length\r\nexport const getSalesLine = ({\r\n moduleName,\r\n moduleComponentProps: {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n config: { imageSettings }\r\n },\r\n product,\r\n shipment,\r\n salesLine,\r\n isCurrentChannel,\r\n imageOnly,\r\n resources: {\r\n productDimensionTypeSize: sizeString,\r\n productDimensionTypeColor: colorString,\r\n productDimensionTypeStyle: styleString,\r\n salesLineQuantityText: quantityDisplayString,\r\n configString,\r\n shipToLabel,\r\n storeLabel,\r\n phoneLabel,\r\n phoneAriaLabel,\r\n buyItAgainLabel,\r\n buyItAgainAriaLabel,\r\n orderStatusReadyForPickup,\r\n orderStatusProcessing,\r\n orderStatusShipped,\r\n orderStatusPickedUp,\r\n orderStatusCanceled,\r\n orderStatusPartialShipped,\r\n pickedUpSalesLines,\r\n deliveredSalesLines,\r\n trackingLabel,\r\n trackingAriaLabel,\r\n trackingComingSoonLabel,\r\n discountStringText\r\n }\r\n}: IGetSalesLineInput): ISalesLine => {\r\n const salesStatusStringMap: ISalesStatusStringMap = {\r\n canceled: orderStatusCanceled,\r\n readyForPickup: orderStatusReadyForPickup,\r\n pickedUp: orderStatusPickedUp,\r\n processing: orderStatusProcessing,\r\n shipped: orderStatusShipped,\r\n partialShipped: orderStatusPartialShipped,\r\n unknown: undefined\r\n };\r\n\r\n const deliveryTypeStringMap: IDeliveryTypeStringMap = {\r\n pickUp: pickedUpSalesLines,\r\n ship: deliveredSalesLines,\r\n unknown: undefined\r\n };\r\n\r\n const gridSettings = context.request.gridSettings;\r\n const pickupDeliveryModeCode = context.request.channel && context.request.channel.PickupDeliveryModeCode;\r\n const productUrl = getProductUrlSync(product, context.actionContext, undefined);\r\n const deliveryType =\r\n !!pickupDeliveryModeCode && pickupDeliveryModeCode === salesLine.DeliveryMode\r\n ? 'pickUp'\r\n : !!salesLine.DeliveryMode\r\n ? 'ship'\r\n : 'unknown';\r\n const salesStatus = getSalesStatusCode(deliveryType, salesLine, salesLine.SalesStatusValue);\r\n const salesStatusString = salesStatusStringMap[salesStatus];\r\n // const salesStatusComp = salesStatusString && ;\r\n const deliveryTypeClass = getDeliveryTypeClassName(deliveryType, deliveryTypeStringMap);\r\n const deliveryTypeString = deliveryTypeStringMap[deliveryType];\r\n const deliveryTypeComp = deliveryTypeString && ;\r\n const salesStatusComp = salesStatusString && (\r\n \r\n );\r\n var name: void;\r\n const trackingInfo = isCurrentChannel && deliveryType === 'ship' && salesLine.SalesStatusValue !== 7 && (\r\n \r\n {trackingLabel}\r\n {shipment ? (\r\n \r\n {shipment.TrackingNumber}\r\n \r\n ) : (\r\n <>{trackingComingSoonLabel}\r\n )}\r\n \r\n );\r\n\r\n return {\r\n data: {\r\n salesLine,\r\n productUrl,\r\n deliveryType,\r\n salesStatus,\r\n product,\r\n shipment\r\n },\r\n salesLineProps: { className: `${moduleName}__sales-line` },\r\n salesLine: imageOnly ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \r\n ),\r\n address: salesLine.ShippingAddress && (\r\n \r\n ),\r\n deliveryType: deliveryTypeComp,\r\n salesStatus: salesStatusComp,\r\n trackingInfo,\r\n buyAgainButton: isCurrentChannel && (\r\n \r\n {buyItAgainLabel}\r\n \r\n )\r\n };\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IActionContext, IGridSettings, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { SalesLine, SalesOrder, Shipment, SimpleProduct, ProductCatalog } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSalesLine, ISalesLine, ISalesLineResources } from './get-sales-line';\r\nimport { IModuleComponentProps, IPriceContext } from './utilities';\r\n\r\nexport interface IGetSalesLinesInput {\r\n moduleName: string;\r\n moduleComponentProps: IModuleComponentProps;\r\n isCurrentChannel: boolean;\r\n\r\n salesLines: SalesLine[];\r\n products: SimpleProduct[];\r\n shipments?: Shipment[];\r\n priceContext: IPriceContext;\r\n resources: ISalesLineResources;\r\n actionContext: IActionContext;\r\n gridSettings: IGridSettings;\r\n imageSettings?: IImageSettings;\r\n imageOnly?: boolean;\r\n catalogs?: ProductCatalog[];\r\n priceCurrency?: string;\r\n}\r\n\r\nexport const getSalesLines = ({\r\n moduleName,\r\n moduleComponentProps,\r\n salesLines,\r\n products,\r\n shipments,\r\n resources,\r\n isCurrentChannel,\r\n imageOnly,\r\n catalogs,\r\n priceCurrency\r\n}: IGetSalesLinesInput): ISalesLine[] => {\r\n return salesLines.map((salesLine, index) => {\r\n const product = products.find(_product => _product.RecordId === salesLine.ProductId) || ({} as SimpleProduct);\r\n const shipment = shipments && shipments[0];\r\n let newSalesLine = salesLine;\r\n if (index !== 0) {\r\n newSalesLine = { ...salesLine, ShippingAddress: undefined };\r\n }\r\n return getSalesLine({\r\n moduleName,\r\n moduleComponentProps,\r\n product,\r\n shipment,\r\n salesLine: newSalesLine,\r\n isCurrentChannel,\r\n resources,\r\n imageOnly,\r\n catalogs,\r\n priceCurrency\r\n });\r\n });\r\n};\r\n\r\ninterface IProps extends IModuleComponentProps {\r\n resources: ISalesLineResources;\r\n}\r\n\r\nexport const getSalesLinesInput = (\r\n props: IProps,\r\n moduleName: string,\r\n order: SalesOrder,\r\n products: SimpleProduct[],\r\n priceContext: IPriceContext,\r\n catalogs?: ProductCatalog[]\r\n): IGetSalesLinesInput | undefined => {\r\n if (!order || !order.SalesLines || !order.SalesLines.length) {\r\n return;\r\n }\r\n const {\r\n resources,\r\n config: { imageSettings },\r\n context: {\r\n actionContext,\r\n request: {\r\n gridSettings,\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = props;\r\n\r\n const isCurrentChannel = !order.ChannelId || order.ChannelId === channelId;\r\n\r\n return {\r\n moduleName,\r\n moduleComponentProps: props,\r\n isCurrentChannel,\r\n salesLines: order.SalesLines,\r\n priceCurrency: order.CurrencyCode,\r\n products,\r\n shipments: order.Shipments,\r\n priceContext: priceContext,\r\n resources,\r\n actionContext: actionContext,\r\n gridSettings: gridSettings!,\r\n imageSettings: imageSettings,\r\n catalogs\r\n };\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\nimport { IGetHelpInput, IHelp } from '../common';\n\nexport const getOrderDetailsHelp = ({\n needHelpLabel,\n helpLineNumberLabel,\n contactNumber,\n helpLineContactAriaLabel\n}: IGetHelpInput): IHelp => ({\n helpProps: { className: 'ms-order-details__help' },\n needHelpLabel:

{needHelpLabel}

,\n helpLineNumberLabel: {helpLineNumberLabel},\n contactNumber: (\n \n {contactNumber}\n \n )\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { PriceComponent } from '@msdyn365-commerce/components';\n\nimport * as React from 'react';\nimport { IGetOrderSummaryInput, IOrderSummary, IPriceContext } from '../common/';\n\ninterface ISummaryLineProps {\n priceContext?: IPriceContext;\n name: string;\n label: string;\n value?: number;\n freePriceText?: string;\n priceCurrency?: string;\n}\n\nconst OrderSummaryLine: React.SFC = ({\n name,\n label,\n value = 0,\n priceContext,\n freePriceText = 'FREE',\n priceCurrency\n}) => (\n

\n {label}\n {priceContext ? (\n \n ) : (\n {value}\n )}\n

\n);\n\nexport const getOrderDetailsOrderSummary = ({\n order,\n priceContext,\n earnedPoints,\n resource: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n orderSummaryGrandTotalLabel,\n pointsEarnedLabel\n }\n}: IGetOrderSummaryInput): IOrderSummary => {\n const SubtotalAmount = order.GrossAmount! - (+order.ChargeAmount! + +order.TaxAmount!);\n const zeroAmount = `£${Number(0).toFixed(2)}`;\n\n return {\n orderSummaryProps: { className: 'ms-order-details__order-summary' },\n heading:

{orderSummaryHeading}

,\n subtotal: (\n \n ),\n shipping: (\n \n ),\n tax: (\n \n ),\n totalAmount: (\n \n ),\n earnedPoints: earnedPoints ? : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { TenderLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport * as React from 'react';\nimport { IPaymentMethods, IPaymentMethodsInput } from '../common';\n\nconst getLastFourDigit = (digits = '') => digits.substr(-4);\n\nexport const getOrderDetailsPaymentMethods = ({\n priceContext,\n tenderLines,\n tenderIdOperationIdMap,\n priceCurrency,\n resource: { paymentMethodsTitle, creditCardEndingLabel, giftCardEndingLabel, amountCoveredLabel, loyaltyCardUsedLabel, cashUsedLabel }\n}: IPaymentMethodsInput): IPaymentMethods => {\n const getCard = (tenderLine: TenderLine) => (\n
\n

\n {`${tenderLine.CardTypeId} ${creditCardEndingLabel} ${getLastFourDigit(tenderLine.MaskedCardNumber)}`}\n

\n
\n );\n\n const getGiftCertificate = (tenderLine: TenderLine) => (\n
\n

\n {giftCardEndingLabel} {getLastFourDigit(tenderLine.GiftCardId)}\n

\n

\n {amountCoveredLabel}\n \n

\n
\n );\n\n const getLoyalty = (tenderLine: TenderLine) => (\n
\n

\n {loyaltyCardUsedLabel} {tenderLine.LoyaltyCardId}\n

\n

\n {amountCoveredLabel}\n \n

\n
\n );\n\n const getCash = (tenderLine: TenderLine) => (\n
\n

{cashUsedLabel}

\n

\n {amountCoveredLabel}\n \n

\n
\n );\n\n return {\n paymentMethodsProps: { className: 'ms-order-details__payment-methods' },\n title:
{paymentMethodsTitle}
,\n methods: tenderLines.reduce((lines: React.ReactNode[], tenderLine) => {\n if (!tenderLine.TenderTypeId) {\n return lines;\n }\n switch (tenderIdOperationIdMap[tenderLine.TenderTypeId]) {\n case 201:\n lines.push(getCard(tenderLine));\n break;\n case 214:\n lines.push(getGiftCertificate(tenderLine));\n break;\n case 207:\n lines.push(getLoyalty(tenderLine));\n break;\n case 200:\n lines.push(getCash(tenderLine));\n break;\n default:\n // do nothing\n }\n return lines;\n // tslint:disable-next-line:align\n }, [])\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Button, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { getUrlSync, isUserTypeB2B } from '@msdyn365-commerce/core';\nimport { SalesOrder, SimpleProduct, OrderOriginator, ProductCatalog } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\nimport { IGetOrderSummaryInput, IHelp, IOrderSummary, IPaymentMethods, IPaymentMethodsInput } from './common';\nimport { getGroups, IGroups } from './common/get-groups';\nimport { getOrderInfomationInput, getOrderInformation, IOrderInformation } from './common/get-order-information';\nimport { ISalesLine } from './common/get-sales-line';\nimport { getSalesLines, getSalesLinesInput } from './common/get-sales-lines';\nimport LabelComponent from './common/label';\nimport { getTenderIdOperationIdMap, IPriceContext } from './common/utilities';\nimport { IMandsOrderDetailsData } from './mands-order-details.data';\nimport { IMandsOrderDetailsProps } from './mands-order-details.props.autogenerated';\nimport { getOrderDetailsHelp } from './components/get-help';\nimport { getOrderDetailsOrderSummary } from './components/get-order-summary';\nimport { getOrderDetailsPaymentMethods } from './components/get-payment-methods';\n\nexport * from './common/get-groups';\nexport * from './common/get-order-information';\nexport * from './common/get-sales-line';\nexport * from './common/get-sales-lines';\nexport * from './common/utilities';\nexport * from './components/get-help';\nexport * from './components/get-order-summary';\nexport * from './components/get-payment-methods';\n\nexport interface IOrderDetailsViewProps extends IMandsOrderDetailsProps {\n moduleProps: IModuleProps;\n salesOrder?: SalesOrder;\n footerProps?: INodeProps;\n alert?: React.ReactNode;\n loading?: React.ReactNode;\n heading: React.ReactNode;\n placedBy?: React.ReactNode;\n backToShoppingLink?: React.ReactNode;\n orderInfomation?: IOrderInformation;\n salesLines?: ISalesLine[];\n groups?: IGroups;\n orderSummary?: IOrderSummary;\n payment?: IPaymentMethods;\n help?: IHelp;\n catalogs?: ProductCatalog[];\n}\n\n/**\n *\n * OrderDetails component\n * @extends {React.PureComponent>}\n */\nclass OrderDetails extends React.PureComponent> {\n private moduleName: string = 'ms-order-details';\n @observable private _isSelectionModeEnabled: boolean;\n @computed get isCurrentChannel(): boolean {\n if (!this.order) {\n return false;\n }\n return this.order.ChannelId === get(this.props, 'context.request.apiSettings.channelId');\n }\n\n @computed get isDataReady(): boolean {\n return get(this.props, 'data.orderHydration.status') === 'SUCCESS';\n }\n\n @computed get hasError(): boolean {\n return get(this.props, 'data.orderHydration.status') === 'FAILED';\n }\n\n @computed get order(): SalesOrder | undefined {\n return get(this.props, 'data.orderHydration.result.salesOrder');\n }\n\n @computed get products(): SimpleProduct[] {\n return get(this.props, 'data.orderHydration.result.products') || [];\n }\n\n @computed get priceContext(): IPriceContext {\n const {\n id,\n typeName,\n context,\n telemetry,\n resources: { freePriceText }\n } = this.props;\n return {\n id,\n typeName,\n context,\n telemetry,\n freePriceText\n };\n }\n\n @computed get earnedPoints(): number {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n if (loyaltyCard && loyaltyCard.RewardPoints && this.order) {\n const pointPrograms = loyaltyCard.RewardPoints.map(point => point.RewardPointId);\n const rewardLines = this.order.LoyaltyRewardPointLines || [];\n let total = 0;\n rewardLines.forEach(line => {\n if ((line.RewardPointAmountQuantity || 0) > 0 && pointPrograms.indexOf(line.RewardPointId) > -1) {\n total += line.RewardPointAmountQuantity!;\n }\n });\n return total;\n }\n return 0;\n }\n\n @computed get orderSummaryProps(): IGetOrderSummaryInput | undefined {\n if (!this.order) {\n return;\n }\n\n const {\n resources: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n orderSummaryGrandTotalLabel,\n pointsEarnedLabel\n }\n } = this.props;\n return {\n order: this.order,\n earnedPoints: this.earnedPoints,\n priceContext: this.priceContext,\n resource: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n pointsEarnedLabel,\n orderSummaryGrandTotalLabel\n }\n };\n }\n\n @computed get paymentMethodsProps(): IPaymentMethodsInput | undefined {\n const tenderTypes = this.props.data.tenderTypes.result;\n if (!this.order || !this.order.TenderLines || !tenderTypes) {\n return;\n }\n\n const locale = get(this.props, 'context.request.locale') || 'en-US';\n\n const {\n resources: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n cashUsedLabel,\n loyaltyCardUsedLabel\n }\n } = this.props;\n\n return {\n priceContext: this.priceContext,\n tenderLines: this.order.TenderLines,\n tenderIdOperationIdMap: getTenderIdOperationIdMap(tenderTypes),\n locale,\n resource: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n cashUsedLabel,\n loyaltyCardUsedLabel\n },\n priceCurrency: this.order.CurrencyCode\n };\n }\n\n public constructor(props: IMandsOrderDetailsProps) {\n super(props);\n this._isSelectionModeEnabled = false;\n }\n public render(): JSX.Element {\n const {\n resources: {\n noSalesOrderText,\n genericErrorMessage,\n needHelpLabel,\n helpLineNumberLabel,\n loadingLabel,\n backToShopping,\n orderItemLabel,\n orderItemsLabel,\n helpLineContactAriaLabel\n },\n config: { heading, contactNumber, shouldShowQrCode, showChannelInfo }\n } = this.props;\n const customer = this.props.data.customerInformation && this.props.data.customerInformation.result;\n const originators = this.props.data.orderOriginators && this.props.data.orderOriginators.result;\n const originator: OrderOriginator | undefined = originators && originators.length === 1 ? originators[0] : undefined;\n const moduleProps = { moduleProps: this.props, className: classname('ms-order-details', this.props.config.className) };\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const channelIdentities = this.props.data.channels.result?.channelIdentities;\n const orgUnitLocations = this.props.data.orgUnitLocations.result?.orgUnitLocations;\n\n const orderInformationInput =\n this.order &&\n getOrderInfomationInput(\n this.props,\n this.moduleName,\n this.order,\n this.priceContext,\n channelIdentities,\n orgUnitLocations,\n customer,\n originator,\n showChannelInfo,\n false,\n shouldShowQrCode ?? true\n );\n const orderInformation =\n this._isSelectionModeEnabled || !orderInformationInput ? undefined : getOrderInformation(orderInformationInput);\n\n let viewProps: IOrderDetailsViewProps = {\n ...this.props,\n moduleProps,\n heading: heading && ,\n backToShoppingLink: backToShoppingUrl && (\n \n ),\n footerProps: { className: 'ms-order-details__footer' }\n };\n if (isUserTypeB2B(this.props.context.request) && orderInformationInput?.isOnlineStore && originator) {\n viewProps = {\n ...viewProps,\n placedBy: orderInformation?.placedBy\n };\n }\n\n if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!this.isDataReady) {\n viewProps = {\n ...viewProps,\n loading: \n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!this.order) {\n viewProps = {\n ...viewProps,\n alert: \n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n const salesLinesInput = getSalesLinesInput(this.props, this.moduleName, this.order, this.products, this.priceContext);\n const salesLines = salesLinesInput && getSalesLines(salesLinesInput);\n\n const orderInfomationInput = this.order && getOrderInfomationInput(this.props, this.moduleName, this.order, this.priceContext);\n const orderInfomation = orderInfomationInput && getOrderInformation(orderInfomationInput);\n\n viewProps = {\n ...viewProps,\n salesOrder: this.order,\n orderInfomation,\n salesLines,\n groups: salesLines\n ? getGroups({\n moduleName: this.moduleName,\n salesLines,\n resources: { orderItemLabel, orderItemsLabel }\n })\n : undefined,\n orderSummary: this.orderSummaryProps ? getOrderDetailsOrderSummary(this.orderSummaryProps) : undefined,\n payment: this.paymentMethodsProps ? getOrderDetailsPaymentMethods(this.paymentMethodsProps) : undefined,\n help: contactNumber\n ? getOrderDetailsHelp({ needHelpLabel, helpLineNumberLabel, contactNumber, helpLineContactAriaLabel })\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default OrderDetails;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { IGroup, IGroupDelivery, IGroups, IHelp, IOrderInformation, IOrderSummary, IPaymentMethods, ISalesLine } from './common';\n\nimport { IOrderDetailsViewProps } from './mands-order-details';\n\nexport const OrderDetailsOrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n createdDate,\n count,\n amount,\n channelReferenceId\n}) => (\n \n {channelReferenceId}\n {salesId}\n {createdDate}\n {count}\n {amount}\n \n);\n\nexport const OrderDetailsSalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton }) => (\n \n {salesLine}\n {buyAgainButton}\n \n);\n\nexport const OrderDetailsGroupDelivery: React.FC = ({ deliveryProps, heading, count, address, trackingInfo }) => (\n \n {heading}\n {count}\n {address}\n {trackingInfo}\n \n);\n\nexport const OrderDetailsGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\n \n {delivery && }\n {salesLines && (\n \n {salesLines.map(salesLine => (\n \n
\n \n {salesLine.salesStatus}\n
\n
\n ))}\n
\n )}\n
\n);\n\nexport const OrderDetailsGroups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderDetailsOrderSummary: React.FC = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n \n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n \n);\n\nexport const OrderDetailsPayment: React.FC = ({ paymentMethodsProps, title, methods }) => (\n \n {title}\n {methods}\n \n);\n\nexport const OrderDetailsHelp: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n \n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n \n);\n\nconst OrderDetailsView: React.FC = ({\n moduleProps,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups,\n placedBy\n}) => {\n return (\n \n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && }\n {groups && }\n {orderSummary && }\n {payment && }\n {help && }\n \n );\n};\n\nexport default OrderDetailsView;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\ninterface ILabelProps {\r\n className: string;\r\n label: string;\r\n}\r\n\r\nconst Label: React.FC = ({ className, label }) => {label};\r\n\r\nexport default Label;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { buildCacheKey, getSimpleProducts, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICommerceApiSettings\n} from '@msdyn365-commerce/core';\nimport { getOrderShipmentsHistoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\nimport { OrderShipments, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nexport interface IPaging {\n top: number;\n skip: number;\n}\n\nexport interface IOrderHistory {\n salesOrders: OrderShipments[];\n products: SimpleProduct[];\n}\n\n/**\n * Calls the Retail API and returns the products\n * * @param nextPageToken - Next Page Link.\n */\nconst getOrderShipmentHistory = (paging: IPaging, nextPageToken?: string) => async (ctx: IActionContext): Promise => {\n const accountNumber: string | undefined = ctx.requestContext.user.customerAccountNumber || '';\n return getOrderShipmentsHistoryAsync(\n {\n callerContext: ctx,\n queryResultSettings: {\n Paging: {\n Top: paging.top,\n Skip: paging.skip,\n NextPageToken: nextPageToken\n }\n }\n },\n accountNumber\n );\n};\n\n/**\n * Calls the Retail API and returns the products\n */\nconst getProducts = (productIds: number[] = [], channelId?: number) => (ctx: IActionContext): Promise => {\n const productInputs = productIds.map(productId => new ProductInput(productId, ctx.requestContext.apiSettings, channelId));\n return getSimpleProducts(productInputs, ctx);\n};\n\n/**\n * Action input\n */\nexport class GetSalesOrderHistoryWithHydrationsInput implements IActionInput {\n public paging: IPaging;\n private apiSettings: ICommerceApiSettings;\n\n constructor(paging: IPaging, apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n this.paging = paging;\n }\n\n public getCacheKey = () => buildCacheKey(`OrderHistory`, this.apiSettings);\n /**\n * GetCacheObjectType.\n * @returns String.\n */\n public getCacheObjectType = () => `OrderHistory`;\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Get sales order with hydrations action\n */\nexport async function getSalesOrderHistoryWithHydrationsAction(\n input: GetSalesOrderHistoryWithHydrationsInput,\n ctx: IActionContext\n): Promise {\n if (!ctx) {\n throw new Error(`getSalesOrderWithHydrationsAction - Action context cannot be null/undefined`);\n }\n const channelId = ctx.requestContext.apiSettings.channelId;\n let salesOrders: OrderShipments[] = [];\n\n try {\n salesOrders = await getOrderShipmentHistory(input.paging)(ctx);\n } catch (error) {\n throw error;\n }\n\n if (!salesOrders || !salesOrders.length) {\n return {\n salesOrders: [],\n products: []\n };\n }\n\n const prodIdsByChannel: { [x: number]: number[] } = {\n [channelId]: []\n };\n\n salesOrders\n .filter(salesOrder => salesOrder)\n .forEach(\n salesOrder =>\n salesOrder &&\n salesOrder.SalesLines &&\n salesOrder.SalesLines.forEach(childrenEntry => {\n // salesProdIds.push(childrenEntry.ProductId || 0)\n const prodId = childrenEntry.ProductId || 0;\n if (!salesOrder.ChannelId) {\n // Use current channel\n prodIdsByChannel[channelId].push(prodId);\n } else {\n if (!prodIdsByChannel[salesOrder.ChannelId]) {\n prodIdsByChannel[salesOrder.ChannelId] = [];\n }\n prodIdsByChannel[salesOrder.ChannelId].push(prodId);\n }\n })\n );\n\n const getProductsPromise = Object.entries(prodIdsByChannel).map(([cId, prodIds]) => getProducts(prodIds, Number(cId))(ctx));\n\n return Promise.all(getProductsPromise)\n .then(\n (productList): IOrderHistory => {\n const products = productList.reduce((memo, list) => {\n return [...memo, ...list];\n }, []);\n\n return {\n salesOrders,\n products\n };\n }\n )\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('Failed to get products');\n throw error;\n });\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-managment/order-history/get-order-shipment-history',\n action: >getSalesOrderHistoryWithHydrationsAction\n});\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IAny, ICoreContext, IGeneric, IImageSettings, IModule } from '@msdyn365-commerce/core';\r\nimport { SalesLine, TenderType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\r\nimport groupBy from 'lodash/groupBy';\r\nimport { ISalesLine } from './get-sales-line';\r\n\r\nexport interface IModuleComponentProps extends IModule {\r\n config: {\r\n imageSettings?: IImageSettings;\r\n };\r\n}\r\n\r\nexport interface IPriceContext {\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext>;\r\n telemetry: ITelemetry;\r\n freePriceText: string;\r\n}\r\n\r\nexport const getTenderIdOperationIdMap = (tenderTypes: TenderType[]): object => {\r\n return tenderTypes.reduce((map, tenderType) => {\r\n if (tenderType.TenderTypeId) {\r\n map[tenderType.TenderTypeId] = tenderType.OperationId;\r\n }\r\n return map;\r\n }, {});\r\n};\r\n\r\nexport const countItems = (salesLines: SalesLine[]) => {\r\n return salesLines.reduce((count, salesLine) => {\r\n return count + (salesLine.Quantity || 0);\r\n }, 0);\r\n};\r\n\r\nexport const getSalesLinesByDelivery = (salesLines?: SalesLine[], pickupDeliveryModeCode?: string): SalesLine[] => {\r\n if (!salesLines || !salesLines.length) {\r\n return [];\r\n }\r\n return salesLines.filter(salesLine =>\r\n // isPickUp ? getPickUp : getOthers\r\n pickupDeliveryModeCode ? salesLine.DeliveryMode === pickupDeliveryModeCode : salesLine.DeliveryMode !== pickupDeliveryModeCode\r\n );\r\n};\r\n\r\nexport const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=80&h=80&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=147&h=147&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n};\r\n\r\nexport type IDeliveryType = 'pickUp' | 'ship' | 'carryOut';\r\n\r\nexport type ISalesStatusCode = 'canceled' | 'readyForPickup' | 'pickedUp' | 'processing' | 'shipped' | 'unknown';\r\n\r\nexport const getSalesStatusCode = (deliveryType: IDeliveryType, statusValue?: number): ISalesStatusCode => {\r\n if (statusValue === 7) {\r\n return 'canceled';\r\n }\r\n if (deliveryType === 'pickUp') {\r\n switch (statusValue) {\r\n case 3:\r\n return 'readyForPickup';\r\n case 4:\r\n return 'pickedUp';\r\n default:\r\n return 'processing';\r\n }\r\n } else if (deliveryType === 'ship') {\r\n switch (statusValue) {\r\n case 3:\r\n return 'processing';\r\n case 4:\r\n return 'shipped';\r\n default:\r\n return 'processing';\r\n }\r\n } else if (deliveryType === 'carryOut') {\r\n return 'processing';\r\n } else {\r\n return 'unknown';\r\n }\r\n};\r\n\r\nexport type ITrackingId = string | 'unknown';\r\nexport type IAddressId = string | 'unknown';\r\n\r\nexport interface IGroupData {\r\n deliveryType: IDeliveryType;\r\n salesStatus: ISalesStatusCode;\r\n addressId: IAddressId | 'unknown';\r\n trackingId: ITrackingId | 'unknown';\r\n count: number;\r\n salesLines: ISalesLine[];\r\n}\r\n\r\nexport const groupSalesLines = (salesLines: ISalesLine[]): IGroupData[] => {\r\n const getGroupByDeliveryType = (items: ISalesLine[]) => groupBy(items, item => item.data.deliveryType);\r\n const getGroupBySalesStatusCode = (items: ISalesLine[]) => groupBy(items, item => item.data.salesStatus);\r\n const getGroupByTrackingId = (items: ISalesLine[]) => groupBy(items, item => item.data.salesLine.TrackingId || 'unknown');\r\n const getGroupByAddressId = (items: ISalesLine[]) =>\r\n groupBy(items, item => (item.data.salesLine.ShippingAddress && item.data.salesLine.ShippingAddress.RecordId) || 'unknown');\r\n\r\n const flatGroup: IGroupData[] = [];\r\n\r\n // 1) Group by delivery type\r\n // @ts-ignore\r\n const group = getGroupByDeliveryType(salesLines);\r\n\r\n // 2) Group by sales status code\r\n Object.entries(group).forEach(([deliveryType, groupByDeliveryType]) => {\r\n // @ts-ignore\r\n group[deliveryType] = getGroupBySalesStatusCode(groupByDeliveryType);\r\n\r\n Object.entries(group[deliveryType]).forEach(([salesStatus, groupBySalesStatusCode]) => {\r\n // @ts-ignore 3) Group by address id\r\n groupBySalesStatusCode[salesStatus] = getGroupByAddressId(groupBySalesStatusCode);\r\n\r\n // @ts-ignore\r\n Object.entries(groupBySalesStatusCode[salesStatus]).forEach(([addressId, groupByAddressId]) => {\r\n // @ts-ignore 4) Group by address id\r\n groupByAddressId[addressId] = getGroupByTrackingId(groupByAddressId);\r\n\r\n // @ts-ignore\r\n Object.entries(groupByAddressId[addressId]).forEach(([trackingId, groupByTrackingId]) => {\r\n flatGroup.push({\r\n // @ts-ignore\r\n deliveryType,\r\n // @ts-ignore\r\n salesStatus,\r\n addressId,\r\n trackingId,\r\n // @ts-ignore\r\n count: countItems(groupByTrackingId.map(item => item.data.salesLine)),\r\n // @ts-ignore\r\n salesLines: groupByTrackingId\r\n });\r\n });\r\n });\r\n });\r\n });\r\n\r\n return flatGroup;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISalesLine } from './get-sales-line';\r\nimport { groupSalesLines, IDeliveryType, ISalesStatusCode } from './utilities';\r\n\r\nexport interface IGroupDelivery {\r\n deliveryProps: INodeProps;\r\n heading: React.ReactNode;\r\n count: React.ReactNode;\r\n processing: React.ReactNode;\r\n trackingInfo: React.ReactNode;\r\n address: React.ReactNode;\r\n}\r\n\r\nexport interface IGroup {\r\n groupProps: INodeProps;\r\n salesLinesProps: INodeProps;\r\n delivery: IGroupDelivery;\r\n salesLines: ISalesLine[];\r\n // row data\r\n data: {\r\n count: number;\r\n deliveryType: IDeliveryType;\r\n salesStatus: ISalesStatusCode;\r\n };\r\n}\r\n\r\nexport interface IGroupsInput {\r\n moduleName: string;\r\n salesLines: ISalesLine[];\r\n resources: {\r\n orderItemLabel: string;\r\n orderItemsLabel: string;\r\n shippingItemToOBOCustomerLabel?: string;\r\n };\r\n isOboRequest?: boolean;\r\n customerName?: string;\r\n}\r\n\r\nexport interface IGroups {\r\n groupsProps: INodeProps;\r\n groups: IGroup[];\r\n}\r\n\r\nexport const getGroups = ({\r\n moduleName,\r\n salesLines,\r\n customerName,\r\n isOboRequest,\r\n resources: { orderItemLabel, orderItemsLabel, shippingItemToOBOCustomerLabel }\r\n}: IGroupsInput): IGroups => {\r\n const groups = groupSalesLines(salesLines).map(group => {\r\n const { deliveryType, salesStatus, count, salesLines: _salesLines } = group;\r\n const itemLabel = count === 1 ? orderItemLabel : orderItemsLabel;\r\n const groupProps = { className: `${moduleName}__group deliveryType-${deliveryType} salesStatus-${salesStatus}` };\r\n const salesLinesProps = { className: `${moduleName}__sales-lines` };\r\n const address = _salesLines[0].address;\r\n const trackingInfo = _salesLines[0].trackingInfo;\r\n const isProcessing = _salesLines[0].data.salesStatus === 'processing';\r\n const delivery = {\r\n deliveryProps: { className: `${moduleName}__group-delivery` },\r\n heading: (\r\n \r\n {isProcessing ? _salesLines[0].deliveryType : _salesLines[0].salesStatus}\r\n \r\n ),\r\n processing: isProcessing ? (\r\n {_salesLines[0].salesStatus}\r\n ) : (\r\n undefined\r\n ),\r\n count: {`(${count} ${itemLabel})`},\r\n trackingInfo,\r\n address\r\n };\r\n return {\r\n groupProps,\r\n salesLinesProps,\r\n delivery,\r\n salesLines: _salesLines,\r\n data: {\r\n count,\r\n deliveryType,\r\n salesStatus\r\n }\r\n };\r\n });\r\n\r\n return {\r\n groupsProps: { className: `${moduleName}__groups` },\r\n groups\r\n };\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { ChannelIdentity, Customer, OrderOriginator, OrderShipments, OrgUnitLocation, SalesOrder } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { countItems, IModuleComponentProps, IPriceContext } from './utilities';\r\nimport { isOboRequest } from '@msdyn365-commerce/core';\r\n\r\nexport interface IOrderInformationInputResources {\r\n receiptEmailMessage?: string;\r\n orderItemLabel: string;\r\n orderItemsLabel: string;\r\n processingLabel: string;\r\n orderIdLabel: string;\r\n confirmationIdLabel: string;\r\n trackingLabel: string;\r\n trackingAriaLabel: string;\r\n trackingComingSoonLabel: string;\r\n posChannelNameText?: string;\r\n onlineStoreChannelNameText?: string;\r\n orderPlacedByFullText?: string;\r\n orderPlacedByYouText?: string;\r\n orderOnBehalfOfText?: string;\r\n}\r\nexport interface IOrderInformationInput {\r\n moduleName: string;\r\n channelReferenceId?: string;\r\n channelName?: string;\r\n channelAddress?: string;\r\n showChannelInfo?: boolean;\r\n receiptEmail?: string;\r\n createdDate?: string;\r\n amount?: number;\r\n priceContext: IPriceContext;\r\n salesId?: string;\r\n hasTrackingInfo?: boolean;\r\n count?: number;\r\n resources: IOrderInformationInputResources;\r\n originator?: OrderOriginator;\r\n isYou?: [boolean, boolean];\r\n isB2bAdmin?: boolean;\r\n isOnlineStore?: boolean;\r\n priceCurrency?: string;\r\n}\r\n\r\nexport interface IOrderInformation {\r\n orderInformationProps: INodeProps;\r\n channelName: React.ReactNode;\r\n channelAddress: React.ReactNode;\r\n placedBy?: React.ReactNode;\r\n salesId: React.ReactNode;\r\n receiptEmail: React.ReactNode;\r\n createdDate: React.ReactNode;\r\n count: React.ReactNode;\r\n amount: React.ReactNode;\r\n channelReferenceId: React.ReactNode;\r\n}\r\n\r\nconst callCenterChannelTypeValue = 4;\r\n\r\nconst getPlacedBy = (\r\n moduleName: string,\r\n originator: OrderOriginator | undefined,\r\n isYou: [boolean, boolean] | undefined,\r\n orderPlacedByFullText: string | undefined,\r\n orderPlacedByYouText: string | undefined,\r\n orderOnBehalfOfText: string | undefined\r\n): React.ReactNode | undefined => {\r\n let placedByNode: React.ReactNode | undefined;\r\n if (originator) {\r\n const placedByName =\r\n originator.StaffId && originator.StaffName\r\n ? originator.StaffName\r\n : originator.CustomerId && originator.CustomerName\r\n ? originator.CustomerName\r\n : '-';\r\n const onBehalfOfText = originator.StaffId && originator.StaffName && originator.CustomerId && originator.CustomerName;\r\n placedByNode = (\r\n
\r\n {orderPlacedByFullText} {placedByName} {isYou && isYou[0] && ` ${orderPlacedByYouText}`}\r\n {onBehalfOfText && (\r\n
\r\n {orderOnBehalfOfText} {`${originator.CustomerName}`}\r\n {isYou && isYou[1] && ` ${orderPlacedByYouText}`}\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n return placedByNode;\r\n};\r\n\r\nexport const getOrderInformation = ({\r\n moduleName,\r\n channelReferenceId,\r\n channelName,\r\n channelAddress,\r\n showChannelInfo,\r\n receiptEmail,\r\n createdDate,\r\n amount,\r\n priceContext,\r\n salesId,\r\n count,\r\n originator,\r\n isYou,\r\n priceCurrency,\r\n resources: {\r\n receiptEmailMessage,\r\n orderItemLabel,\r\n orderItemsLabel,\r\n processingLabel,\r\n orderIdLabel,\r\n confirmationIdLabel,\r\n posChannelNameText,\r\n onlineStoreChannelNameText,\r\n orderPlacedByFullText,\r\n orderPlacedByYouText,\r\n orderOnBehalfOfText\r\n }\r\n}: IOrderInformationInput): IOrderInformation => ({\r\n orderInformationProps: { className: `${moduleName}__order-information` },\r\n channelName:\r\n showChannelInfo &&\r\n channelName &&\r\n (channelAddress ? (\r\n {`${posChannelNameText} ${channelName}`}\r\n ) : (\r\n {onlineStoreChannelNameText}\r\n )),\r\n channelAddress: showChannelInfo && channelAddress && (\r\n {channelAddress}\r\n ),\r\n placedBy: getPlacedBy(moduleName, originator, isYou, orderPlacedByFullText, orderPlacedByYouText, orderOnBehalfOfText),\r\n salesId: {`${orderIdLabel} ${salesId || processingLabel}`},\r\n receiptEmail: receiptEmail && (\r\n \r\n {receiptEmailMessage}\r\n {receiptEmail}\r\n \r\n ),\r\n createdDate: {createdDate},\r\n count: count !== undefined && count > 0 && (\r\n \r\n {count === 1 ? `${count} ${orderItemLabel}` : `${count} ${orderItemsLabel}`}\r\n \r\n ),\r\n amount: (amount || amount === 0) && (\r\n \r\n ),\r\n channelReferenceId: channelReferenceId && (\r\n {`${confirmationIdLabel} ${channelReferenceId}`}\r\n )\r\n});\r\n\r\ninterface IProps extends IModuleComponentProps {\r\n resources: IOrderInformationInputResources;\r\n customer?: Customer;\r\n}\r\n\r\n/**\r\n * Retrieves channel is online store or not.\r\n * @param channelTypeValue - The channel type.\r\n * @param channelAddress - Channel Address.\r\n * @returns {Boolean} that indicates that the channel is in the online store.\r\n */\r\nexport const isOnlineStoreChannel = (channelTypeValue: number | undefined, channelAddress: string | undefined): boolean => {\r\n return channelTypeValue !== callCenterChannelTypeValue && !channelAddress;\r\n};\r\n\r\nexport const getOrderChannelTypeValue: (order: SalesOrder | OrderShipments, channelIdentities?: ChannelIdentity[]) => number | undefined = (\r\n order: SalesOrder | OrderShipments,\r\n channelIdentities?: ChannelIdentity[]\r\n) => {\r\n const orderChannel = channelIdentities?.find(channel => {\r\n return channel.RecordId === order.ChannelId;\r\n });\r\n\r\n const channelType = orderChannel?.ChannelType.Value;\r\n return channelType;\r\n};\r\n\r\n/**\r\n * Retrieves order channel address.\r\n * @param order - Order info.\r\n * @param orgUnitLocations - OrgUnitLocation data.\r\n * @returns String with the address of the channel or an empty string.\r\n */\r\nexport const getOrderChannelAddress: (order: SalesOrder | OrderShipments, orgUnitLocations?: OrgUnitLocation[]) => string = (\r\n order: SalesOrder | OrderShipments,\r\n orgUnitLocations?: OrgUnitLocation[]\r\n) => {\r\n const orderOrgUnitLocation = orgUnitLocations?.find(location => {\r\n return location.ChannelId === order.ChannelId;\r\n });\r\n\r\n const channelAddress = orderOrgUnitLocation?.Address ?? '';\r\n return channelAddress;\r\n};\r\n\r\n/**\r\n * @param {Customer} customer A current customer.\r\n * @param {OrderOriginator} originator The order originator.\r\n * */\r\n\r\nexport const getOrderInfomationInput = (\r\n props: IProps,\r\n moduleName: string,\r\n order: SalesOrder | OrderShipments,\r\n priceContext: IPriceContext,\r\n channelIdentities?: ChannelIdentity[],\r\n customer?: Customer,\r\n originator?: OrderOriginator,\r\n orgUnitLocations?: OrgUnitLocation[],\r\n showChannelInfo?: boolean\r\n): IOrderInformationInput => {\r\n const {\r\n resources,\r\n context: {\r\n request: {\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = props;\r\n\r\n // @ts-ignore OrderShipments doesnt has ChannelId\r\n const showTrackingInfo = !!order.ChannelId && order.ChannelId === channelId;\r\n\r\n const locale = get(props, 'context.request.locale') || 'en-US';\r\n const count = order.SalesLines && order.SalesLines.length ? countItems(order.SalesLines) : 0;\r\n\r\n const channelTypeValue = getOrderChannelTypeValue(order, channelIdentities);\r\n const channelAddress = getOrderChannelAddress(order, orgUnitLocations);\r\n const isYou =\r\n !isOboRequest(props.context.request) &&\r\n originator?.CustomerId &&\r\n originator?.CustomerName &&\r\n !originator?.StaffId &&\r\n !originator?.StaffName &&\r\n customer?.AccountNumber === originator?.CustomerId\r\n ? true\r\n : false;\r\n const isYouObo = !isYou && !isOboRequest(props.context.request);\r\n\r\n const orderChannel = channelIdentities\r\n ? channelIdentities.filter(channel => {\r\n return channel.RecordId === order.ChannelId;\r\n })\r\n : '';\r\n // const orderOrgUnitLocation = orgUnitLocations\r\n // ? orgUnitLocations.filter(location => {\r\n // return location.ChannelId === order.ChannelId;\r\n // })\r\n // : '';\r\n\r\n return {\r\n moduleName: moduleName,\r\n createdDate: (order.CreatedDateTime && new Date(order.CreatedDateTime).toLocaleDateString(locale)) || '',\r\n salesId: order.SalesId,\r\n priceCurrency: order.CurrencyCode,\r\n originator: originator,\r\n isYou: [isYou, isYouObo],\r\n isB2bAdmin: customer?.IsB2bAdmin,\r\n showChannelInfo: showChannelInfo,\r\n // @ts-ignore OrderShipments doesnt has ReceiptEmail\r\n receiptEmail: order.ReceiptEmail,\r\n channelReferenceId: order.ChannelReferenceId,\r\n channelName: orderChannel && orderChannel.length > 0 ? orderChannel[0].Name : '',\r\n // channelAddress: orderOrgUnitLocation && orderOrgUnitLocation.length > 0 ? orderOrgUnitLocation[0].Address : '',\r\n channelAddress: channelAddress,\r\n amount: order.TotalAmount || 0,\r\n priceContext: priceContext,\r\n count,\r\n resources,\r\n isOnlineStore: isOnlineStoreChannel(channelTypeValue, channelAddress)\r\n };\r\n};\r\n","/* eslint-disable no-redeclare */\r\n/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Address as AddressRetail } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { IDeliveryType } from './utilities';\r\n\r\nexport type addressType = 'store' | 'ship';\r\n\r\nexport interface IShippingAddressProps {\r\n moduleName: string;\r\n address: AddressRetail;\r\n deliveryType: IDeliveryType;\r\n resource: {\r\n shipToLabel: string;\r\n storeLabel: string;\r\n phoneLabel: string;\r\n phoneAriaLabel: string;\r\n };\r\n}\r\n\r\nconst Address: React.SFC = ({\r\n moduleName,\r\n address,\r\n deliveryType,\r\n resource: { shipToLabel, storeLabel, phoneLabel, phoneAriaLabel }\r\n}) => (\r\n
\r\n
{deliveryType === 'pickUp' ? storeLabel : shipToLabel}
\r\n {address.Name && {address.Name}}\r\n {address.FullAddress && {address.FullAddress}}\r\n\r\n {/* TODO: Address format is based on country format\r\n {address.Name && {address.Name}}\r\n {address.Street && {address.Street} }\r\n {address.City && {address.City}}\r\n {address.State && {`, ${address.State}`}}\r\n {address.ZipCode && {` ${address.ZipCode}`}}\r\n {address.Phone && (\r\n {phoneLabel}\r\n \r\n {address.Phone}\r\n \r\n \r\n )} */}\r\n
\r\n);\r\n\r\nexport default React.memo(Address);\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport { Image } from '@msdyn365-commerce/core';\r\nimport { SalesLine, Shipment, SimpleProduct, ProductCatalog } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport Address from './address';\r\nimport LabelComponent from './label';\r\nimport { defaultImageSettings, getSalesStatusCode, IDeliveryType, IModuleComponentProps, ISalesStatusCode } from './utilities';\r\n\r\nexport type ISalesStatusStringMap = {\r\n [x in ISalesStatusCode]: string | undefined;\r\n};\r\n\r\nexport type IDeliveryTypeStringMap = {\r\n [x in IDeliveryType]: string | undefined;\r\n};\r\n\r\nexport interface ISalesLineResources {\r\n productDimensionTypeSize: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeStyle: string;\r\n salesLineQuantityText: string;\r\n configString: string;\r\n shipToLabel: string;\r\n storeLabel: string;\r\n phoneLabel: string;\r\n phoneAriaLabel: string;\r\n buyItAgainAriaLabel: string;\r\n buyItAgainLabel: string;\r\n orderStatusReadyForPickup: string;\r\n orderStatusPickedUp: string;\r\n orderStatusShipped: string;\r\n orderStatusCanceled: string;\r\n orderStatusProcessing: string;\r\n pickedUpSalesLines: string;\r\n deliveredSalesLines: string;\r\n carryOutSalesLines: string;\r\n trackingLabel: string;\r\n trackingAriaLabel: string;\r\n trackingComingSoonLabel: string;\r\n discountStringText: string;\r\n}\r\n\r\nexport interface IGetSalesLineInput {\r\n moduleName: string;\r\n moduleComponentProps: IModuleComponentProps;\r\n product: SimpleProduct;\r\n shipment?: Shipment;\r\n salesLine: SalesLine;\r\n isCurrentChannel: boolean;\r\n resources: ISalesLineResources;\r\n imageOnly?: boolean;\r\n catalogs?: ProductCatalog[];\r\n priceCurrency?: string;\r\n}\r\n\r\nexport interface ISalesLine {\r\n salesLineProps: INodeProps;\r\n salesLine: React.ReactNode;\r\n address?: React.ReactNode;\r\n buyAgainButton?: React.ReactNode;\r\n salesStatus: React.ReactNode;\r\n deliveryType: React.ReactNode;\r\n trackingInfo: React.ReactNode;\r\n\r\n // row data\r\n data: {\r\n salesLine: SalesLine;\r\n product: SimpleProduct;\r\n shipment?: Shipment;\r\n deliveryType: IDeliveryType;\r\n productUrl: string | undefined;\r\n salesStatus: ISalesStatusCode;\r\n };\r\n}\r\nenum deliveryTypeEnum {\r\n ship = 'ship',\r\n email = 'email',\r\n carryOut = 'carryOut',\r\n pickUp = 'pickUp'\r\n}\r\n\r\nexport const getDeliveryTypeClassName = (\r\n deliveryType: string,\r\n deliveryTypeStringMap: IDeliveryTypeStringMap,\r\n retailMultiplePickupOption?: boolean\r\n): string | undefined => {\r\n switch (deliveryType) {\r\n case deliveryTypeEnum.ship:\r\n case deliveryTypeEnum.carryOut:\r\n case deliveryTypeEnum.email:\r\n return deliveryType;\r\n default:\r\n return deliveryTypeEnum.pickUp;\r\n }\r\n};\r\n// tslint:disable-next-line:max-func-body-length\r\nexport const getSalesLine = ({\r\n moduleName,\r\n moduleComponentProps: {\r\n id,\r\n typeName,\r\n context,\r\n telemetry,\r\n config: { imageSettings }\r\n },\r\n product,\r\n shipment,\r\n salesLine,\r\n isCurrentChannel,\r\n imageOnly,\r\n resources: {\r\n productDimensionTypeSize: sizeString,\r\n productDimensionTypeColor: colorString,\r\n productDimensionTypeStyle: styleString,\r\n salesLineQuantityText: quantityDisplayString,\r\n configString,\r\n shipToLabel,\r\n storeLabel,\r\n phoneLabel,\r\n phoneAriaLabel,\r\n buyItAgainLabel,\r\n buyItAgainAriaLabel,\r\n orderStatusReadyForPickup,\r\n orderStatusProcessing,\r\n orderStatusShipped,\r\n orderStatusPickedUp,\r\n orderStatusCanceled,\r\n pickedUpSalesLines,\r\n deliveredSalesLines,\r\n carryOutSalesLines,\r\n trackingLabel,\r\n trackingAriaLabel,\r\n trackingComingSoonLabel,\r\n discountStringText\r\n }\r\n}: IGetSalesLineInput): ISalesLine => {\r\n const salesStatusStringMap: ISalesStatusStringMap = {\r\n canceled: orderStatusCanceled,\r\n readyForPickup: orderStatusReadyForPickup,\r\n pickedUp: orderStatusPickedUp,\r\n processing: orderStatusProcessing,\r\n shipped: orderStatusShipped,\r\n unknown: undefined\r\n };\r\n\r\n const deliveryTypeStringMap: IDeliveryTypeStringMap = {\r\n pickUp: pickedUpSalesLines,\r\n ship: deliveredSalesLines,\r\n carryOut: carryOutSalesLines\r\n };\r\n\r\n const gridSettings = context.request.gridSettings;\r\n const pickupDeliveryModeCode = context.request.channel && context.request.channel.PickupDeliveryModeCode;\r\n const productUrl = getProductUrlSync(product, context.actionContext, undefined);\r\n const deliveryType =\r\n !!pickupDeliveryModeCode && pickupDeliveryModeCode === salesLine.DeliveryMode\r\n ? 'pickUp'\r\n : !!salesLine.DeliveryMode\r\n ? 'ship'\r\n : 'carryOut';\r\n const salesStatus = getSalesStatusCode(deliveryType, salesLine.SalesStatusValue);\r\n const salesStatusString = salesStatusStringMap[salesStatus];\r\n // const salesStatusComp = salesStatusString && ;\r\n const deliveryTypeString = deliveryTypeStringMap[deliveryType];\r\n const deliveryTypeClass = getDeliveryTypeClassName(deliveryType, deliveryTypeStringMap);\r\n const deliveryTypeComp = deliveryTypeString && ;\r\n const salesStatusComp = salesStatusString && (\r\n \r\n );\r\n\r\n const trackingInfo = isCurrentChannel && deliveryType === 'ship' && (\r\n \r\n {trackingLabel}\r\n {shipment ? (\r\n \r\n {shipment.TrackingNumber}\r\n \r\n ) : (\r\n <>{trackingComingSoonLabel}\r\n )}\r\n \r\n );\r\n\r\n return {\r\n data: {\r\n salesLine,\r\n productUrl,\r\n deliveryType,\r\n salesStatus,\r\n product,\r\n shipment\r\n },\r\n salesLineProps: { className: `${moduleName}__sales-line` },\r\n salesLine: imageOnly ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \r\n ),\r\n address: salesLine.ShippingAddress && (\r\n \r\n ),\r\n deliveryType: deliveryTypeComp,\r\n salesStatus: salesStatusComp,\r\n trackingInfo,\r\n buyAgainButton: isCurrentChannel && (\r\n \r\n {buyItAgainLabel}\r\n \r\n )\r\n };\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IActionContext, IGridSettings, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { OrderShipments, SalesLine, SalesOrder, Shipment, SimpleProduct, ProductCatalog } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSalesLine, ISalesLine, ISalesLineResources } from './get-sales-line';\r\nimport { IModuleComponentProps, IPriceContext } from './utilities';\r\n\r\nexport interface IGetSalesLinesInput {\r\n moduleName: string;\r\n moduleComponentProps: IModuleComponentProps;\r\n isCurrentChannel: boolean;\r\n\r\n salesLines: SalesLine[];\r\n products: SimpleProduct[];\r\n shipments?: Shipment[];\r\n priceContext: IPriceContext;\r\n resources: ISalesLineResources;\r\n actionContext: IActionContext;\r\n gridSettings: IGridSettings;\r\n imageSettings?: IImageSettings;\r\n imageOnly?: boolean;\r\n catalogs?: ProductCatalog[];\r\n priceCurrency?: string;\r\n}\r\n\r\nexport const getSalesLines = ({\r\n moduleName,\r\n moduleComponentProps,\r\n salesLines,\r\n products,\r\n shipments,\r\n resources,\r\n isCurrentChannel,\r\n imageOnly,\r\n catalogs,\r\n priceCurrency\r\n}: IGetSalesLinesInput): ISalesLine[] => {\r\n return salesLines.map(salesLine => {\r\n const product = products.find(_product => _product.RecordId === salesLine.ProductId) || ({} as SimpleProduct);\r\n const shipment = shipments && shipments.find(_shipment => _shipment.ShipmentId === salesLine.TrackingId);\r\n return getSalesLine({\r\n moduleName,\r\n moduleComponentProps,\r\n product,\r\n shipment,\r\n salesLine,\r\n isCurrentChannel,\r\n resources,\r\n imageOnly,\r\n catalogs,\r\n priceCurrency\r\n });\r\n });\r\n};\r\n\r\ninterface IProps extends IModuleComponentProps {\r\n resources: ISalesLineResources;\r\n}\r\n\r\nexport const getSalesLinesInput = (\r\n props: IProps,\r\n moduleName: string,\r\n order: SalesOrder | OrderShipments,\r\n products: SimpleProduct[],\r\n priceContext: IPriceContext,\r\n catalogs?: ProductCatalog[]\r\n): IGetSalesLinesInput | undefined => {\r\n if (!order || !order.SalesLines || !order.SalesLines.length) {\r\n return;\r\n }\r\n const {\r\n resources,\r\n config: { imageSettings },\r\n context: {\r\n actionContext,\r\n request: {\r\n gridSettings,\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = props;\r\n\r\n const isCurrentChannel = !order.ChannelId || order.ChannelId === channelId;\r\n\r\n return {\r\n moduleName,\r\n moduleComponentProps: props,\r\n isCurrentChannel,\r\n salesLines: order.SalesLines,\r\n priceCurrency: order.CurrencyCode,\r\n products,\r\n shipments: order.Shipments,\r\n priceContext: priceContext,\r\n resources,\r\n actionContext: actionContext,\r\n gridSettings: gridSettings!,\r\n imageSettings: imageSettings,\r\n catalogs\r\n };\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport {\n ChannelIdentity,\n Customer,\n OrderOriginator,\n OrderShipments,\n OrgUnitLocation,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\nimport { getGroups, IGroups } from '../common/get-groups';\nimport { getOrderInfomationInput, getOrderInformation, IOrderInformation } from '../common/get-order-information';\nimport { getSalesLines, getSalesLinesInput } from '../common/get-sales-lines';\nimport { IMandsOrderHistoryData } from '../mands-order-history.data';\nimport { IMandsOrderHistoryProps } from '../mands-order-history.props.autogenerated';\n\nexport interface ISalesOrderProps extends IMandsOrderHistoryProps {\n salesOrder: OrderShipments;\n products: SimpleProduct[];\n channelIdentities?: ChannelIdentity[];\n orgUnitLocations?: OrgUnitLocation[];\n showChannelInfo?: boolean;\n customer?: Customer;\n originator?: OrderOriginator;\n}\n\nexport interface ISalesOrder {\n salesOrderProps: INodeProps;\n orderInfomation: IOrderInformation;\n groups?: IGroups;\n orderDetailsLink: React.ReactNode;\n}\n\nexport const getSalesOrder = (input: ISalesOrderProps): ISalesOrder => {\n const {\n id,\n typeName,\n context,\n telemetry,\n products,\n salesOrder,\n showChannelInfo,\n channelIdentities,\n orgUnitLocations,\n customer,\n originator,\n resources: { freePriceText, detailsAriaLabel, detailsLabel, orderItemLabel, orderItemsLabel },\n context: { actionContext }\n } = input;\n\n const moduleName = 'ms-order-history';\n\n const priceContext = {\n id,\n typeName,\n context,\n telemetry,\n freePriceText\n };\n\n const _getorderDetailsPageUrl = (): string => {\n const url = getUrlSync('orderDetails', actionContext) || '';\n const separator = url.includes('?') ? '&' : '?';\n if (salesOrder.SalesId) {\n // Redirect with sales order sales id\n return `${url}${separator}salesId=${salesOrder.SalesId}`;\n } else {\n // Redirect with sales order transaction id\n return `${url}${separator}transactionId=${salesOrder.TransactionId}`;\n }\n };\n\n const salesOrderProps = { className: 'ms-order-history__sales-order', key: salesOrder.SalesId || salesOrder.TransactionId };\n\n const orderInfomationInput = getOrderInfomationInput(\n input,\n moduleName,\n salesOrder,\n priceContext,\n channelIdentities,\n customer,\n originator,\n orgUnitLocations,\n showChannelInfo\n );\n const orderInfomation = getOrderInformation(orderInfomationInput);\n\n const salesLinesInput = products && getSalesLinesInput(input, moduleName, salesOrder, products, priceContext);\n const salesLines = salesLinesInput && getSalesLines({ ...salesLinesInput, imageOnly: true });\n\n const groups =\n salesLines &&\n getGroups({\n moduleName,\n salesLines,\n resources: { orderItemLabel, orderItemsLabel }\n });\n\n const orderDetailsLink = (\n \n {detailsLabel}\n \n );\n\n return {\n salesOrderProps,\n orderInfomation,\n groups,\n orderDetailsLink\n };\n};\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICommerceApiSettings,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { OrderOriginator, SalesOrdersDataActions, OrderOriginatorSearchCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Action input.\r\n */\r\nexport class GetOrderOriginatorsInput implements IActionInput {\r\n public searchCriteria: OrderOriginatorSearchCriteria = {};\r\n\r\n private readonly apiSettings: ICommerceApiSettings;\r\n\r\n public constructor(transactionIds: string[] | undefined, salesIds: string[] | undefined, apiSettings: ICommerceApiSettings) {\r\n this.searchCriteria = {\r\n TransactionIds: transactionIds,\r\n SalesIds: salesIds\r\n };\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n /**\r\n * GetCacheKey.\r\n * @returns - String.\r\n */\r\n public getCacheKey = (): string =>\r\n buildCacheKey(`OrderOriginators-${this.searchCriteria.TransactionIds}-${this.searchCriteria.SalesIds}`, this.apiSettings);\r\n\r\n /**\r\n * GetCacheObjectType.\r\n * @returns - String.\r\n */\r\n public getCacheObjectType = (): string => 'OrderOriginators';\r\n\r\n /**\r\n * DataCacheType.\r\n * @returns - String.\r\n */\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\n/**\r\n * Get order originators by transaction ids or sales ids action.\r\n * @param input - GetOrderOriginators input.\r\n * @param context - Channel context.\r\n * @returns - Originators array.\r\n */\r\nexport async function getOriginatorsAction(input: GetOrderOriginatorsInput, context: IActionContext): Promise {\r\n return SalesOrdersDataActions.getOrderOriginatorsAsync({ callerContext: context }, input.searchCriteria);\r\n}\r\n\r\n/**\r\n * Creates the input required to make the retail api call.\r\n * @param inputData -- InputData as ICreateActionContext.\r\n * @returns Action Input.\r\n */\r\nexport const createSalesOrderOriginatorsInput = (inputData: ICreateActionContext) => {\r\n const { salesId, transactionId } = inputData.requestContext.query ?? {};\r\n\r\n if (salesId) {\r\n return new GetOrderOriginatorsInput(undefined, [salesId], inputData.requestContext.apiSettings);\r\n } else if (transactionId) {\r\n return new GetOrderOriginatorsInput([transactionId], undefined, inputData.requestContext.apiSettings);\r\n }\r\n\r\n throw new Error('createSalesOrderOriginatorsInput - No salesId or transactionId provided.');\r\n};\r\n\r\n/**\r\n * GetSalesOrderOriginatorsActionDataAction.\r\n * @returns -- IObservableAction.\r\n */\r\nexport const getSalesOrderOriginatorsActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/order-management/get-sales-order-originators',\r\n action: getOriginatorsAction as IAction,\r\n input: createSalesOrderOriginatorsInput\r\n});\r\n\r\nexport default getSalesOrderOriginatorsActionDataAction;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport classname from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { Button, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { getUrlSync } from '@msdyn365-commerce/core';\n\nimport LabelComponent from './common/label';\nimport {\n getSalesOrderHistoryWithHydrationsAction,\n GetSalesOrderHistoryWithHydrationsInput,\n IOrderHistory,\n IPaging\n} from './actions/get-order-shipment-history';\nimport { getSalesOrder, ISalesOrder } from './components/get-sales-order';\nimport { IMandsOrderHistoryData } from './mands-order-history.data';\nimport { IMandsOrderHistoryProps } from './mands-order-history.props.autogenerated';\nimport { getOriginatorsAction, GetOrderOriginatorsInput } from './actions/get-sales-order-originators';\nimport { OrderOriginator, OrderShipments } from '@msdyn365-commerce/retail-proxy';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\n\nexport * from './common/get-groups';\nexport * from './common/get-order-information';\nexport * from './common/get-sales-line';\nexport * from './common/get-sales-lines';\nexport * from './common/utilities';\nexport * from './components/get-sales-order';\n\nexport * from './common/get-order-information';\nexport * from './components/get-sales-order';\n\nexport interface IHeader {\n headerProps: INodeProps;\n heading: React.ReactNode;\n orderCountLabel?: React.ReactNode;\n}\n\nexport interface IList {\n listProps: INodeProps;\n salesOrders: ISalesOrder[];\n}\n\nexport interface IOrderHistoryViewState {\n isDataReady: boolean;\n hasError: boolean;\n isLoading: boolean;\n isShowMoreButton: boolean;\n errorCode?: string;\n errorMessage?: string;\n}\n\nexport interface IOrderHistoryViewProps extends IMandsOrderHistoryProps {\n orderHistory: IOrderHistory;\n orderHistoryProps: IModuleProps;\n alert?: React.ReactNode;\n loading?: React.ReactNode;\n emptyMessage?: React.ReactNode;\n header: IHeader;\n backToShoppingLink?: React.ReactNode;\n list?: IList;\n moreButton?: React.ReactNode;\n viewState: IOrderHistoryViewState;\n}\n\n/**\n *\n * OrderHistory component\n * @extends {React.Component>}\n */\n@observer\nclass OrderHistory extends React.Component> {\n @observable private orderHistory: IOrderHistory;\n @observable private viewState: IOrderHistoryViewState;\n private pageSize: number;\n private paging: IPaging;\n private originatorList!: OrderOriginator[];\n\n constructor(props: IMandsOrderHistoryProps) {\n super(props);\n this.orderHistory = {\n salesOrders: [],\n products: []\n };\n this.viewState = {\n isDataReady: false,\n hasError: false,\n isShowMoreButton: (this.props.config.pageSize || 0) > 0,\n isLoading: false\n };\n this.pageSize = this.props.config.pageSize || 10;\n this.paging = {\n top: this.pageSize,\n skip: 0\n };\n }\n\n public componentDidMount(): void {\n this.getOrderHistory()\n .then(() => {\n this.viewState.isDataReady = true;\n })\n .catch(ex => {\n this.viewState.hasError = true;\n });\n }\n\n public render(): JSX.Element {\n const {\n config: { heading, className, showChannelInfo, shouldShowCount },\n resources: {\n genericErrorMessage,\n noOrderHistoryLable,\n moreButtonText,\n backToShopping,\n orderCountLabel,\n ordersCountLabel,\n loadingLabel\n }\n } = this.props;\n const { salesOrders, products } = this.orderHistory;\n const { isDataReady, hasError, isShowMoreButton, isLoading } = this.viewState;\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const channelIdentities = this.props.data.channels.result && this.props.data.channels.result.channelIdentities;\n const orgUnitLocations = this.props.data.orgUnitLocations.result && this.props.data.orgUnitLocations.result.orgUnitLocations;\n const customer = this.props.data.customerInformation && this.props.data.customerInformation.result;\n\n let viewProps: IOrderHistoryViewProps = {\n ...this.props,\n orderHistory: this.orderHistory,\n viewState: this.viewState,\n orderHistoryProps: {\n moduleProps: this.props,\n className: classname('ms-order-history', className)\n },\n header: {\n headerProps: { className: 'ms-order-history__header' },\n heading: heading && \n },\n backToShoppingLink: backToShoppingUrl && (\n \n )\n };\n\n if (hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!isDataReady) {\n viewProps = {\n ...viewProps,\n loading: \n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!salesOrders || salesOrders.length === 0) {\n if (this.viewState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed') {\n viewProps = {\n ...viewProps,\n emptyMessage:

{this.viewState.errorMessage}

\n };\n } else {\n viewProps = {\n ...viewProps,\n emptyMessage:

{noOrderHistoryLable}

\n };\n }\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n const _orderCountLabel = salesOrders.length === 1 ? orderCountLabel : ordersCountLabel;\n\n viewProps = {\n ...viewProps,\n header: {\n ...viewProps.header,\n orderCountLabel: shouldShowCount ? (\n {`(${salesOrders.length} ${_orderCountLabel})`}\n ) : (\n undefined\n )\n },\n list: {\n listProps: { className: 'ms-order-history__sales-order-list' },\n salesOrders: salesOrders.map(salesOrder =>\n getSalesOrder({\n ...this.props,\n products,\n salesOrder,\n channelIdentities,\n orgUnitLocations,\n showChannelInfo,\n customer,\n originator:\n this.originatorList &&\n this.originatorList.find(\n o =>\n (salesOrder.SalesId && o.SalesId === salesOrder.SalesId) ||\n (salesOrder.TransactionId && o.TransactionId === salesOrder.TransactionId)\n )\n })\n )\n },\n moreButton: isShowMoreButton && (\n \n {moreButtonText}\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private onMoreButtonClick = () => {\n // tslint:disable-next-line:no-floating-promises\n this.getOrderHistory();\n };\n\n private getOrderHistory = async (): Promise => {\n const actionContext = this.props.context.actionContext;\n const input = new GetSalesOrderHistoryWithHydrationsInput(this.paging, this.props.context.request.apiSettings);\n\n try {\n this.viewState.isLoading = true;\n const response = await getSalesOrderHistoryWithHydrationsAction(input, actionContext);\n if (response) {\n const { products, salesOrders } = response;\n this.orderHistory.products.push(...products);\n this.orderHistory.salesOrders.push(...salesOrders);\n this.viewState.isShowMoreButton =\n this.viewState.isShowMoreButton && response.salesOrders.length > 0 && response.salesOrders.length === this.pageSize;\n this.paging.skip += this.pageSize;\n await this.getOriginator(salesOrders);\n }\n this.viewState.isLoading = false;\n return Promise.resolve();\n } catch (error) {\n this.viewState.isLoading = false;\n if (error?.error?.name === 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed') {\n this.viewState.errorCode = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\n this.viewState.errorMessage = error.error?.name;\n return Promise.reject();\n }\n\n return Promise.reject();\n }\n };\n\n private readonly getOriginator = async (salesOrders: OrderShipments[]): Promise => {\n if (Msdyn365.isUserTypeB2B(this.props.context.request)) {\n const actionContext = this.props.context.actionContext;\n let result: OrderOriginator[] | undefined;\n try {\n const salesIds = salesOrders.map(order => order.SalesId ?? '').filter(id => id !== '');\n const transactionIds = salesOrders.map(order => order.TransactionId ?? '').filter(id => id !== '');\n const originatorsInput = new GetOrderOriginatorsInput(transactionIds, salesIds, this.props.context.request.apiSettings);\n result = await getOriginatorsAction(originatorsInput, actionContext);\n } catch (error) {\n result = undefined;\n }\n if (result) {\n this.originatorList.push(...result);\n }\n }\n };\n}\n\nexport default OrderHistory;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport {\n IGroup,\n IGroups,\n IHeader,\n IList,\n IOrderHistoryViewProps,\n IOrderInformation,\n ISalesOrder\n} from '@msdyn365-commerce-modules/order-management';\nimport { IMandsOrderHistoryProps } from './mands-order-history.props.autogenerated';\nimport { OrderShipments } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nexport interface IOrderHistoryState {\n productInformation: (\n | {\n pId: string | undefined;\n pName: string | undefined;\n pQuantity: number | undefined;\n }[][]\n | undefined\n )[];\n count: number;\n}\nexport interface IProductId {\n pId: string;\n pName: string;\n pQuantity: number;\n}\nexport interface IOrderIndex {\n _index: number;\n}\nexport interface IOrderStatus {\n SalesStatus: string | undefined;\n}\n\nexport interface IOrderInfo {\n createdDateTime: string | undefined;\n orderID: string | undefined;\n orderTotal: string | 0 | undefined;\n}\n/**\n *\n * Order History Component\n * @extends {React.PureComponent}\n */\n\nexport class OrderHistoryView extends React.PureComponent, IOrderHistoryState> {\n constructor(props: IOrderHistoryViewProps & IMandsOrderHistoryProps<{}>) {\n super(props);\n this.state = {\n productInformation: [],\n count: 0\n };\n }\n public render(): JSX.Element {\n const { orderHistoryProps, header, alert, loading, emptyMessage, backToShoppingLink, list } = this.props;\n return (\n \n {header && }\n {this.renderHeadingRow()}\n {loading}\n {alert && (\n <>\n {alert}\n {backToShoppingLink}\n \n )}\n {emptyMessage && (\n <>\n {emptyMessage}\n {backToShoppingLink}\n \n )}\n {list && }\n \n );\n }\n public getOrderProducts = (salesOrders: ISalesOrder[]) => {\n return salesOrders.map(\n (salesOrder, index) =>\n salesOrder.groups &&\n salesOrder.groups.groups.map((group, j) =>\n group.salesLines.map((salesLine, k) => {\n return {\n pId: salesLine.data.product?.ItemId ? salesLine.data.product.ItemId.toString() : '',\n pName: salesLine.data.product?.Name ? salesLine.data.product.Name.toString() : '',\n pQuantity: 0\n };\n })\n )\n );\n };\n public OrderHistoryList: React.FC = ({ listProps, salesOrders }) => {\n const prodInformation = this.getOrderProducts(salesOrders);\n prodInformation.map((prod, k) => {\n const products: IProductId[] = [];\n prod &&\n prod[0].map(item => {\n const index = products.findIndex(y => y.pId === item.pId);\n if (index !== -1) {\n products[index].pQuantity = products[index].pQuantity ? (products[index].pQuantity += 1) : 0;\n } else {\n item.pQuantity = 1;\n products.push(item);\n }\n });\n if (prod && prod[0]) {\n prod[0] = products;\n }\n });\n this.setState(state => {\n if (state.count >= 3) {\n return null;\n }\n return { productInformation: prodInformation, count: state.count + 1 };\n });\n return (\n \n {salesOrders &&\n salesOrders.map((salesOrder, index) => )}\n \n );\n };\n private renderHeadingRow = () => {\n const {\n config: { orderSummaryLabel, orderDescriptionLabel, orderStatusLabel, orderActionLabel }\n } = this.props;\n return (\n
\n
\n \n {orderSummaryLabel}\n \n
\n
\n \n {orderDescriptionLabel}\n \n
\n
\n \n {orderStatusLabel}\n \n
\n
\n \n {orderActionLabel}\n \n
\n
\n );\n };\n private getOrderInformation = (index: number) => {\n const salesOrder = this.props.orderHistory && this.props.orderHistory.salesOrders[index];\n let dateTime = salesOrder && salesOrder.CreatedDateTime && salesOrder.CreatedDateTime.toString();\n dateTime = dateTime && dateTime.substring(4, 21); // Mar 13 2020 20:30:18\n const salesID = salesOrder && salesOrder.ChannelReferenceId && salesOrder.ChannelReferenceId.toString();\n const totalAmount = salesOrder && salesOrder.TotalAmount && salesOrder.TotalAmount.toString();\n const orderInfo: IOrderInfo = {\n createdDateTime: dateTime,\n orderID: salesID,\n orderTotal: totalAmount\n };\n orderInfo;\n return orderInfo;\n };\n private OrderHistoryOrderInfomation: React.FC = props => {\n const { orderInformationProps, _index, SalesStatus } = props;\n const {\n config: { confirmationIDLabel, orderTotalLabel },\n context: { cultureFormatter }\n } = this.props;\n const productInfo = this.state.productInformation;\n const currOrderProductsInfo = productInfo && productInfo[_index];\n const currentOrderProducts = currOrderProductsInfo && currOrderProductsInfo[0];\n const salesStatus =\n SalesStatus &&\n SalesStatus.split('')\n .map((word, index) => {\n return index === 0 ? word.toUpperCase() : word;\n })\n .join('');\n const currentOrderInfo: IOrderInfo = this.getOrderInformation(_index);\n return (\n <>\n
\n \n \n {currentOrderInfo.createdDateTime}\n \n
\n \n \n {confirmationIDLabel}\n \n {currentOrderInfo.orderID}\n \n \n \n
\n \n \n {orderTotalLabel} {cultureFormatter.formatCurrency(Number(currentOrderInfo.orderTotal).toFixed(2))}\n \n \n
\n
\n
\n
\n \n {currentOrderProducts &&\n currentOrderProducts.map(product => (\n <>\n \n {product.pName} {product.pQuantity && product.pQuantity > 1 ? `(${product.pQuantity} items) ` : ''}\n \n
\n \n ))}\n
\n
\n
\n {salesStatus}\n
\n \n );\n };\n private OrderHistoryGroup: React.FC = () => {\n return null;\n };\n private OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => {\n return (\n \n {groups.map((group, index) => (\n \n ))}\n \n );\n };\n private OrderHistoryHeader: React.FC = ({ headerProps, orderCountLabel }) => {\n const {\n config: { orderHeadingLabel }\n } = this.props;\n return (\n \n

{orderHeadingLabel}

\n {orderCountLabel}\n
\n );\n };\n private OrderHistorySalesOder: React.FC = props => {\n const { salesOrderProps, orderInfomation, groups, orderDetailsLink, _index } = props;\n const orderStatus = groups && groups.groups && groups.groups[0].data && groups.groups[0].data.salesStatus.toString();\n const {\n orderHistory: { salesOrders }\n } = this.props;\n let salesStatusCode: string | undefined = '';\n const salesID: string = salesOrderProps.key;\n let currentSalesOrder: OrderShipments | undefined;\n const currentSalesOrderIndex = salesOrders.findIndex(salesOrder => salesOrder.SalesId === salesID);\n\n if (currentSalesOrderIndex !== -1) {\n currentSalesOrder = salesOrders[currentSalesOrderIndex];\n currentSalesOrder.SalesLines?.some(salesLine => {\n const QuantityInvoiced = salesLine.QuantityInvoiced || 0;\n const QuantityOrdered = salesLine.QuantityOrdered || 0;\n if (QuantityInvoiced > 0 && QuantityInvoiced < QuantityOrdered) {\n salesStatusCode = 'Partial Shipped';\n return true;\n }\n return false;\n });\n\n !salesStatusCode &&\n currentSalesOrder.SalesLines?.some(salesLine => {\n if (salesLine.SalesStatusValue === 4) {\n salesStatusCode = 'Shipped';\n return true;\n }\n return false;\n });\n }\n salesStatusCode = salesStatusCode ? salesStatusCode : orderStatus;\n console.log('order status <<>>', salesID, salesStatusCode);\n\n return (\n \n
\n {orderInfomation && (\n \n )}\n {groups && }\n
{orderDetailsLink}
\n
\n
\n );\n };\n}\nexport default OrderHistoryView;\n","export const checkImage = (path: string) =>\r\n new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.onload = () => resolve({ path, status: 'ok' });\r\n img.onerror = () => reject({ path, status: 'error' });\r\n img.src = path;\r\n });\r\n","import * as React from 'react';\r\nimport { IVendorLogoProps } from './vendor-logo.props';\r\n\r\n/**\r\n *\r\n * VendorLogo Component is used to add vendor logo on products\r\n * @extends {React.PureComponent}\r\n */\r\nexport class VendorLogo extends React.PureComponent {\r\n constructor(props: IVendorLogoProps) {\r\n super(props);\r\n }\r\n public render(): JSX.Element {\r\n const { logoUrl } = this.props;\r\n return (\r\n
\r\n vendor logo\r\n
\r\n );\r\n }\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n// import { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { Node, Button, Collapse, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICartViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartlinesViewProps, ICartResources } from '@msdyn365-commerce-modules/cart/dist/types/index';\r\nimport { ICartProps } from '../definition-extensions/cart.ext.props.autogenerated';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\r\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface ICartViewState {\r\n isCartEmpty: boolean;\r\n isOpen: boolean;\r\n isOpenDelivery: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Cart component\r\n * @extends {React.PureComponent>}\r\n */\r\nexport class CartView extends React.PureComponent, ICartViewState> {\r\n constructor(props: ICartViewProps & ICartProps<{}>, state: ICartViewState) {\r\n super(props);\r\n this.state = {\r\n isCartEmpty: true,\r\n isOpen: false,\r\n isOpenDelivery: false\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n config,\r\n data,\r\n cartlines,\r\n context,\r\n title,\r\n resources,\r\n storeSelector,\r\n backToShoppingButton,\r\n waitingComponent,\r\n cartLoadingStatus,\r\n cartDataResult,\r\n orderSummaryHeading\r\n } = this.props;\r\n const {\r\n standardDeliveryPrice,\r\n expressDeliveryPrice,\r\n showfreeShippingPrompt,\r\n homeDeliveryText = '',\r\n standardDeliveryText = '',\r\n expressDeliveryText = '',\r\n preFreeShippingDiscountText,\r\n postFreeShippingDiscountText,\r\n qualifyForFreeDeliveryAmount\r\n } = config;\r\n data.products && data.products.result && cartlines && cartlines.length === 0\r\n ? this.setState({ isCartEmpty: true })\r\n : this.setState({ isCartEmpty: false });\r\n const cartAmount =\r\n data.cart && data.cart.result && data.cart.result.cart && data.cart.result.cart.AmountDue ? data.cart.result.cart.AmountDue : 0;\r\n /* START VSI Customization - {Add configurable qualify for free delivery amount} */\r\n const freeDeliveryAmount = qualifyForFreeDeliveryAmount && qualifyForFreeDeliveryAmount > 0 ? qualifyForFreeDeliveryAmount : 50;\r\n /* END VSI Customization - {Add configurable qualify for free delivery amount} */\r\n const cartAmountDue =\r\n freeDeliveryAmount - cartAmount > 0 ? context.cultureFormatter.formatCurrency(freeDeliveryAmount - cartAmount) : '';\r\n return (\r\n
\r\n {\r\n
\r\n
\r\n
\r\n
\r\n

\r\n {'Total'}\r\n {'(excluding delivery)'}\r\n \r\n

\r\n
\r\n
\r\n
{this.checkoutAsSignedInUserBtn()}
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{title}
\r\n
\r\n
\r\n
\r\n
{title}
\r\n
\r\n
\r\n

Qty

\r\n
\r\n
\r\n

Subtotal

\r\n
\r\n
\r\n
\r\n \r\n {this._renderCartlines(\r\n cartlines,\r\n resources.emptyCartText,\r\n this.props.CartlinesWrapper,\r\n storeSelector,\r\n backToShoppingButton,\r\n waitingComponent,\r\n cartLoadingStatus,\r\n cartDataResult,\r\n resources,\r\n context\r\n )}\r\n \r\n
\r\n
\r\n {storeSelector}\r\n
\r\n
\r\n \r\n
\r\n
    \r\n
  • \r\n \r\n {standardDeliveryPrice}\r\n
  • \r\n
  • \r\n \r\n {expressDeliveryPrice}\r\n
  • \r\n {showfreeShippingPrompt && cartAmountDue && (\r\n
  • \r\n \r\n
  • \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {orderSummaryHeading && (\r\n
\r\n
\r\n
\r\n \r\n

Summary

\r\n
\r\n

\r\n {'Total'}\r\n {'(excluding delivery)'}\r\n \r\n

\r\n
\r\n\r\n
\r\n {this.checkoutAsSignedInUserBtn()}\r\n {this.checkoutAsGuestBtn()}\r\n
\r\n
\r\n
\r\n \r\n Add a promotion code\r\n \r\n \r\n {this.props.promoCode}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Continue Shopping\r\n \r\n
\r\n
\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n public getSitePath = (sitePath: string | undefined) => {\r\n return sitePath !== null ? sitePath : '';\r\n };\r\n\r\n public _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean,\r\n resources: ICartResources,\r\n context: ICoreContext\r\n ): JSX.Element[] | JSX.Element => {\r\n const sitePath = this.getSitePath(context.request.sitePath);\r\n const homeUrl = `${context.request.url.requestUrl.origin}${sitePath}/`;\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map((cartLine, index) => {\r\n // @ts-ignore\r\n const cartProduct = this.props.data.cart.result && this.props.data.cart.result._cart.CartLines[index];\r\n const removeClickHandler = () => {\r\n return this._removeItemFromCartHandler(cartProduct);\r\n };\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {storeSelector\r\n ? cartLine.pickUpInStore && (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n )\r\n : null}\r\n
\r\n {!this.state.isCartEmpty && cartLine.cartline ? (\r\n \r\n ) : null}\r\n {cartLine.addToWishlist}\r\n
\r\n
\r\n );\r\n });\r\n } else {\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

\r\n \r\n
\r\n ) : (\r\n <>{waitingComponent}\r\n );\r\n }\r\n };\r\n\r\n public isCartLine(cartlines: ICartlinesViewProps[] | undefined) {\r\n let cartLine: boolean = false;\r\n cartLine = cartlines && cartlines.length ? true : false;\r\n return cartLine;\r\n }\r\n\r\n private goBack = () => {\r\n window.history.back();\r\n };\r\n\r\n private _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n const { data, telemetry } = this.props;\r\n if (data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n data.cart.result.removeCartLines(input).catch(error => {\r\n telemetry.warning(error);\r\n telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n private handleClickDelivery = () => {\r\n this.setState({ isOpenDelivery: !this.state.isOpenDelivery });\r\n };\r\n private handleClick = () => {\r\n this.setState({ isOpen: !this.state.isOpen });\r\n };\r\n private getCheckoutURL = (isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string => {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isAbsoluteUrl = absoluteUrlRegExp.test(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n /* START VSI Customization - {Change js window to MsDyn365.isBrowser} */\r\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\r\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\r\n }\r\n /* END VSI Customization - {Change js window to MsDyn365.isBrowser} */\r\n return `${signInUrl}${signInUrl.indexOf('?') === -1 ? '?' : '&'}ru=${returnURL}`;\r\n };\r\n private checkoutAsSignedInUserBtn = () => {\r\n const {\r\n context: {\r\n actionContext,\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n }\r\n }\r\n } = this.props;\r\n const guestCheckoutUrl = getUrlSync('checkout', actionContext) || '';\r\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\r\n return !this.state.isCartEmpty ? (\r\n \r\n ) : null;\r\n };\r\n private checkoutAsGuestBtn = () => {\r\n const {\r\n context: {\r\n actionContext,\r\n request: {\r\n user: { isAuthenticated }\r\n }\r\n }\r\n } = this.props;\r\n const guestCheckoutUrl = getUrlSync('checkout', actionContext) || '';\r\n return !this.state.isCartEmpty && !isAuthenticated ? (\r\n \r\n ) : null;\r\n };\r\n}\r\nexport default CartView;\r\n","import { format } from '@msdyn365-commerce-modules/utilities';\r\nimport { IComponent, ICoreContext, IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n AttributeValue,\r\n ProductPrice,\r\n ProductSearchResult,\r\n ProductDimensionValue,\r\n ProductDimension\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { VendorLogo } from '../../utilities/vendor-logo/vendor-logo';\r\nimport { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getDimensionValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { checkImage } from '../../utilities/helper-functions';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\r\n className?: string;\r\n imageSettings?: IImageSettings;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n ratingAriaLabel?: string;\r\n}\r\nexport interface IProductComponent extends IComponent {}\r\n\r\ninterface IState {\r\n swatches: ProductDimensionValue[];\r\n isVendorLogoAvailable: boolean;\r\n vendorLogo: string;\r\n}\r\n\r\ninterface IColorSwatch {\r\n colorId: string;\r\n colorName: string;\r\n}\r\n/**\r\n *\r\n * ProductCard component\r\n * @extends {React.PureComponent<>}\r\n */\r\nexport class ProductCard extends React.PureComponent {\r\n constructor(props: IProductComponentProps) {\r\n super(props);\r\n this.state = {\r\n swatches: [],\r\n isVendorLogoAvailable: false,\r\n vendorLogo: ''\r\n };\r\n }\r\n\r\n public componentDidUpdate = async (prevProps: IProductComponentProps) => {\r\n if (this.props.data !== prevProps.data) {\r\n await this.getDataOnUpdate();\r\n }\r\n };\r\n\r\n public componentDidMount = async () => {\r\n await this.getDataOnUpdate();\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n const { data, context, imageSettings, ratingAriaLabel } = this.props;\r\n\r\n const product = data.product;\r\n if (!product) {\r\n return null;\r\n }\r\n const discountedPriceRangeAttribute = this._getAttributeValue('DiscountPriceRange', product);\r\n const discountedPriceRangesValue =\r\n discountedPriceRangeAttribute && discountedPriceRangeAttribute.TextValue ? discountedPriceRangeAttribute.TextValue : '';\r\n const discount = discountedPriceRangesValue ? true : false;\r\n const discountedPriceRanges = discountedPriceRangesValue.split('-');\r\n const discountedHigherPrice =\r\n discountedPriceRanges.length === 2 ? context.cultureFormatter.formatCurrency(+discountedPriceRanges[1]) : undefined;\r\n\r\n const productUrl = getProductPageUrlSync(product.Name || '', product.RecordId, context && context.actionContext, undefined);\r\n return (\r\n \r\n
\r\n {this.renderProductPlacementImage(imageSettings, context.request.gridSettings, product.PrimaryImageUrl, product.Name)}\r\n {this.state.isVendorLogoAvailable && this.state.vendorLogo && }\r\n
\r\n
\r\n

{product.Name}

\r\n\r\n {this.renderDescription(product.Description)}\r\n {this.renderPriceRange()}\r\n {this.renderSwatches(context.request.apiSettings.baseImageUrl)}\r\n {discount && discountedHigherPrice &&
Sale on selected items
}\r\n {discount && !discountedHigherPrice &&
Sale
}\r\n
\r\n \r\n );\r\n }\r\n\r\n private renderLabel = (name?: string, price?: string, rating?: number, ratingAriaLabel?: string): string => {\r\n let ratingLabel = '';\r\n name = name || '';\r\n price = price || '';\r\n if (rating) {\r\n const roundedRating = rating.toFixed(2);\r\n ratingLabel = format(ratingAriaLabel || '', roundedRating, '5');\r\n }\r\n return `${name} ${price} ${ratingLabel}`;\r\n };\r\n\r\n private renderDescription = (description?: string): JSX.Element | null => {\r\n return

{description}

;\r\n };\r\n\r\n private renderProductPlacementImage = (\r\n imageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n altText?: string\r\n ): JSX.Element | null => {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n const img = {\r\n src: imageUrl,\r\n altText: altText ? altText : ''\r\n };\r\n const imageProps = {\r\n gridSettings: gridSettings,\r\n imageSettings: imageSettings\r\n };\r\n return ;\r\n };\r\n\r\n private getDataOnUpdate = async () => {\r\n const {\r\n data: { product },\r\n context\r\n } = this.props;\r\n const itemId = product ? product.ItemId : undefined;\r\n const apiSettings = context && context.request ? context.request.apiSettings : undefined;\r\n const updatedItemId = itemId?.replace('/', ':');\r\n const vendorImageUrl =\r\n apiSettings && apiSettings.baseImageUrl\r\n ? `${apiSettings.baseImageUrl.substring(0, apiSettings.baseImageUrl.length - 1)}${updatedItemId}__logo.png`\r\n : '';\r\n if (product) {\r\n const recordId = product.RecordId;\r\n const channelId = context.actionContext.requestContext.apiSettings.channelId;\r\n const callerContext = context.actionContext;\r\n const matchingDimensionValues: ProductDimension[] = [];\r\n\r\n checkImage(vendorImageUrl)\r\n .then(() => this.setState({ isVendorLogoAvailable: true, vendorLogo: vendorImageUrl }))\r\n .catch(() => this.setState({ isVendorLogoAvailable: false, vendorLogo: vendorImageUrl }));\r\n // DimensionTypeValue = 1, for Color\r\n const dimensionTypeValue: number = 1;\r\n const swatches = await getDimensionValuesAsync(\r\n { callerContext, queryResultSettings: {} },\r\n recordId,\r\n channelId,\r\n dimensionTypeValue,\r\n matchingDimensionValues,\r\n // @ts-ignore: KitVariantResolution context should be nullable\r\n null\r\n );\r\n this.setState({ swatches });\r\n }\r\n };\r\n private renderSwatches = (baseImageUrl: string) => {\r\n const { swatches } = this.state;\r\n const arr: IColorSwatch[] = [];\r\n if (swatches.length > 0) {\r\n swatches.map((dimensionValue: ProductDimensionValue) => {\r\n if (dimensionValue) {\r\n arr.push({ colorName: dimensionValue.Value!, colorId: dimensionValue.DimensionId! });\r\n }\r\n });\r\n }\r\n return (\r\n
\r\n {arr.length > 0 && (\r\n
\r\n
    \r\n {arr.map((swatch, index) => {\r\n const backgroundImageUrl = `url(${baseImageUrl}Products/${swatch.colorId}.png)`;\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n {arr.length === 1 ? arr[0].colorName : `${arr.length} colours available`}\r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n private renderPrice = (\r\n context: ICoreContext,\r\n typeName: string,\r\n id: string,\r\n basePrice?: number,\r\n adjustedPrice?: number,\r\n savingsText?: string,\r\n freePriceText?: string,\r\n originalPriceText?: string,\r\n currentPriceText?: string\r\n ): JSX.Element | null => {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n CustomerContextualPrice: adjustedPrice\r\n };\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n private renderPriceRange = (): JSX.Element | null => {\r\n const {\r\n data: { product },\r\n context: { cultureFormatter },\r\n id,\r\n typeName,\r\n context,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n } = this.props;\r\n\r\n const priceRangeAttribute = this._getAttributeValue('PriceRange', product);\r\n const discountedPriceRangeAttribute = this._getAttributeValue('DiscountPriceRange', product);\r\n const priceRanges = priceRangeAttribute && priceRangeAttribute.TextValue ? priceRangeAttribute.TextValue.split('-') : [];\r\n const discountedPriceRangesValue =\r\n discountedPriceRangeAttribute && discountedPriceRangeAttribute.TextValue ? discountedPriceRangeAttribute.TextValue : '';\r\n const discountedPriceRanges = discountedPriceRangesValue ? discountedPriceRangesValue.split('-') : [];\r\n const lowerPrice = priceRanges.length > 0 ? cultureFormatter.formatCurrency(+priceRanges[0]) : undefined;\r\n const higherPrice = priceRanges.length === 2 ? cultureFormatter.formatCurrency(+priceRanges[1]) : undefined;\r\n\r\n const discountedLowerPrice =\r\n discountedPriceRanges.length > 0 ? cultureFormatter.formatCurrency(+discountedPriceRanges[0]) : undefined;\r\n const discountedHigherPrice =\r\n discountedPriceRanges.length === 2 ? cultureFormatter.formatCurrency(+discountedPriceRanges[1]) : undefined;\r\n if (!product) {\r\n return null;\r\n }\r\n const discount = discountedPriceRangesValue ? true : false;\r\n return (\r\n
\r\n {discount ? (\r\n
\r\n {discountedLowerPrice && {discountedLowerPrice}}\r\n {discountedHigherPrice && - {discountedHigherPrice}}\r\n
\r\n ) : (\r\n
\r\n {priceRanges.length !== 2 ? (\r\n this.renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n product.BasePrice,\r\n product.Price,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n )\r\n ) : (\r\n <>\r\n {lowerPrice}\r\n {higherPrice && - {higherPrice}}\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n private _getAttributeValue(attributeName: string, product: ProductSearchResult | undefined): AttributeValue | undefined {\r\n if (attributeName.length > 0 && product) {\r\n return product && product.AttributeValues && product.AttributeValues.find(x => x.Name === attributeName);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default ProductCard;\r\n","import * as React from 'react';\r\n\r\nimport { Button, format } from '@msdyn365-commerce-modules/utilities';\r\nimport { IComponent, IComponentProps } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\n\r\nexport interface IPromoCodeProps extends IComponentProps<{}> {\r\n cart: ICartState | undefined;\r\n promoCodeHeadingText: string;\r\n appliedPromoCodeHeadingText: string;\r\n removePromoAriaLabelFormat: string;\r\n promoPlaceholderText: string;\r\n promoCodeApplyButtonText: string;\r\n collapseTimeOut: number;\r\n removePromoText: string;\r\n invalidPromoCodeErrorText: string;\r\n failedToAddPromoCodeErrorText: string;\r\n duplicatePromoCodeErrorText: string;\r\n failedToRemovePromoCodeErrorText: string;\r\n promoCodeApplyCallback?(): void;\r\n}\r\n\r\nexport interface IPromoCodeComponent extends IComponent {}\r\n\r\ninterface IPromoCodeState {\r\n isCollapseOpen: boolean;\r\n promoCodeInputValue: string;\r\n error: string;\r\n canApply: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * The PromoCode component renders the promocode section.\r\n * @extends {React.PureComponent}\r\n */\r\nclass PromoCode extends React.Component {\r\n constructor(props: IPromoCodeProps, state: IPromoCodeState) {\r\n super(props);\r\n this.state = {\r\n isCollapseOpen: false,\r\n promoCodeInputValue: '',\r\n error: '',\r\n canApply: false\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n
\r\n

\r\n {this.state.error}\r\n

\r\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\r\n {this._renderAppliedPromoCode(this.props)}\r\n
\r\n );\r\n }\r\n\r\n private _onInputChange = (e: React.ChangeEvent) => {\r\n const error = e.target.value === '' ? '' : this.state.error;\r\n this.setState({\r\n promoCodeInputValue: e.target.value,\r\n error: error,\r\n canApply: e.target.value ? true : false\r\n });\r\n };\r\n\r\n private _applyPromotion = (cartState: ICartState | undefined) => {\r\n if (!cartState || !cartState.cart) {\r\n return;\r\n }\r\n const appliedPromo = this.state.promoCodeInputValue;\r\n\r\n cartState\r\n .addPromoCode({ promoCode: appliedPromo })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n // show success text\r\n this.setState({ promoCodeInputValue: '', error: '', canApply: false });\r\n } else if (result.substatus === 'ALREADYADDED') {\r\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\r\n } else {\r\n this.setState({ error: this.props.invalidPromoCodeErrorText });\r\n }\r\n })\r\n .catch(error => {\r\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\r\n });\r\n };\r\n\r\n private _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\r\n return (\r\n // tslint:disable-next-line:react-this-binding-issue jsx-no-lambda\r\n {\r\n e.preventDefault();\r\n this._applyPromotion(cartState);\r\n }}\r\n className='msc-promo-code__form-container'\r\n >\r\n
\r\n \r\n {\r\n this._applyPromotion(cartState);\r\n }}\r\n disabled={!this.state.canApply}\r\n >\r\n {promoCodeApplyButtonText}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n private _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\r\n if (!cartState) {\r\n return;\r\n }\r\n const code = event.currentTarget.getAttribute('data-value') || '';\r\n cartState\r\n .removePromoCodes({\r\n promoCodes: [code]\r\n })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n this.setState({ error: '' });\r\n }\r\n })\r\n .catch(() => {\r\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\r\n });\r\n };\r\n private _calculateDiscount = (code: string, cartState: ICartState | undefined) => {\r\n if (!cartState || !cartState.cart || !cartState.cart.CartLines || cartState.cart.CartLines.length === 0 || !code) {\r\n return;\r\n }\r\n let discountAmount = 0;\r\n for (const line of cartState.cart.CartLines) {\r\n if (line.DiscountLines) {\r\n for (const discountLine of line.DiscountLines) {\r\n if (discountLine.DiscountCode === code) {\r\n discountAmount += discountLine.DiscountCost!;\r\n }\r\n }\r\n }\r\n }\r\n return discountAmount * -1;\r\n };\r\n\r\n private _renderAppliedPromoCode = (props: IPromoCodeProps) => {\r\n if (!props.cart || !props.cart.cart || !props.cart.cart.Coupons || !(props.cart.cart.Coupons.length > 0)) {\r\n return;\r\n }\r\n return (\r\n <>\r\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\r\n const ariaLabel = props.removePromoAriaLabelFormat\r\n ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code)\r\n : '';\r\n return (\r\n
\r\n
\r\n {coupon.Code} (\r\n \r\n )\r\n
\r\n {\r\n this._removePromotion(props.cart, event);\r\n }}\r\n data-value={coupon.Code}\r\n aria-label={ariaLabel}\r\n >\r\n {props.removePromoText}\r\n \r\n
\r\n );\r\n })}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default PromoCode;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport * as React from 'react';\r\nimport { ICheckoutData } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/checkout.data';\r\nimport { ICheckoutProps } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/checkout.props.autogenerated';\r\n\r\ntype deliveryType = 'pickup' | 'ship';\r\n\r\nexport interface IPickUpAtStore {\r\n PickUpAtStore: INodeProps;\r\n label: React.ReactNode;\r\n location: React.ReactNode;\r\n}\r\n\r\nexport interface ILineItem {\r\n LineId: string;\r\n LineItem: INodeProps;\r\n item?: React.ReactNode;\r\n pickUpAtStore?: IPickUpAtStore;\r\n}\r\n\r\nexport interface ILineItemDeliveryGroup {\r\n LineItemDeliveryGroup: INodeProps;\r\n LineItemList: INodeProps;\r\n heading: React.ReactNode;\r\n lineItems: ILineItem[];\r\n}\r\n\r\nexport interface ILineItems {\r\n LineItems: INodeProps;\r\n Header: INodeProps;\r\n heading: React.ReactNode;\r\n editLink: React.ReactNode;\r\n itemsForPickup?: ILineItemDeliveryGroup;\r\n itemsForShip?: ILineItemDeliveryGroup;\r\n}\r\n\r\nexport const getLineItems = (input: ICheckoutProps): ILineItems | undefined => {\r\n const _getProduct = (productId: number): SimpleProduct | undefined => {\r\n const products = get(input, 'data.products.result') || [];\r\n return products.find((_product: SimpleProduct) => {\r\n return productId === _product.RecordId;\r\n });\r\n };\r\n\r\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\r\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n config: { imageSettings },\r\n resources: {\r\n quantityDisplayString,\r\n productDimensionTypeColor,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n configString,\r\n inputQuantityAriaLabel,\r\n discountStringText\r\n },\r\n context: {\r\n request: { gridSettings }\r\n }\r\n } = input;\r\n\r\n if (!product) {\r\n return;\r\n }\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\r\n return items.map(cartLine => {\r\n return {\r\n LineId: cartLine.LineId || '',\r\n LineItem: { className: 'ms-checkout__line-item' },\r\n item: _getLineItemComponent(cartLine)\r\n };\r\n });\r\n };\r\n\r\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\r\n const {\r\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\r\n } = input;\r\n\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n const title = type === 'ship' ? shippingCountCheckoutLineItem : inStorePickUpLabel;\r\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\r\n };\r\n\r\n const _countItems = (items: CartLine[]): number => {\r\n return items.reduce((count, item) => {\r\n return count + (item.Quantity || 0);\r\n }, 0);\r\n };\r\n\r\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\r\n return type === 'ship'\r\n ? cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode !== pickupDeliveryModeCode)\r\n : cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === pickupDeliveryModeCode);\r\n };\r\n\r\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\r\n const items = _filterItemsByDiliveryType(type);\r\n\r\n if (items.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const count = _countItems(items);\r\n const title = _getGroupTitleComponent(count, type);\r\n\r\n return {\r\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\r\n LineItemList: { className: 'ms-checkout__line-items-list' },\r\n heading:
{title}
,\r\n lineItems: _getLineItemsComponents(items)\r\n };\r\n };\r\n\r\n const _getLineItems = (): ILineItems | undefined => {\r\n const {\r\n context,\r\n config: { lineItemsHeading },\r\n data: { products },\r\n resources: { editCartText }\r\n } = input;\r\n\r\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\r\n\r\n if (!cart || !cart.CartLines || !cart.CartLines.length || !products) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n LineItems: { className: 'ms-checkout__line-items' },\r\n Header: { className: 'ms-checkout__line-items-header' },\r\n heading: lineItemsHeading && ,\r\n editLink: (\r\n \r\n {editCartText}\r\n \r\n ),\r\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\r\n itemsForShip: _getLineItemsByDeliveryType('ship')\r\n };\r\n };\r\n\r\n return _getLineItems();\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Module, Node, Button, Popover, getTelemetryObject, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IHeaderViewProps } from '@msdyn365-commerce-modules/header';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { IHeaderProps as IHeaderExtensionProps } from '../definition-extensions/header.ext.props.autogenerated';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { CartIconComponent } from '@msdyn365-commerce/components';\r\nexport interface IHeaderViewState {\r\n _togglePopover: boolean;\r\n signinPopoverOpen: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Header component\r\n * @extends {React.PureComponent>}\r\n */\r\nexport class HeaderView extends React.PureComponent, IHeaderViewState> {\r\n private popOverRef: React.RefObject;\r\n private readonly telemetryContent: ITelemetryContent;\r\n constructor(props: IHeaderViewProps & IHeaderExtensionProps<{}>) {\r\n super(props);\r\n this.popOverRef = React.createRef();\r\n this.state = {\r\n _togglePopover: false,\r\n signinPopoverOpen: false\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n }\r\n public render(): JSX.Element {\r\n const {\r\n HeaderTag,\r\n HeaderContainer,\r\n HeaderTopBarContainer,\r\n MobileMenuContainer,\r\n MobileMenuBodyContainer,\r\n MobileMenuLinksContainer,\r\n context: {\r\n request: {\r\n user: { signUpUrl, signOutUrl }\r\n }\r\n },\r\n id,\r\n typeName,\r\n config: { homePageLink, contactUsLink, signoutLinkText, registerLinkText },\r\n context,\r\n resources: { cartLabel, cartQtyLabel }\r\n } = this.props;\r\n const cartIconSlot = this._getSlot('cartIcon');\r\n const { navIcon, logo, search, MobileMenuHeader, menuBar, accountLinks, signInLink, signOutLink, data } = this.props;\r\n const isUserSignedIn = data.accountInformation.result?.AccountNumber ? true : false;\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n
{navIcon}
\r\n
{logo}
\r\n
{this.renderReactFragment(search)}
\r\n
\r\n {this.renderDesktopAccountBlock()}\r\n {ArrayExtensions.hasElements(cartIconSlot) ? (\r\n cartIconSlot[0]\r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
{logo}
\r\n {MobileMenuHeader}\r\n {this.renderReactFragment(menuBar)}\r\n \r\n {accountLinks ? accountLinks.map(link => link) : false}\r\n
{signInLink}
\r\n
{signOutLink}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {this.renderReactFragment(menuBar)}\r\n
\r\n
\r\n );\r\n }\r\n private _getSlot(slotName: string): React.ReactNode[] | null {\r\n const { slots } = this.props;\r\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\r\n }\r\n private togglePopOver = () => {\r\n this.setState({\r\n signinPopoverOpen: !this.state.signinPopoverOpen\r\n });\r\n };\r\n private getUserOptions = (): React.ReactNode | undefined => {\r\n return (\r\n \r\n );\r\n };\r\n private getSignInButton = (): React.ReactNode | undefined => {\r\n const {\r\n context: {\r\n request: {\r\n user: { signInUrl }\r\n }\r\n },\r\n resources: { signInLinkText, signInLinkAriaText }\r\n } = this.props;\r\n return (\r\n \r\n );\r\n };\r\n private getSignUpButton = (): React.ReactNode | undefined => {\r\n const {\r\n context: {\r\n request: {\r\n user: { signUpUrl }\r\n }\r\n }\r\n } = this.props;\r\n return (\r\n \r\n \r\n {'Create an account'}\r\n \r\n \r\n );\r\n };\r\n private getDropdownPopoverConentContainer = () => {\r\n return {\r\n tag: Popover,\r\n id: 'userOptionsPopover',\r\n className: 'ms-header__user-options-content',\r\n placement: 'bottom',\r\n isOpen: this.state.signinPopoverOpen,\r\n target: this.popOverRef,\r\n toggle: this.togglePopOver\r\n };\r\n };\r\n private getAccountInfoDropdownButton = (customer: Customer | undefined): React.ReactNode | undefined => {\r\n return (\r\n customer &&\r\n customer.FirstName && (\r\n \r\n )\r\n );\r\n };\r\n private getSignInDropdownPopoverConentContainer = (customer: Customer | undefined) => {\r\n return (\r\n (customer &&\r\n customer.FirstName && {\r\n tag: Popover,\r\n id: 'myprofilePopover',\r\n className: 'ms-header__account-info-content',\r\n placement: 'bottom',\r\n isOpen: this.state.signinPopoverOpen,\r\n target: this.popOverRef,\r\n toggle: this.togglePopOver\r\n }) ||\r\n undefined\r\n );\r\n };\r\n private renderDesktopAccountBlock = (): JSX.Element | null => {\r\n const {\r\n AccountInfoDropdownParentContainer,\r\n accountLinks,\r\n signOutLink,\r\n data: { accountInformation },\r\n config: { welcomeText, helloText }\r\n } = this.props;\r\n const customer = accountInformation && accountInformation.result;\r\n const accountInfoDropdownButton = this.getAccountInfoDropdownButton(customer);\r\n const AccountInfoDropdownPopoverConentContainer = this.getSignInDropdownPopoverConentContainer(customer);\r\n // following elements are used in else condition when user isn't logged in\r\n const userOptionsDropDownContainer = this.getDropdownPopoverConentContainer();\r\n const userOptionsButton = this.getUserOptions();\r\n const signInButton = this.getSignInButton();\r\n const signUpButton = this.getSignUpButton();\r\n if (AccountInfoDropdownParentContainer) {\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n \r\n {accountInfoDropdownButton}\r\n \r\n
\r\n
\r\n {helloText && (\r\n \r\n {helloText} {customer && customer.FirstName}\r\n \r\n )}\r\n
\r\n {accountLinks\r\n ? accountLinks.map((link, index) => (\r\n
\r\n {link}\r\n
\r\n ))\r\n : false}\r\n {signOutLink}\r\n
\r\n
\r\n
\r\n );\r\n } else if (userOptionsButton) {\r\n return (\r\n \r\n {userOptionsButton}\r\n \r\n
\r\n
{welcomeText && {welcomeText}}
\r\n {signInButton}\r\n {signUpButton}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n return null;\r\n };\r\n private renderReactFragment = (items: React.ReactNode[]): JSX.Element | null => {\r\n return (\r\n \r\n {items && items.length\r\n ? items.map((slot: React.ReactNode, index: number) => {\r\n return {slot};\r\n })\r\n : null}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default HeaderView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node, Button, Collapse } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/src/modules/checkout';\r\nimport { getLineItems, ILineItems } from './custom-components/get-line-items';\r\nimport { IMandsCheckoutProps } from '../../../modules/mands-checkout/mands-checkout.props.autogenerated';\r\nimport { ICheckoutData } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/checkout.data';\r\nimport { IMandsCheckoutProps as ICheckoutExtensionProps } from '../definition-extensions/mands-checkout.ext.props.autogenerated';\r\n\r\nimport get from 'lodash/get';\r\n\r\nexport interface IState {\r\n _editLink: React.ReactNode;\r\n _heading: React.ReactNode;\r\n isChecked: boolean;\r\n isOpen: boolean;\r\n}\r\nexport interface IRenderLines {\r\n lineItem: React.ReactNode;\r\n}\r\n\r\ninterface IOrderSummaryExtendedProps {\r\n totalItems: number;\r\n cartUrl: string;\r\n}\r\n/**\r\n *\r\n * BuyboxView component\r\n * @extends {React.PureComponent>}\r\n */\r\n\r\nexport class CheckoutView extends React.PureComponent<\r\n ICheckoutViewProps & IMandsCheckoutProps & ICheckoutExtensionProps<{}>,\r\n IState\r\n> {\r\n constructor(props: ICheckoutViewProps & IMandsCheckoutProps & ICheckoutExtensionProps<{}>, state: IState) {\r\n super(props);\r\n this.state = {\r\n _editLink: <>,\r\n _heading: <>,\r\n isChecked: false,\r\n isOpen: false\r\n };\r\n }\r\n public render(): JSX.Element {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n context: { request },\r\n guidedForm,\r\n orderSummary,\r\n placeOrderButton,\r\n data: { checkout }\r\n // keepShoppingButton\r\n } = this.props;\r\n let { lineItems } = this.props;\r\n const lineItemsUpdated = getLineItems(this.props);\r\n lineItems = lineItemsUpdated;\r\n\r\n const cart = get(checkout, 'result.checkoutCart.cart');\r\n const totalItems = cart && cart.TotalItems ? cart.TotalItems : 0;\r\n const totalItemsText = totalItems > 1 ? 'Items' : 'Item';\r\n const sitePath = request.sitePath ? request.sitePath : '';\r\n const cartUrl = `${request.url.requestUrl.origin}${sitePath}/cart`;\r\n const orderTotal = cart && cart.TotalAmount;\r\n const {\r\n config: { toolTipText }\r\n } = this.props;\r\n const mobileView = request && request.device && request.device.Type === 'Mobile' ? true : false;\r\n return (\r\n \r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n
\r\n {guidedForm}\r\n
\r\n
{this.renderCheckBox()}
\r\n \r\n
\r\n {placeOrderButton}\r\n {toolTipText && {toolTipText}}\r\n
\r\n
\r\n
\r\n {lineItems && }\r\n
\r\n
{this.renderCheckBox()}
\r\n
\r\n {placeOrderButton}\r\n {toolTipText && {toolTipText}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {mobileView && (\r\n <>\r\n \r\n Checkout{' '}\r\n \r\n {totalItems} {totalItemsText}{' '}\r\n {this.props.context.cultureFormatter.formatCurrency(orderTotal)}\r\n \r\n \r\n \r\n {orderSummary && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n {orderSummary && !mobileView && (\r\n \r\n )}\r\n \r\n {placeOrderButton}\r\n {/* {keepShoppingButton} */}\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n );\r\n }\r\n private handleClick = () => {\r\n this.setState({ isOpen: !this.state.isOpen });\r\n };\r\n private toggleChange = () => {\r\n this.setState({\r\n isChecked: !this.state.isChecked\r\n });\r\n };\r\n private renderCheckBox = () => {\r\n const {\r\n config: { termsConditionsUrl, acceptTermsAndConditionText }\r\n } = this.props;\r\n return (\r\n \r\n );\r\n };\r\n private PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n );\r\n private LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n );\r\n private LineItemGroupComponent: React.FC = props => {\r\n const { LineItemDeliveryGroup, LineItemList, lineItems } = props;\r\n return (\r\n \r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n );\r\n };\r\n private LineItemsComponent: React.FC = props => {\r\n const { LineItems, Header, heading, itemsForPickup, itemsForShip } = props;\r\n return (\r\n \r\n {heading}\r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n );\r\n };\r\n private OrderSummaryComponent: React.FC = props => {\r\n const { lines } = props;\r\n // const {\r\n // config: { helpLink }\r\n // } = this.props;\r\n const item = props.totalItems > 1 ? 'Items' : 'Item';\r\n return (\r\n
\r\n
\r\n
\r\n

\r\n {props.totalItems} {item}\r\n

\r\n \r\n edit bag\r\n \r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n );\r\n };\r\n}\r\n\r\nexport default CheckoutView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { ProductDimensionsMatrix } from '@msdyn365-commerce/components';\nimport { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ICoreContext, getCatalogId } from '@msdyn365-commerce/core-internal';\nimport { ArrayExtensions, IDimensionsApp, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, Collapse, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { IBulkPurchaseData } from './bulk-purchase.data';\nimport { IBulkPurchaseProps } from './bulk-purchase.props.autogenerated';\n\n/**\n * Additional optional props for the bulk purchase.\n */\nexport interface IBulkPurchaseExtendedProps extends IBulkPurchaseProps {\n productDimensions?: IProductDimensionsWithAvailabilitiesFull[];\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseViewProps extends IBulkPurchaseProps {\n container: IModuleProps;\n content: React.ReactElement;\n}\n\n/**\n * BulkPurchase state message Interface.\n */\nexport interface IBulkPurchaseStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseState {\n isExpanded: boolean;\n stateMessage?: IBulkPurchaseStateMessage;\n}\n\n/**\n * Bulk-purchase module.\n */\nexport class BulkPurchase extends React.PureComponent {\n public static readonly className = 'ms-bulk-purchase';\n private readonly _errorCssClass: string = 'danger';\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n private readonly collapseRef: React.RefObject = React.createRef();\n\n public constructor(props: IBulkPurchaseExtendedProps) {\n super(props);\n\n this.state = {\n isExpanded: false\n };\n }\n\n public render(): React.ReactElement | null {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const hasDimensionsInData = ArrayExtensions.hasElements(this.props.data.productDimensions?.result);\n if (!hasDimensionsInProps && !hasDimensionsInData) {\n return null;\n }\n\n const viewProps: IBulkPurchaseViewProps = {\n ...this.props,\n container: {\n moduleProps: this.props,\n className: classnames(BulkPurchase.className, this.props.config.className)\n },\n content: this._renderCollapseContent(`${BulkPurchase.className}__content`)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderCollapseContent(className: string): React.ReactElement {\n return (\n
\n {this._renderCollapseButton(`${className}__collapse-button`)}\n {this._renderCollapse(`${className}__collapse`)}\n
\n );\n }\n\n private _renderCollapseButton(className: string): React.ReactElement {\n return (\n \n {this.props.resources.bulkPurchaseHeaderTitle}\n \n );\n }\n\n /**\n *This function is being used to handel variant change dropdown.\n */\n private _dimensionDropDownChange = () => {\n this.collapseRef.current?.reEvaluateHeight();\n };\n\n private _renderCollapse(className: string): React.ReactElement {\n return (\n \n {this._renderMainContent(`${className}__main-content`)}\n \n );\n }\n\n private _renderMainContent(className: string): React.ReactElement {\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n\n const userMessageNode = this.state.stateMessage ? (\n \n \n {this.state.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return (\n
\n {!isMobileDevice && (\n
\n \n
\n )}\n {userMessageNode}\n {this._renderMatrix(`${className}__matrix-container`)}\n
\n );\n }\n\n private _renderMatrix(className: string): React.ReactElement {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState?.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n return (\n }\n data={{\n dimensions: hasDimensionsInProps ? this.props.productDimensions! : this.props.data.productDimensions!.result!,\n orderTemplates: this.props.data.orderTemplates?.result,\n customerInformation: this.props.data.customerInformation?.result\n }}\n resources={this.props.resources}\n dimensionOnChange={this._dimensionDropDownChange}\n onErrorMessage={this._onErrorMessage}\n isMultipleCatalogFeatureEnabledInHq={isMultipleCatalogsFeatureEnabled}\n catalogId={catalogId}\n />\n );\n }\n\n private _onErrorMessage = (errorMessage: string) => {\n this.setState({\n stateMessage: {\n messageText: errorMessage,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n });\n };\n\n /**\n * Callback which toggles collapse mode.\n */\n private readonly _toggleCollapse = () => {\n this.setState(state => ({\n isExpanded: !state.isExpanded\n }));\n };\n}\n\nexport default BulkPurchase;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBulkPurchaseViewProps } from './bulk-purchase';\n\n/**\n * Bulk purchase view.\n * @param props - Bulk purchase view props.\n * @returns React node with a module.\n */\nexport const BulkPurchaseViewComponent: React.FC = props => {\n return {props.content};\n};\n\nexport default BulkPurchaseViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
\n {orgUnitName}\n
\n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CartLineValidationResultsByLineId,\n OrgUnitLocation\n} from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n await this._setQuantityLimitsFeatureFlag();\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\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 const hasInvoiceLine = cart?.hasInvoiceLine;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const cartLines = this._getCartLines();\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.state.miniCartData.productAvailabilites ?? [],\n this.props.context.actionContext,\n this.state.miniCartData.products ?? [],\n emailDeliveryModeCode\n );\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\n flyoutTitle: {flyoutTitle},\n totalPrice:
{priceString}
\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\n return;\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\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 return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {props.checkoutBlockedDueToUnavailableFunds}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

,\n cart: this.props.data.cart.result,\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\n cartlines: cartLines,\n cartLinesGroup,\n promoCode: this._getPromoCode(),\n promotionOptions: this._getPromotions(),\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry: this.props.telemetry,\n id: this.props.id,\n multiplePickUpEnabled,\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\n cart?.hasInvoiceLine ? (\n

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n try {\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Method will render error block.\n * @param errorData -The order summary errors interface.\n * @returns Jsx element.\n */\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Method will render invoice summary lines.\n * @param invoiceSummaryLines -The invoicesummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render order summary lines.\n * @param orderSummaryLines -The ordersummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render cart promotions.\n * @param promotions -The cartline item view props.\n * @returns Jsx element.\n */\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Method will render cartlines group title.\n * @param cartLine -The cartline view props.\n * @param titleSeparate -The title separate.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, titleSeparate: string) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {titleSeparate}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n
\n \n );\n};\n\n/**\n * Method will render cartlines groups header title.\n * @param pickUpText -The pickup text for group.\n * @param shippingText -The shipping text for group.\n * @param emailShippingText -The email shipping text for group.\n * @param titleSeparate -The title separator.\n * @param cartLine -The cartline view props.\n * @param emailDeliveryModeCode -The email delivery code from channel.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupHeader = (\n pickUpText: string,\n shippingText: string,\n emailShippingText: string,\n titleSeparate: string,\n cartLine: ICartlinesViewProps,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, titleSeparate)}\n
\n \n );\n};\n\n/**\n * Method will render cartlines in groups.\n * @param props -The cartline.\n * @returns Jsx element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n props.resources.pickUpText,\n props.resources.shippingText,\n props.resources.emailshippingText,\n props.resources.titleSeparate,\n cartlines[0],\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
\n

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description }) => {\n if (!description) {\n return null;\n }\n\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

{message}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorTitleProps {\n title?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.title\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\n if (!title) {\n return null;\n }\n\n return

{title}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Address, CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { QueryResultSettingsProxy, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ErrorComponent } from '../../common/error';\nimport { ICheckoutDeliveryOptionsData } from './checkout-delivery-options.data';\nimport {\n filterDeliveryModeOption,\n ICheckoutDeliveryOptionsProps,\n useDefaultDeliveryOption\n} from './checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/checkout-delivery-options.radio-button';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutDeliveryOptionsModuleProps\n extends ICheckoutDeliveryOptionsProps,\n IModuleStateProps {}\n\nexport interface ICheckoutDeliveryOption {\n DeliveryOption: INodeProps;\n description?: React.ReactNode;\n price?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\n code: string;\n radioButton?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsList {\n DeliveryOptionsList: INodeProps;\n list: ICheckoutDeliveryOptionEdit[];\n}\n\nexport interface ICheckoutDeliveryOptionsError {\n Error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsViewState {\n isLoading: boolean;\n isError: boolean;\n isShowList: boolean;\n isShowSelected: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutDeliveryOptionsViewProps extends ICheckoutDeliveryOptionsProps<{}> {\n CheckoutDeliveryOptions: IModuleProps;\n selectedItemId: string;\n deliveryOptionsData: DeliveryOption[];\n isLoading: boolean;\n errorMessageData: string;\n viewState: ICheckoutDeliveryOptionsViewState;\n deliveryOptions?: ICheckoutDeliveryOptionsList;\n deliveryOptionSelected?: ICheckoutDeliveryOption;\n errorMessage?: ICheckoutDeliveryOptionsError;\n waiting?: React.ReactNode;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n onDeliveryOptionChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n}\n\n/**\n *\n * CheckoutDeliveryOptions component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutDeliveryOptions extends React.Component {\n @observable private selectedItemId: string = '';\n\n @observable private deliveryOptions: DeliveryOption[] = [];\n\n @observable private isLoading: boolean = false;\n\n @observable private errorMessage?: string;\n\n @computed private get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n public get expressPaymentDetailsFromCartPage() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n\n return properties ? JSON.parse(properties) : null;\n }\n\n public get isExpressPaymentAppliedInCartPage(): boolean {\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\n }\n\n private cartDeliveryMode?: string;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly isSelectDefaultOptionEnabled?: boolean;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public constructor(props: ICheckoutDeliveryOptionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isSelectDefaultOptionEnabled =\n this.props.config.useDefaultDeliveryOption && this.props.config.useDefaultDeliveryOption !== useDefaultDeliveryOption.none;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\n async isExpressCheckoutApplied => {\n if (isExpressCheckoutApplied && this.canShip() && !this.isExpressPaymentAppliedInCartPage) {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\n checkoutError.errorMessage\n ) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutDeliveryOptionsModuleProps, nextState: ICheckoutDeliveryOptionsViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n if (!this.canShip()) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const {\n moduleState: { isReady, isUpdating, hasError }\n } = this.props;\n const isError = !this.isLoading && hasError;\n const isShowList = !this.isLoading && !hasError && isUpdating && !this.isSelectDefaultOptionEnabled;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n const { errorMessageTitle, deliveryOptionAriaLabel } = this.props.resources;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\n alert: this.errorMessage && ,\n errorMessageData: this.errorMessage,\n viewState: {\n isLoading: this.isLoading,\n isError,\n isShowList,\n isShowSelected,\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\n },\n CheckoutDeliveryOptions: {\n moduleProps: this.props,\n className: classname('ms-checkout-delivery-options', this.props.config.className)\n },\n deliveryOptions: {\n DeliveryOptionsList: {\n className: 'ms-checkout-delivery-options__list',\n role: 'list',\n 'aria-label': deliveryOptionAriaLabel\n },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n checkoutErrorRef: this.checkoutErrorRef,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.isSelectDefaultOptionEnabled ? undefined : this.onEdit,\n onCancel: this.isSelectDefaultOptionEnabled ? undefined : this.onCancel,\n onSubmit: this.isSelectDefaultOptionEnabled ? undefined : this.onSubmit,\n status:\n !(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption) &&\n this.canShip()\n ? 'updating'\n : 'disabled'\n });\n\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n await this.loadDeliveryOptions();\n };\n\n private readonly canShip = (): boolean => {\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\n };\n\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n const channelConfig = this.props.context.request.channel;\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\n description: ,\n price: (\n \n )\n };\n };\n\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-expect-error\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n const channelConfig = this.props.context.request.channel;\n\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option', role: 'listitem' },\n code: deliveryOption.Code || '',\n radioButton: (\n \n ),\n description: (\n \n ),\n price: (\n \n )\n };\n });\n };\n\n private readonly getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save' } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private readonly getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.errorMessage = errorMessage;\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private readonly onSave = async (): Promise => {\n await this.onSubmit();\n };\n\n private readonly onEdit = async (): Promise => {\n this.props.telemetry.information('Delivery options onEdit is called.');\n\n this.clearError();\n this.onUpdating();\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n };\n\n private readonly onSubmit = async (): Promise => {\n this.props.telemetry.information('Delivery options onSubmit is called.');\n\n await this.updateCartDeliverySpecification(this.selectedItemId);\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n };\n\n private readonly onCancel = async (): Promise => {\n this.props.telemetry.information('Delivery options onCancel is called.');\n\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n } else {\n this.onUpdating();\n }\n };\n\n private readonly getSavedDeliveryOption = (): string | undefined => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\n };\n\n private readonly updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\n if (deliveryModeId.trim() === '') {\n return;\n }\n\n const { resources } = this.props;\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const updateCartDeliverySpecificationInput = {\n deliveryModeId,\n shippingAddress: checkoutState.shippingAddress,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined\n };\n\n this.clearError();\n this.onPending();\n\n await checkoutState.checkoutCart\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then(response => {\n if (response.status === 'FAILED') {\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\n }\n\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n })\n .catch(() => {\n this.setError(resources.genericErrorMessage);\n });\n };\n\n private readonly getCartLinesForShipping = (): CartLine[] => {\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n return this.retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n };\n\n private readonly getDeliveryOptions = async (shippingAddress: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n const cartId = (cartState.cart as Cart).Id;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const response = await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cartId,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n );\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n\n if (response && response.length > 0) {\n this.deliveryOptions = response;\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n\n if (this.deliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartDeliveryMode && this.isDeliveryModeExists(this.cartDeliveryMode)) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: !!this.isSelectDefaultOptionEnabled });\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly getStoredDeliveryOptions = async (): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context } = this.props;\n const cartState = this.props.data.checkout.result.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n }\n\n if (this.cartDeliveryMode) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly loadDeliveryOptions = async (): Promise => {\n const shippingAddress = this.props.data.checkout.result?.shippingAddress;\n\n if (this.canShip() && shippingAddress) {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n await this.getDeliveryOptions(shippingAddress);\n }\n\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n }\n\n if (\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n this.onSubmit();\n }\n }\n };\n\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private readonly onReady = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onUpdating = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onUpdating();\n }\n };\n\n private readonly onPending = () => {\n if (!this.isSelectDefaultOptionEnabled) {\n this.props.moduleState.onPending();\n }\n };\n}\n\nexport default CheckoutDeliveryOptions;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutDeliveryOption,\n ICheckoutDeliveryOptionEdit,\n ICheckoutDeliveryOptionsList,\n ICheckoutDeliveryOptionsViewProps\n} from './checkout-delivery-options';\n\nconst DeliveryOptionList: React.FC = ({ DeliveryOptionsList, list }) => {\n if (!list || list.length === 0) {\n return null;\n }\n\n return (\n \n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\n return (\n \n {deliveryOption.radioButton}\n {deliveryOption.description}\n {deliveryOption.price}\n \n );\n })}\n \n );\n};\n\nconst DeliveryOptionSelected: React.FC = ({ DeliveryOption, description, price }) => {\n return (\n \n {description}\n {price}\n \n );\n};\n\nconst CheckoutDeliveryOptionsView: React.FC = props => {\n const {\n CheckoutDeliveryOptions,\n checkoutErrorRef,\n viewState,\n deliveryOptions,\n deliveryOptionSelected,\n alert,\n waiting,\n saveButton,\n editButton,\n cancelButton\n } = props;\n\n return (\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\n \n {viewState.isLoading && waiting}\n {viewState.isError && alert}\n {viewState.isShowList && deliveryOptions && }\n {viewState.isShowSelected && deliveryOptionSelected && }\n {viewState.isShowSaveButton && saveButton}\n {viewState.isShowEditButton && editButton}\n {viewState.isShowCancelButton && cancelButton}\n \n );\n};\n\nexport default CheckoutDeliveryOptionsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../checkout-gift-card.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n disableAddGiftCard?: boolean;\n resources: {\n applyGiftCardButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On Apply Function.\n * @param onApplyGiftCard -On Apply Gift Card Function.\n * @returns Call of Apply Gift Card Function.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number Function.\n * @param onEnterGiftCardNumber -On enter gift card number Function.\n * @returns Call of on enter gift card number Function.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On Change pin event.\n * @param onEnterGiftCardPin -On enter gift card pin Function.\n * @returns Call of on enter gift card pin Function.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On Change Event.\n * @param onEnterGiftCardExp -On enter gift card function.\n * @returns Call of On enter gift card function.\n */\n// Need to filter out the month and year\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard,\n resources: {\n applyGiftCardButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-checkout-gift-card__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-checkout-gift-card__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-checkout-gift-card__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-checkout-gift-card__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-checkout-gift-card__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {applyGiftCardButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: IGiftCardExtend;\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * On remove function.\n * @param onRemoveGiftCard -Gift card number function.\n * @param giftCard -Gift card values.\n * @returns Call of onRemoveGiftCard function.\n */\nconst onRemoveHandler = (onRemoveGiftCard: (giftCardNumber: string) => void, giftCard: IGiftCardExtend) => (): void => {\n onRemoveGiftCard(giftCard.Id ?? '');\n};\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.canRemove\n * @param root0.onRemoveGiftCard\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @param root0.resources.removeGiftCardButton\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n canRemove,\n onRemoveGiftCard,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel, removeGiftCardButton }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-checkout-gift-card__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {' ('}\n {giftCardAvailableBalanceLabel}\n {` `}\n {balance}\n {')'}\n \n );\n\n const removeButton = canRemove && (\n \n );\n\n return {\n itemProps,\n id: giftCard.Id,\n selectedGiftCard,\n removeButton\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\n\nimport { getItem, IItem } from './get-item';\n\ninterface IGetListInput {\n giftCards?: IGiftCardExtend[];\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IList {\n listProps: INodeProps;\n list: IItem[];\n}\n\nexport const getList = ({ giftCards, canRemove, resources, getFormattedPrice, onRemoveGiftCard }: IGetListInput): IList | undefined => {\n if (!giftCards || giftCards.length === 0) {\n return undefined;\n }\n\n const listProps = {\n className: 'ms-checkout-gift-card__list'\n };\n\n const list = giftCards.map(giftCard =>\n getItem({\n canRemove,\n getFormattedPrice,\n giftCard,\n onRemoveGiftCard,\n resources\n })\n );\n\n return {\n listProps,\n list\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IGiftCardTitleProps {\n title: string;\n}\n\nconst GiftCardTitle: React.FC = ({ title }) => ;\n\nexport default GiftCardTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { ICheckoutGiftCardData } from './checkout-gift-card.data';\nimport { ICheckoutGiftCardProps } from './checkout-gift-card.props.autogenerated';\nimport { getForm, IForm } from './components/get-form';\nimport { getList, IList } from './components/get-list';\nimport TitleCompoent from './components/title';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport * from './components/get-form';\nexport * from './components/get-item';\nexport * from './components/get-list';\n\ninterface ICheckoutGiftCardState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface ICheckoutGiftCardModuleProps extends ICheckoutGiftCardProps, IModuleStateProps {}\n\nexport interface IShowResource {\n title: React.ReactNode;\n list?: IList;\n}\n\nexport interface IAddResource {\n form: IForm;\n list?: IList;\n}\n\nexport interface ICheckoutGiftCardViewProps extends ICheckoutGiftCardProps<{}>, ICheckoutGiftCardState {\n className?: string;\n\n showGiftCard?: IShowResource;\n addGiftCard?: IAddResource;\n\n checkoutGiftCardProps: IModuleProps;\n couldPaidByGiftCard?: boolean;\n isEnabled?: boolean;\n checkoutErrorRef?: React.RefObject;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardNumber: string): void;\n enterGiftCardExp?(giftCardNumber: string): void;\n removeGiftCard?(giftCardNumber: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * CheckoutGiftCard component.\n * @extends {React.Component, ICheckoutGiftCardState>}\n */\n@observer\nexport class CheckoutGiftCard extends React.Component {\n public state: ICheckoutGiftCardState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n @computed get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.loyaltyAmount) {\n return 0;\n }\n return checkoutState.loyaltyAmount;\n }\n\n @computed get getCustomerAccountAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState && checkoutState.customerAccountAmount ? checkoutState.customerAccountAmount : 0;\n }\n\n @computed get getGiftCardTotalAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.giftCardExtends) {\n return 0;\n }\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\n const balance: number = giftCard.Balance || 0;\n return count + balance;\n }, 0);\n }\n\n @computed get disableAddGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return true;\n }\n return (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getGiftCardTotalAmount <= 0;\n }\n\n @computed get shouldPayGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card card when loyalty points do not cover the total amount\n const amountDue = (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getCustomerAccountAmount;\n return amountDue > 0;\n }\n\n @computed get hasSelectedItem(): boolean {\n const {\n data: { checkout }\n } = this.props;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n return !!giftCards && giftCards.length > 0;\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n () => {\n this.init();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutGiftCard && checkoutError.errorMessage) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutGiftCard) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutGiftCardModuleProps, nextState: ICheckoutGiftCardState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n moduleState: { isReady },\n data: { checkout },\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n const additionalFields = showAdditionalFields;\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this.isEnabled() || (!this.shouldPayGiftCard && !isReady)) {\n this.props.context.telemetry.error('Checkout giftcard content is empty, module wont render');\n return null;\n }\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.GiftCard === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout gift card module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-checkout-gift-card', className, isReady ? 'show' : 'add');\n\n const viewProps: ICheckoutGiftCardViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n checkoutErrorRef: this.checkoutErrorRef,\n\n checkoutGiftCardProps: { moduleProps: this.props, className: moduleClassName },\n couldPaidByGiftCard: this.couldPaidByGiftCard(),\n isEnabled: this.isEnabled(),\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n enterGiftCardNumber: this.enterGiftCardNumber,\n enterGiftCardPin: this.enterGiftCardPin,\n enterGiftCardExp: this.enterGiftCardExp,\n removeGiftCard: this.removeGiftCard,\n applyGiftCard: this.applyGiftCard,\n showGiftCard: isReady\n ? {\n title: ,\n list: getList({\n canRemove: false,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined,\n addGiftCard: !isReady\n ? {\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n onEnterGiftCardNumber: this.enterGiftCardNumber,\n onEnterGiftCardPin: this.enterGiftCardPin,\n onEnterGiftCardExp: this.enterGiftCardExp,\n onApplyGiftCard: this.applyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard: this.disableAddGiftCard\n }),\n list: getList({\n canRemove: true,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly init = (): void => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const giftCards = this.props.data.checkout.result?.giftCardExtends;\n if (giftCards && giftCards.length > 0) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly couldPaidByGiftCard = (): boolean => {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart?.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card when it is not free\n return (cart.TotalAmount || 0) > 0;\n };\n\n private readonly isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return this.couldPaidByGiftCard();\n };\n\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Payment section gift card onEdit is called.');\n\n // Show add gift card form\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = (): void => {\n this.props.telemetry.information('Payment section gift card onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = (): void => {\n this.props.telemetry.information('Payment section gift card onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n if (this.hasSelectedItem) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this.clearError();\n };\n\n private readonly enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this.clearError();\n };\n\n private readonly enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this.clearError();\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.props.moduleState.setHasError(true);\n this.setState({\n errorMessage\n });\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly removeGiftCard = async (giftCardNumber: string): Promise => {\n this.props.telemetry.information('Payment section gift card remove is called.');\n\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState) {\n return;\n }\n\n await checkoutState.removeGiftCard({ giftCardNumber });\n };\n\n private readonly applyGiftCard = async (): Promise => {\n this.props.telemetry.information('Payment section gift card apply is called.');\n\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const checkoutState = this.props.data.checkout.result;\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this.getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this.getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (checkoutState && giftCard) {\n await checkoutState.addGiftCard({\n giftCard,\n additionalProperties: { Pin: giftCardPin, ExpirationDate: giftCardExp, TenderTypeId: tenderTypeId }\n });\n this.clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false\n });\n this.props.telemetry.information('Payment section fetching gift card is failed.');\n };\n\n private readonly findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { noBalanceError, invalidCardInfoError, invalidCardTypeError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n const internalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (isPinRequired && giftCardPin === '') {\n this.setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this.setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this.setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this.setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, duplicatedCodeError, invalidCodeError },\n data: { checkout }\n } = this.props;\n\n if (!giftCardNumber) {\n this.setError(emptyInputError);\n return undefined;\n }\n\n const isDuplicated = checkout.result && checkout.result.giftCardExtends.some((card: GiftCard) => card.Id === giftCardNumber);\n if (isDuplicated) {\n this.setError(duplicatedCodeError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this.setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this.setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default withModuleState(CheckoutGiftCard);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddResource, ICheckoutGiftCardViewProps, IForm, IItem, IList, IShowResource } from './checkout-gift-card';\n\nexport const From: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const SelectedGiftCard: React.FC = ({ itemProps, selectedGiftCard, removeButton }) => (\n \n {selectedGiftCard}\n {removeButton}\n \n);\n\nexport const GiftCardList: React.FC = ({ listProps, list }) => (\n \n {list.map(({ id, ...item }) => (\n \n ))}\n \n);\n\nexport const AddResource: React.FC = ({ form, list }) => (\n <>\n {form && }\n {list && }\n \n);\n\nexport const ShowResource: React.FC = ({ title, list }) => (\n <>\n {title}\n {list && }\n \n);\n\nconst CheckoutGiftCardView: React.FC = props => {\n const { checkoutGiftCardProps, checkoutErrorRef, showGiftCard, addGiftCard } = props;\n return (\n \n {showGiftCard && }\n {addGiftCard && }\n \n );\n};\n\nexport default CheckoutGiftCardView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyInput {\n className: string;\n type: string;\n value: string | number;\n min: number;\n max: number;\n ariaValueMax: number;\n ariaValueMin: number;\n ariaValueNow: number;\n id: string;\n step: string;\n onChange(event: React.ChangeEvent): void;\n onBlur(event: React.FocusEvent): void;\n}\n\nconst AdressInput: React.FC = ({\n className,\n type,\n value,\n min,\n max,\n step,\n ariaValueMax,\n ariaValueMin,\n ariaValueNow,\n onChange,\n onBlur,\n id\n}) => (\n \n);\n\nexport default AdressInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyLabelProps {\n className: string;\n text: string;\n htmlFor: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @param root0.htmlFor\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyLabel: React.FC = ({ className, text, htmlFor }) => {\n return (\n \n );\n};\n\nexport default CheckoutLoyaltyLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyTextProps {\n className: string;\n text?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyText: React.FC = ({ className, text }) => {\n if (!text) {\n return null;\n }\n\n return {text};\n};\n\nexport default CheckoutLoyaltyText;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { callActionOrExecute } from '@msdyn365-commerce/retail-proxy';\nimport { createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { LoyaltyPointRedemptionEstimate, LoyaltyRewardPoint } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { GetLoyaltyTransactionEstimationInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Drawer, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { CheckoutModule, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport { action, computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyData } from './checkout-loyalty.data';\nimport { ICheckoutLoyaltyProps } from './checkout-loyalty.props.autogenerated';\nimport InputComponent from './components/checkout-loyalty-input';\nimport LabelComponent from './components/checkout-loyalty-label';\nimport TextComponent from './components/checkout-loyalty-text';\nimport { ErrorComponent } from '../../common/error';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutLoyaltyState {\n dollarsApplied: number;\n isFetchingLoyaltyCard: boolean;\n errorMessage?: string;\n}\n\nexport interface ICheckoutLoyaltyModuleProps extends ICheckoutLoyaltyProps, IModuleStateProps {}\n\nexport interface ICheckoutLoyaltyViewState {\n isShowLoyalty: boolean;\n isShowAddLoyalty: boolean;\n}\n\nexport interface ICheckoutLoyaltyShow {\n heading: React.ReactNode;\n coveredAmountText: React.ReactNode;\n amount: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyRewardPoint {\n checkoutLoyaltyRewardPoint: INodeProps;\n key: string;\n title: React.ReactNode;\n availablePointsText: React.ReactNode;\n activePoints: React.ReactNode;\n expiringPointsText: React.ReactNode;\n expiringPoints: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyAdd {\n heading: React.ReactNode;\n cardNumber: React.ReactNode;\n drawer: INodeProps;\n rewardPoints: ICheckoutLoyaltyRewardPoint[];\n loyaltyAmountContainer: INodeProps;\n appliedLoyaltyAmountContainer: INodeProps;\n loyaltyAmountLabel: React.ReactNode;\n loyaltyAmountInput: React.ReactNode;\n loyaltyAmountApplyButton: React.ReactNode;\n showAppliedAmount: boolean;\n loyaltyAmountAppliedText: React.ReactNode;\n loyaltyAmountAppliedPrice: React.ReactNode;\n loyaltyAmountRemoveButton: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyViewProps extends ICheckoutLoyaltyModuleProps {\n checkoutLoyalty: IModuleProps;\n viewState: ICheckoutLoyaltyViewState;\n showLoyalty: ICheckoutLoyaltyShow;\n addLoyalty: ICheckoutLoyaltyAdd;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n *\n * CheckoutLoyalty component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n\n@withModuleState\n@observer\nclass CheckoutLoyalty extends React.Component {\n private readonly _dialogToggleRef: React.RefObject | undefined;\n\n private readonly moduleClassName: string = 'ms-checkout-loyalty';\n\n private readonly _defaultLoyaltyPoints: number = 0;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n constructor(props: ICheckoutLoyaltyModuleProps) {\n super(props);\n this._dialogToggleRef = React.createRef();\n this._applyLoyaltyPoints = this._applyLoyaltyPoints.bind(this);\n this._removeLoyaltyPoints = this._removeLoyaltyPoints.bind(this);\n this._onInputChange = this._onInputChange.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this.state = { dollarsApplied: this.maxDollars, isFetchingLoyaltyCard: false };\n }\n\n @computed get shouldPayLoyalty(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use loyalty when cart is not full of free items\n const amountDue = cart.TotalAmount || 0;\n return amountDue > 0;\n }\n\n @computed get isDataReady(): boolean {\n return (\n (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.loyaltyCard && this.props.data.loyaltyCard.status) !== 'LOADING' &&\n (this.props.data.loyaltyTransactionEstimation && this.props.data.loyaltyTransactionEstimation.status) !== 'LOADING'\n );\n }\n\n @computed get maxDollars(): number {\n return this.props.data.loyaltyTransactionEstimation.result &&\n this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n ? this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n : 0;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart,\n async () => {\n this._updateEstimate();\n }\n );\n\n reaction(\n () => this.props.data.loyaltyCard.result,\n async () => {\n this._updateLoyalty();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutLoyalty && checkoutError.errorMessage) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutLoyalty) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutLoyaltyModuleProps, nextState: ICheckoutLoyaltyState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n resources,\n renderView,\n moduleState: { hasError, isReady }\n } = this.props;\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.Loyalty === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout loyalty module wont render');\n return null;\n }\n\n if (\n this.props.data.loyaltyCard &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n ) {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n const checkoutState = this.props.data.checkout.result;\n let isShowLoyalty = false;\n const errorMessage = this.state.errorMessage;\n\n if (isReady) {\n if (!checkoutState || checkoutState.loyaltyAmount === 0) {\n return null;\n }\n isShowLoyalty = true;\n }\n const channelConfig = this.props.context.request.channel;\n const viewProps = {\n ...this.props,\n checkoutErrorRef: this.checkoutErrorRef,\n viewState: {\n isShowLoyalty,\n isShowAddLoyalty: !isReady\n },\n alert: hasError && errorMessage && ,\n checkoutLoyalty: {\n moduleProps: this.props,\n className: classnames(\n this.moduleClassName,\n { [`${this.moduleClassName}__applied`]: isShowLoyalty },\n this.props.config.className\n )\n },\n showLoyalty: {\n heading: ,\n coveredAmountText: (\n \n ),\n amount: (\n \n )\n },\n addLoyalty: {\n heading: ,\n drawer: {\n tag: Drawer,\n className: `${this.moduleClassName}__drawer`,\n toggleButtonText: this._drawerHeader(),\n openGlyph: `${this.moduleClassName}__drawer-open`,\n closeGlyph: `${this.moduleClassName}__drawer-close`,\n glyphPlacement: 'end'\n },\n cardNumber: ,\n rewardPoints:\n loyaltyCard.RewardPoints &&\n loyaltyCard.RewardPoints.map((points, index) => {\n return this._renderPointSection(points, resources.availablePointsLabel, resources.expiringLoyaltyPointsLabel);\n }),\n loyaltyAmountContainer: {\n className: `${this.moduleClassName}__amount`\n },\n appliedLoyaltyAmountContainer: {\n className: `${this.moduleClassName}__applied-amount`\n },\n loyaltyAmountLabel: (\n \n ),\n loyaltyAmountInput: (\n \n ),\n loyaltyAmountApplyButton: (\n this.maxDollars ||\n this.state.dollarsApplied <= 0 ||\n isNaN(this.state.dollarsApplied) ||\n this.state.isFetchingLoyaltyCard\n }\n >\n {this.props.resources.applyCheckoutLoyaltyPaymentText}\n \n ),\n showAppliedAmount: checkoutState && checkoutState.loyaltyAmount > 0,\n loyaltyAmountAppliedText: (\n \n ),\n loyaltyAmountAppliedPrice: (\n \n ),\n loyaltyAmountRemoveButton: (\n \n {this.props.resources.removeCheckoutLoyaltyPaymentText}\n \n )\n }\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n this.props.context.telemetry.error('Checkout loyalty content is empty, module wont render');\n return null;\n }\n\n private _drawerHeader(): JSX.Element {\n const channelConfig = this.props.context.request.channel;\n return (\n <>\n

{this.props.resources.loyaltyCoveredAmountText}

\n \n \n );\n }\n\n private _renderPointSection(\n point: LoyaltyRewardPoint,\n loyaltyCoveredAmountText: string,\n expiringLoyaltyPointsLabel: string\n ): ICheckoutLoyaltyRewardPoint {\n return {\n key: point.RewardPointId || '',\n checkoutLoyaltyRewardPoint: {\n className: `${this.moduleClassName}__program`\n },\n title: ,\n availablePointsText: ,\n activePoints: (\n \n ),\n expiringPointsText: ,\n expiringPoints: (\n \n )\n };\n }\n\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const savedLoyaltyAmount = this.props.data.checkout.result?.loyaltyAmount;\n if (savedLoyaltyAmount) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n } else if (\n this.props.data.loyaltyCard.result &&\n this.props.data.checkout.result &&\n this.props.data.loyaltyCard.result.CardNumber !== this.props.data.checkout.result.checkoutCart.cart.LoyaltyCardId\n ) {\n this.props.data.checkout.result.checkoutCart\n .updateLoyaltyCardId({ loyaltyCardNumber: this.props.data.loyaltyCard.result.CardNumber })\n .catch(error => {\n if (this.context.telemetry) {\n this.context.telemetry.warning(error);\n this.context.telemetry.debug('Unable to update the loyalty card');\n }\n });\n }\n };\n\n private readonly onEdit = () => {\n this.props.telemetry.information('Payment section loyalty onEdit is called.');\n\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = () => {\n this.props.telemetry.information('Payment section loyalty onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = () => {\n this.props.telemetry.information('Payment section loyalty onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n const checkoutState = this.props.data.checkout.result;\n if (checkoutState && checkoutState.loyaltyAmount > 0) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly isEnabled = () => {\n return (\n this.props.context.request.user.isAuthenticated &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n );\n };\n\n private async _applyLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty apply button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: Number.parseFloat(this.state.dollarsApplied.toString()) });\n this.setState({\n isFetchingLoyaltyCard: true\n });\n }\n\n private async _removeLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty remove button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: 0 });\n this.setState({\n dollarsApplied: 0\n });\n }\n\n private _onInputChange(event: React.ChangeEvent): void {\n const value = event.currentTarget.value;\n this.setState({ dollarsApplied: value.length > 0 ? Number(value) : Number.parseFloat(value), isFetchingLoyaltyCard: false });\n }\n\n private _onBlur(event: React.FocusEvent): void {\n const num = Number.parseFloat(event.currentTarget.value).toFixed(2);\n const element = document.getElementById(`${this.props.id}-label`) as HTMLInputElement;\n if (element && num) {\n element.value = num;\n this.setState({ dollarsApplied: Number.parseFloat(num) });\n }\n }\n\n private _updateLoyalty(): void {\n if (this.props.moduleState.isDisabled && this.isEnabled()) {\n this._updateEstimate();\n this.props.moduleState.onUpdating();\n }\n }\n\n private _updateEstimate(): void {\n const card = this.props.data.loyaltyCard.result;\n const checkout = this.props.data.checkout.result;\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n const channelConfig = this.props.context.request.channel;\n if (card && card.CardNumber && cart && channelConfig) {\n const currencyCode = channelConfig.Currency || '';\n const loyalPointsRequest = createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput(cart.Id, card.CardNumber, currencyCode);\n\n // @ts-expect-error\n // Due to bug 23214358, this is getting improperly cached. Need to turn on cache bypass for now to work around issue\n loyalPointsRequest._query.options.bypassCache = 'get';\n\n callActionOrExecute(loyalPointsRequest, this.props.context.actionContext)\n .then(async points => {\n this.props.context.actionContext.update(\n new GetLoyaltyTransactionEstimationInput(this.props.context.request.apiSettings),\n points\n );\n const newMaxPoints = points.MaxCurrencyValueOfLoyaltyPoints ?? this._defaultLoyaltyPoints;\n\n // If points are already applied, ensure you don't apply more points than max\n if (checkout && checkout.loyaltyAmount > newMaxPoints) {\n await checkout.updateLoyaltyAmount({ newAmount: newMaxPoints });\n }\n\n this.setState({ dollarsApplied: newMaxPoints, isFetchingLoyaltyCard: false });\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n this.props.context.actionContext.telemetry.debug('Error getting Loyalty Point Redemption Estimate');\n });\n }\n }\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n}\n\nexport default CheckoutLoyalty;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyAdd, ICheckoutLoyaltyRewardPoint, ICheckoutLoyaltyShow, ICheckoutLoyaltyViewProps } from './checkout-loyalty';\n\nconst AddCheckoutLoyalty: React.FC = ({\n heading,\n cardNumber,\n drawer,\n rewardPoints,\n loyaltyAmountContainer,\n appliedLoyaltyAmountContainer,\n loyaltyAmountLabel,\n loyaltyAmountInput,\n loyaltyAmountApplyButton,\n showAppliedAmount,\n loyaltyAmountAppliedText,\n loyaltyAmountAppliedPrice,\n loyaltyAmountRemoveButton\n}) => {\n return (\n <>\n {heading}\n {cardNumber}\n \n {rewardPoints.map((rewardPoint: ICheckoutLoyaltyRewardPoint) => {\n return (\n \n {rewardPoint.title}\n {rewardPoint.availablePointsText}\n {rewardPoint.activePoints}\n {rewardPoint.expiringPointsText}\n {rewardPoint.expiringPoints}\n \n );\n })}\n \n \n {loyaltyAmountLabel}\n {loyaltyAmountInput}\n {loyaltyAmountApplyButton}\n {showAppliedAmount && (\n \n {loyaltyAmountAppliedText}\n {loyaltyAmountAppliedPrice}\n {loyaltyAmountRemoveButton}\n \n )}\n \n \n );\n};\n\nconst ShowCheckoutLoyalty: React.FC = ({ heading, coveredAmountText, amount }) => {\n return (\n <>\n {heading}\n {coveredAmountText}\n {amount}\n \n );\n};\n\nconst CheckoutLoyaltyView: React.FC = props => {\n const { checkoutLoyalty, checkoutErrorRef, alert, viewState, showLoyalty, addLoyalty } = props;\n\n return (\n \n {alert}\n {viewState.isShowLoyalty && }\n {viewState.isShowAddLoyalty && }\n \n );\n};\n\nexport default CheckoutLoyaltyView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { AsyncResultStatus, Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\nimport {\n updateLineDeliverySpecificationsAsync,\n validateForCheckoutAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n DeliveryPreferenceType,\n LineDeliverySpecification,\n SimpleProduct,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions,\n getAvailabilitiesForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n validateCartLinesInventory\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n Waiting\n} from '@msdyn365-commerce-modules/utilities';\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport { action, computed, get, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutData } from './checkout.data';\nimport { ICheckoutHeadingData, ICheckoutProps } from './checkout.props.autogenerated';\nimport AlertComponent from './components/alert';\nimport { getInvoicePaymentSummary, IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\nimport { getLineItems, ILineItems } from './components/get-line-items';\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\nimport GuidedFormComponent from './components/guided-form';\nimport PlaceOrderButtonComponent from './components/place-order-button';\nimport placeOrder from './methods/place-order';\nimport { focusOnCheckoutError, setCheckoutErrors } from '../../checkout-errors';\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from '../../common';\n\nexport * from './components/get-line-items';\nexport * from './components/get-order-summary';\n\n/**\n * Device type.\n */\ntype DeviceType = 'Mobile';\n\n/**\n * The Checkout state.\n */\ninterface ICheckoutState {\n errorMessage: string;\n isValidationPassed: boolean;\n isPlaceOrderLoading?: boolean;\n isPlaceOrderClicked?: boolean;\n}\n\n/**\n * The Checkout view props.\n * @extends ICheckoutProps\n */\nexport interface ICheckoutViewProps extends ICheckoutProps {\n className: string;\n canShow?: boolean;\n isEmptyCart?: boolean;\n isConsentGiven?: boolean;\n hasError?: boolean;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n cartStatus?: string;\n isMobile?: boolean;\n isEditorialMode?: boolean;\n backToShoppingUrl?: string;\n editCartLink?: string;\n hasSalesOrder: boolean;\n hasInvoiceLine?: boolean;\n\n checkoutProps: IModuleProps;\n headerProps: INodeProps;\n bodyProps: INodeProps;\n mainProps: INodeProps;\n mainControlProps: INodeProps;\n sideProps: INodeProps;\n sideControlFirstProps: INodeProps;\n sideControlSecondProps: INodeProps;\n termsAndConditionsProps: INodeProps;\n\n guidedForm?: React.ReactNode;\n title?: React.ReactNode;\n loading?: React.ReactNode;\n alert?: React.ReactNode;\n orderSummary?: IOrderSummary;\n invoicePaymentSummary?: IInvoicePaymentSummary;\n lineItems?: ILineItems;\n placeOrderButton?: React.ReactNode;\n termsAndConditions?: React.ReactNode;\n keepShoppingButton?: React.ReactNode;\n orderConfirmation?: React.ReactNode;\n\n checkoutExpressPaymentContainer?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n * The checkout module props interface.\n */\nexport interface ICheckoutModuleProps extends ICheckoutProps, IModuleStateProps {}\n\nconst expressPaymentSectionClassName = 'msc-express-payment-container';\n\n/**\n *\n * CheckoutContainer component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass Checkout extends React.PureComponent {\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\n return this.props.data.checkout?.status;\n }\n\n @computed get isEmptyCart(): boolean {\n if (this.isEditorialMode) {\n // Editorial mode: Ignore empty cart\n return false;\n }\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\n }\n\n @computed get hasError(): boolean {\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\n }\n\n @computed get isEditorialMode(): boolean {\n return this.props.context.request.params.isEditor;\n }\n\n @computed get canPlaceOrder(): boolean {\n const isTermsAndConditionAccepted = this.props.data.checkout.result && this.props.data.checkout.result?.isTermsAndConditionAccepted;\n\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n const disableForOBO = Msdyn365.isOboRequest(this.props.context.request) && !this.isPaidOffByCustomerAccount;\n\n // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\n return (\n this.props.moduleState.isReady &&\n (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted || shouldEnableSinglePaymentAuthorizationCheckout) &&\n (this.state.errorMessage === '' ||\n shouldEnableSinglePaymentAuthorizationCheckout ||\n (this.props.data.checkout.result?.isPaymentVerificationRedirection ?? false)) &&\n !(shouldEnableSinglePaymentAuthorizationCheckout && disableForOBO)\n );\n }\n\n @computed get isPaidOffByCustomerAccount(): boolean {\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\n\n return customerAccountAmount === amountDue;\n }\n\n @computed get isCartReady(): boolean {\n return (\n !!this.props.data.checkout.result?.checkoutCart?.cart &&\n this.props.data.customerInformation.status !== 'LOADING' &&\n this.props.data.featureState.status !== 'LOADING'\n );\n }\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\n const properties =\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\n property => property.Key === 'expressPaymentDetails'\n )?.Value?.StringValue ?? '';\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\n }\n\n public state: ICheckoutState = {\n errorMessage: '',\n isValidationPassed: false,\n isPlaceOrderLoading: false,\n isPlaceOrderClicked: false\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public componentDidMount(): void {\n const {\n resources: { genericErrorMessage }\n } = this.props;\n\n when(\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\n async () => {\n if (this.expressPaymentDetailsFromCartPage) {\n const {\n email,\n tenderLine,\n tokenizedPaymentCard,\n paymentTenderType: paymentTenderTypeFromCartPage,\n isExpressCheckoutAppliedInCartPage,\n isExpressAddressAppliedInCartPage,\n cardPaymentAcceptResult,\n address\n } = this.expressPaymentDetailsFromCartPage;\n\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\n newEmailAddressFromExpressCheckout: email ?? '',\n newTenderLine: tenderLine,\n newTokenizedPaymentCard: tokenizedPaymentCard,\n newPaymentTenderType: paymentTenderTypeFromCartPage,\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\n newCardPaymentAcceptResult: cardPaymentAcceptResult\n });\n\n if (isExpressAddressAppliedInCartPage && address) {\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\n newBillingAddressFromExpressCheckout: address\n });\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\n newShippingAddressFromExpressCheckout: address\n });\n } else {\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\n }\n\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\n newExtensionProperties: [\n {\n Key: 'expressPaymentDetails',\n Value: { StringValue: '' }\n }\n ]\n });\n }\n }\n );\n\n when(\n () => this.hasError,\n () => {\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.context.telemetry.error('Failed to get cart');\n }\n );\n\n when(\n () => {\n return this.isEmptyCart;\n },\n () => {\n this.redirectToCartPage('Cart is empty, but no editCartLink found');\n }\n );\n\n when(\n () => this.isCartReady,\n () => {\n this.validateForCheckout();\n }\n );\n\n reaction(\n () => this.props.moduleState.isReady,\n () => {\n this.onContainerReady();\n }\n );\n\n // Reaction to call place order when isPaymentSectionContainerReady is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerReady,\n async isReady => {\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n isReady &&\n !this.props.data.checkout.result?.redirectAdditionalContext &&\n (!this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.props.data.checkout.result?.isPaymentVerificationRedirection)\n ) {\n if (!this.state.isPlaceOrderLoading) {\n this.setState({ isPlaceOrderLoading: true });\n }\n\n this.props.telemetry.information(\n 'Call onPlaceOrder as reaction when isPaymentSectionContainerReady is updated for single auth payment.'\n );\n\n await this.onPlaceOrder();\n\n // If 3D authentication redirection, don't update isPlaceOrderLoading\n if (!this.props.data.checkout.result.isPaymentVerificationRequired) {\n this.setState({ isPlaceOrderLoading: false });\n }\n }\n }\n );\n\n // Reaction to enable place order button when isPaymentSectionContainerHasError is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isPaymentSectionContainerHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isPaymentSectionContainerHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isBillingAddressHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.data.checkout.result?.updateIsBillingAddressHasError({ newIsBillingAddressHasError: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isBillingAddressHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isBillingAddressHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n // Reaction to enable place order button when redirection is true for new checkout flow.\n reaction(\n () => this.canPlaceOrder,\n async () => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && this.canPlaceOrder) {\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\n newIsPlaceOrderEnabledInRedirection: true\n });\n\n this.props.telemetry.information(\n 'Set isPaymentVerificationRedirection to true as reaction when canPlaceOrder is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when canPlaceOrder is updated to true but isPaymentVerificationRedirection is false for single auth payment.'\n );\n this.props.telemetry.information(\n `isOBORequest is ${Msdyn365.isOboRequest(this.props.context.request)} and canPlaceOrder is ${\n this.canPlaceOrder\n }.`\n );\n }\n } else {\n this.props.telemetry.information('No reaction when canPlaceOrder is updated to false or not single auth payment.');\n }\n }\n );\n\n // Reaction to update the error message when there is a checkout error.\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\n const checkoutPaymentErrorLocation: boolean =\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\n : checkoutErrorLocation;\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n checkoutError &&\n checkoutError.errorMessage &&\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n }\n\n public componentDidUpdate(): void {\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\n this.state.errorMessage\n ) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n\n // eslint-disable-next-line complexity -- ignore the complexity.\n public render(): JSX.Element {\n const {\n moduleState,\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\n resources,\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const { errorMessage } = this.state;\n const { backToShopping, placeOrderText, confirmPaymentText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\n const checkoutClass = classnames('ms-checkout', className);\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\n\n // @ts-expect-error - check the key of slot\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\n\n // @ts-expect-error - check the key of slot\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\n\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n const isMobile =\n this.props.context.request &&\n this.props.context.request.device &&\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\n\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n\n const termsAndConditions =\n this.props.slots.termsAndConditions && this.props.slots.termsAndConditions.length > 0 && this.props.slots.termsAndConditions[0];\n\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout?.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isExpressCheckoutApplied = this.props.data.checkout?.result?.isExpressCheckoutApplied ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasCartDeliveryMode = this.props.data.checkout?.result?.hasCartDeliveryMode;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasGuestCheckoutEmail = this.props.data.checkout?.result?.hasGuestCheckoutEmail;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isTermsAndConditionAccepted = this.props.data.checkout?.result?.isTermsAndConditionAccepted;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isPaymentVerificationRedirection = this.props.data.checkout?.result?.isPaymentVerificationRedirection ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldEnableCheckoutErrorDisplayMessaging =\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\n\n let hasExpressPaymentContainer = false;\n\n if (\n typeof window !== 'undefined' &&\n (document?.getElementsByClassName(expressPaymentSectionClassName) as HTMLCollectionOf)[0]?.style.display === ''\n ) {\n hasExpressPaymentContainer = true;\n }\n\n let viewProps: ICheckoutViewProps = {\n ...this.props,\n className: checkoutClass,\n checkoutErrorRef: this.checkoutErrorRef,\n isEmptyCart: this.isEmptyCart,\n isConsentGiven,\n hasError: this.hasError,\n isPaymentVerificationRedirection: this.props.data.checkout?.result?.isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n hasSalesOrder:\n this.props.data.checkout &&\n this.props.data.checkout.result !== undefined &&\n this.props.data.checkout.result.salesOrder !== undefined,\n hasInvoiceLine,\n cartStatus: this.cartStatus,\n isMobile,\n backToShoppingUrl,\n editCartLink,\n isEditorialMode: this.isEditorialMode,\n orderConfirmation:\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\n ? this.props.slots.orderConfirmation[0]\n : undefined,\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\n headerProps: { className: 'ms-checkout__head' },\n bodyProps: { className: 'ms-checkout__body' },\n mainProps: { className: 'ms-checkout__main' },\n mainControlProps: { className: 'ms-checkout__main-control' },\n sideProps: { className: hasExpressPaymentContainer ? 'ms-checkout__has-express-side' : 'ms-checkout__side' },\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading),\n checkoutExpressPaymentContainer\n };\n\n if (!isConsentGiven && isAuthenticated) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else if (this.isLoading()) {\n viewProps = {\n ...viewProps,\n loading: \n };\n } else if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else {\n viewProps = {\n ...viewProps,\n alert: errorMessage && ,\n canShow: true,\n guidedForm: checkoutInformation ? (\n \n ) : (\n undefined\n ),\n orderSummary: getOrderSummary(this.props),\n invoicePaymentSummary: getInvoicePaymentSummary(this.props),\n lineItems: hasInvoiceLine ? undefined : getLineItems(this.props, this.telemetryContent),\n placeOrderButton: (\n \n ),\n termsAndConditions,\n keepShoppingButton: backToShoppingUrl && (\n \n {backToShopping}\n \n )\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\n if (isLoading) {\n return AsyncResultStatusCode.LOADING;\n }\n\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\n if (isSuccess) {\n return AsyncResultStatusCode.SUCCESS;\n }\n\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\n if (isFailed) {\n return AsyncResultStatusCode.FAILED;\n }\n\n return undefined;\n }\n\n /**\n * Renders heading.\n * @param checkoutHeading - The checkout heading.\n * @returns React node.\n */\n public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\n return (\n \n );\n }\n\n /**\n * Event handler for heading change event.\n * @param event - The content change event in heading element.\n * @returns The new heading value.\n */\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.checkoutHeading!.text = event.target.value);\n\n /**\n * Checks if cart is loading.\n * @returns True if is loading, false otherwise.\n */\n private readonly isLoading = (): boolean => {\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\n };\n\n /**\n * Get slot items.\n * @param key - The slot key.\n * @returns React node or undefined.\n */\n private readonly getSlotItems = (key: string): React.ReactNode[] | undefined => {\n const { slots } = this.props;\n return slots && slots[key] && slots[key].length > 0 ? slots[key] : undefined;\n };\n\n /**\n * Trigger the payment section container submit when placing order.\n */\n private readonly triggerPaymentWithPlaceOrder = async (): Promise => {\n this.setState({ isPlaceOrderLoading: true });\n\n await this.props.data.checkout.result?.updateShouldTriggerPaymentWithPlaceOrder({\n newShouldTriggerPaymentWithPlaceOrder: !this.props.data.checkout.result.shouldTriggerPaymentWithPlaceOrder\n });\n };\n\n /**\n * On place order.\n * @returns Void promise.\n */\n private readonly onPlaceOrder = async (): Promise => {\n const {\n resources: { checkoutOutOfStockErrorMessage },\n context: {\n actionContext,\n app: {\n config: { enableStockCheck = false }\n }\n },\n slots: { orderConfirmation },\n data: { checkout, products }\n } = this.props;\n\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\n this.setState({ isPlaceOrderClicked: true });\n\n // If hasInvoiceLine is true, no inventory check\n if (\n !this.props.data.checkout.result?.checkoutCart.hasInvoiceLine &&\n enableStockCheck &&\n (await this.isOverMaxQuantity((await checkout).checkoutCart.cart, await products))\n ) {\n this.setState({\n errorMessage: checkoutOutOfStockErrorMessage\n });\n this.props.context.telemetry.error(checkoutOutOfStockErrorMessage);\n } else {\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\n\n const updatedCartVersion = await this.updateCartLineEmailAddress(this.props.data.checkout.result?.guestCheckoutEmail || '');\n\n await placeOrder(\n actionContext,\n this.props.data.checkout.result,\n this.props.data.products.result,\n !hasOrderConfirmation,\n updatedCartVersion,\n this.props.data.checkout.result?.isPaymentVerificationRedirection\n ).catch(error => {\n this.handleCheckoutError(error);\n });\n\n await checkout.result?.updateIsPaymentSectionContainerReady({ newIsPaymentSectionContainerReady: false });\n }\n };\n\n /**\n * Update receipt email address for electronic cart line.\n * @param newGuestCheckoutEmail - The guest checkout email.\n * @returns The updated cart version.\n */\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n const emailDeliveryCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\n );\n\n let updatedCartVersion: number | undefined;\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\n return {\n LineId: line.LineId,\n DeliverySpecification: {\n DeliveryModeId: emailDeliveryModeCode,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail\n }\n };\n });\n\n await updateLineDeliverySpecificationsAsync(\n { callerContext: this.props.context.actionContext },\n (await this.props.data.checkout).checkoutCart.cart.Id,\n lineDeliverySpecifications\n )\n .then(updatedCart => {\n updatedCartVersion = updatedCart.Version;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\n });\n }\n\n return updatedCartVersion;\n };\n\n /**\n * Return true if any product in the cart is over its max quantity.\n * @param cart -- The checkout cart.\n * @param products -- The checkout products.\n * @returns - Is any product in the cart is over max quantity.\n */\n private readonly isOverMaxQuantity = async (cart: Cart, products: SimpleProduct[]): Promise => {\n let isOverMaxQuantity = false;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n await getAvailabilitiesForCartLineItems(\n new ProductAvailabilitiesForCartLineItems(this.props.context.actionContext.requestContext.apiSettings),\n this.props.context.actionContext\n )\n .then(productInventoryInformation => {\n const productsThatShouldValidateInventory: IProductInventoryInformation[] = [];\n\n cart.CartLines?.map(cartline => {\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\n\n // If product is non-stocked or cartline is electronic delivery, then no inventory check\n const isStockedItem = cartlineProduct?.Behavior?.IsStockedProduct;\n const isEmailDelivery =\n cartline.DeliveryMode && cartline.DeliveryMode !== '' ? cartline.DeliveryMode === emailDeliveryModeCode : false;\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\n if (!shouldSkipInventoryCheck && ArrayExtensions.hasElements(productInventoryInformation)) {\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n if (foundProductAvailability) {\n productsThatShouldValidateInventory.push(foundProductAvailability);\n }\n }\n });\n\n const cartLinesInventoryValidation = validateCartLinesInventory(\n cart.CartLines ?? [],\n productsThatShouldValidateInventory,\n this.props.context.actionContext,\n products,\n emailDeliveryModeCode\n );\n\n // If is invalid then exceeds the available quantity\n isOverMaxQuantity = !cartLinesInventoryValidation.isValid;\n return isOverMaxQuantity;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[getAvailabilitiesForCartLineItems] Unable to get availabilities for products in checkout cart');\n });\n\n return isOverMaxQuantity;\n };\n\n /**\n * Gets active child in module state.\n * @returns - The module state manager collection.\n */\n private readonly getActiveChildModuleStates = (): IModuleStateManager[] => {\n const { childIds, getModule } = this.props.moduleState;\n return childIds\n .map(getModule)\n .filter((state): state is IModuleStateManager => !!state && !state.isDisabled && state.hasModuleState);\n };\n\n /**\n * On container ready.\n */\n private readonly onContainerReady = (): void => {\n this.props.telemetry.information('Checkout onContainerReady is called.');\n\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\n\n /**\n * Redirects to cart page.\n * @param notFoundEditCartLinkMessage - Not found edit cart link message.\n */\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n if (window && editCartLink) {\n window.location.assign(editCartLink);\n } else {\n this.setState({\n errorMessage: this.props.resources.genericErrorMessage\n });\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\n }\n };\n\n /**\n * Validates for checkout.\n * @param retry - Retry flag.\n */\n private readonly validateForCheckout = (retry: boolean = true): void => {\n const notFoundEditCartLinkMessage = \"Cart doesn't pass validation, but no editCartLink found\";\n const cart = this.props.data.checkout.result!.checkoutCart.cart;\n const { Id, Version } = cart;\n if (this._shouldValidateQuantityLimits()) {\n if (Version && Id) {\n validateForCheckoutAsync({ callerContext: this.props.context.actionContext, bypassCache: 'none' }, Id, Version)\n .then((result: CartLineValidationResults) => {\n if (result.ValidationFailuresByCartLines?.length !== 0) {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n } else {\n this.setState({ isValidationPassed: true });\n }\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n if (retry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n const cartState = this.props.data.checkout.result?.checkoutCart;\n cartState\n ?.refreshCart({})\n .then(() => {\n this.validateForCheckout(false);\n })\n .catch((refreshError: Error) => {\n this.props.telemetry.warning(refreshError.message);\n this.props.telemetry.debug('Unable to refresh Cart');\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n } else {\n this.setState({ isValidationPassed: true });\n }\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _shouldValidateQuantityLimits = (): boolean => {\n const featureStatuses = this.props.data.featureState.result;\n const isECommerceQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n\n if (isECommerceQuantityLimitsFeatureEnabledInHq) {\n return true;\n }\n\n const isOrderQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')\n ?.IsEnabled || false;\n\n if (!isOrderQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n const customerInfo = this.props.data.customerInformation.result;\n const isB2BSite = isChannelTypeB2B(this.props.context.actionContext.requestContext);\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n (customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && isB2BSite) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !isB2BSite)));\n\n return isOrderQuantityLimitsFeatureEnabledInSiteSettings ?? false;\n } else {\n const cartConfiguration = this.props.data.cartConfiguration?.result;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n };\n\n /**\n * Save the address as Shipping and Billing address.\n * @param tokenizedPaymentCard - Tokenized payment card.\n */\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\n const checkoutState = this.props.data.checkout.result;\n\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\n\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\n }\n };\n\n /**\n * Get address from tokenizedPaymentCard.\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\n * @returns The address.\n */\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\n const address: Address = {\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\n Name: tokenizedPaymentCard.NameOnCard,\n Street: tokenizedPaymentCard.Address1,\n StreetNumber: tokenizedPaymentCard.Address2,\n City: tokenizedPaymentCard.City,\n State: tokenizedPaymentCard.State,\n ZipCode: tokenizedPaymentCard.Zip,\n Phone: tokenizedPaymentCard.Phone\n };\n\n return address;\n };\n\n /**\n * Handle checkout errors.\n * @param error -- The error on checkout api failure.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly handleCheckoutError = (error: any) => {\n // Here checkout failure message will be shown if there is any error in checkout api except data validation.\n const {\n resources: {\n genericErrorMessage,\n invalidCartVersionErrorMessage,\n missingRequiredCartTenderLinesErrorMessage,\n checkoutApiFailureErrorMessage\n },\n context: { actionContext }\n } = this.props;\n const checkoutResult = this.props.data.checkout.result;\n const apiError = error && error.message;\n if (error?.statusCode === 500) {\n const errorMessage = checkoutApiFailureErrorMessage;\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n this.setState({ isPlaceOrderLoading: false });\n return;\n }\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\n const errorCode = error && error.name ? error.name : '';\n // apiError message will be used if errorcode resource/enums is unavailable\n setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\n } else {\n let errorMessage = genericErrorMessage;\n this.setState({ isPlaceOrderClicked: false });\n\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n errorMessage = invalidCartVersionErrorMessage;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\n // If api error is not available show generic message\n errorMessage = apiError || genericErrorMessage;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n error.data?.AdditionalContext &&\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\n ) {\n return;\n }\n\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n }\n };\n}\n\nexport default Checkout;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutViewProps,\n ILineItem,\n ILineItemDeliveryGroup,\n ILineItems,\n IOrderSummary,\n IPickUpAtStore,\n IEmailDelivery,\n IInvoicePaymentSummary\n} from './index';\n\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\n\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {pickUpAtStore && }\n {emailDelivery && }\n \n);\n\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\n \n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC = ({\n LineItemDeliveryGroup,\n LineItemList,\n heading,\n lineItems,\n lineItemWraper,\n lineItemWraperIcon\n}) => (\n \n {lineItemWraperIcon}\n {lineItemWraper}\n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {emailDelivery && }\n \n);\n\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const LineItemsComponent: React.FC = ({\n LineItems,\n Header,\n heading,\n editLink,\n itemsForPickup,\n itemsForShip,\n itemsForEmail,\n itemsGroupWithMulitplePickupMode\n}) => (\n \n \n {heading}\n {editLink}\n \n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\n {itemsGroupWithMulitplePickupMode !== undefined\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\n return ;\n })\n : null}\n \n);\n\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.subtotal}\n {lines.shipping}\n {lines.otherCharge}\n {lines.tax}\n {lines.totalDiscounts}\n {lines.loyalty}\n {lines.customerAccount}\n {lines.giftCard}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.invoices}\n {lines.giftCard}\n {lines.loyalty}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst CheckoutView: React.FC = props => {\n const {\n isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n canShow,\n checkoutProps,\n headerProps,\n hasSalesOrder,\n hasInvoiceLine,\n bodyProps,\n mainProps,\n mainControlProps,\n sideProps,\n sideControlFirstProps,\n sideControlSecondProps,\n termsAndConditionsProps,\n orderConfirmation,\n loading,\n alert,\n title,\n guidedForm,\n orderSummary,\n invoicePaymentSummary,\n lineItems,\n placeOrderButton,\n termsAndConditions,\n keepShoppingButton,\n checkoutExpressPaymentContainer,\n checkoutErrorRef\n } = props;\n\n return (\n \n {!hasSalesOrder && !checkoutExpressPaymentContainer && {title}}\n {!hasSalesOrder && isPaymentVerificationRedirection && shouldEnableSinglePaymentAuthorizationCheckout && !alert && !loading && (\n \n )}\n {!hasSalesOrder && (\n \n {loading}\n {alert}\n {canShow && (\n <>\n \n {checkoutExpressPaymentContainer}\n {checkoutExpressPaymentContainer && {title}}\n {guidedForm}\n {termsAndConditions}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n {!hasInvoiceLine\n ? orderSummary && \n : invoicePaymentSummary && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n {lineItems && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n )}\n \n )}\n {hasSalesOrder && orderConfirmation}\n \n );\n};\n\nexport default CheckoutView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IAlertProps {\n message: string;\n}\n\nconst CheckoutAlert: React.FC = ({ message }) => (\n

\n {message}\n

\n);\n\nexport default CheckoutAlert;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IInvoicePaymentSummary {\n heading?: React.ReactNode;\n lines?: IInvoiceSummaryLines;\n}\nexport const getInvoicePaymentSummary = (input: ICheckoutProps): IInvoicePaymentSummary => {\n const {\n data: { checkout },\n resources: { totalAmountLabel, invoiceLabel, invoiceSummaryTitle },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutCart = get(checkout, 'result.checkoutCart');\n const cart = get(checkout, 'result.checkoutCart.cart');\n\n return {\n heading:

{invoiceSummaryTitle}

,\n lines: checkoutCart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: totalAmountLabel,\n invoiceLabel,\n cart,\n context,\n typeName,\n telemetry,\n id,\n checkoutState: checkout.result\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\ntype deliveryType = 'pickup' | 'ship' | 'email';\n\nexport interface IPickUpAtStore {\n PickUpAtStore: INodeProps;\n label: React.ReactNode;\n location: React.ReactNode;\n}\n\nexport interface IEmailDelivery {\n EmailDelivery: INodeProps;\n label: React.ReactNode;\n}\n\nexport interface ILineItem {\n LineId: string;\n LineItem: INodeProps;\n item?: React.ReactNode;\n pickUpAtStore?: IPickUpAtStore;\n emailDelivery?: IEmailDelivery;\n}\n\nexport interface ILineItemDeliveryGroup {\n LineItemDeliveryGroup: INodeProps;\n LineItemList: INodeProps;\n heading: React.ReactNode;\n lineItemWraper?: React.ReactNode;\n lineItemWraperIcon?: React.ReactNode;\n lineItems: ILineItem[];\n}\n\nexport interface ILineItems {\n LineItems: INodeProps;\n Header: INodeProps;\n heading: React.ReactNode;\n editLink: React.ReactNode;\n itemsForPickup?: ILineItemDeliveryGroup;\n itemsForShip?: ILineItemDeliveryGroup;\n itemsForEmail?: ILineItemDeliveryGroup;\n itemsGroupWithMulitplePickupMode?: ILineItemDeliveryGroup[];\n}\n\nexport const getLineItems = (input: ICheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n const emailDeliveryModeCode = get(input, 'context.request.channel.EmailDeliveryModeCode');\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const _getDeliveryLocation = (cartLine: CartLine): string => {\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\n return '';\n }\n\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\n });\n\n return locationMatch && locationMatch.OrgUnitName;\n };\n\n const _getProduct = (productId: number): SimpleProduct | undefined => {\n const products = get(input, 'data.products.result') || [];\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n };\n\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\n const {\n id,\n typeName,\n context,\n config: { imageSettings, showShippingChargesForLineItems },\n resources: {\n quantityDisplayString,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n productDimensionTypeAmount,\n configString,\n inputQuantityAriaLabel,\n discountStringText,\n shippingCharges\n },\n context: {\n request: { gridSettings }\n }\n } = input;\n const catalogs = input.data.catalogs?.result;\n if (!product) {\n return;\n }\n\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n const currencyCode = get(input, 'context.request.channel.Currency');\n return (\n \n );\n };\n\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\n const {\n resources: { pickUpAtStoreWithLocationText }\n } = input;\n\n return {\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\n label: {pickUpAtStoreWithLocationText},\n location:
{pickupDeliveryLocation}
\n };\n };\n\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\n const {\n resources: { emailDeliveryText }\n } = input;\n\n return {\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\n label: {emailDeliveryText}\n };\n };\n\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\n return items.map(cartLine => {\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const isPickUp = _getCartPickDeliveryMode(cartLine);\n const isEmailDelivery =\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n return {\n LineId: cartLine.LineId || '',\n LineItem: { className: 'ms-checkout__line-item' },\n item: _getLineItemComponent(cartLine),\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined,\n emailDelivery: isEmailDelivery ? _getEmailDeliveryComponents() : undefined\n };\n });\n };\n\n const _getCartPickDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode ===\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode === pickupDeliveryModeCode\n : false;\n };\n\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode !==\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode !== pickupDeliveryModeCode\n : false;\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? shippingCountCheckoutLineItem\n : type === 'pickup'\n ? inStorePickUpLabel\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _countItems = (items: CartLine[]): number => {\n return items.reduce((count, item) => {\n return count + (item.Quantity || 0);\n }, 0);\n };\n\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n if (type === 'ship') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? _getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n } else if (type === 'pickup') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? _getCartPickDeliveryMode(cartLine) : null\n );\n }\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\n };\n\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\n if ((pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) && (type === 'pickup' || type === 'email')) {\n return;\n }\n\n const items = _filterItemsByDiliveryType(type);\n\n if (items.length === 0) {\n return undefined;\n }\n\n const count = _countItems(items);\n const title = _getGroupTitleComponent(count, type);\n\n return {\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n heading:
{title}
,\n lineItems: _getLineItemsComponents(items)\n };\n };\n\n const _getLineItems = (): ILineItems | undefined => {\n const {\n context,\n config: { lineItemsHeading },\n data: { products },\n resources: { editCartText }\n } = input;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.EditCart);\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const groupClass = retailMultiplePickUpOptionEnabled ? ' multiple-pickup-enabled' : '';\n if (!cart || !cart.CartLines || cart.CartLines.length === 0 || !products) {\n return undefined;\n }\n\n return {\n LineItems: { className: `ms-checkout__line-items${groupClass}` },\n Header: { className: 'ms-checkout__line-items-header' },\n heading: lineItemsHeading && lineItemsHeading.text && (\n \n ),\n editLink: (\n \n {editCartText}\n \n ),\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\n itemsForShip: _getLineItemsByDeliveryType('ship'),\n itemsForEmail: _getLineItemsByDeliveryType('email'),\n itemsGroupWithMulitplePickupMode: retailMultiplePickUpOptionEnabled\n ? _getLineItemsByDeliveryTypeWithMulitplePickupMode()\n : undefined\n };\n };\n\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { lineItemsHeading }\n } = input;\n if (lineItemsHeading) {\n lineItemsHeading.text = event.target.value;\n }\n };\n\n const _getGroupTitleComponentWithMultiplePickUp = (\n count: number,\n type: deliveryType,\n deliveryMode?: string,\n fulFillmentStoreId?: string\n ): string => {\n const {\n resources: { itemLabel, itemsLabel }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n let pickupDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n pickupDeliveryModeDesc = pickupDeliveryModeDesc\n ? pickupDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === deliveryMode)?.Description!;\n });\n\n const pickupTitle: string = `${pickupDeliveryModeDesc}, ${fulFillmentStoreId}`;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? `(${count} ${suffix})`\n : type === 'pickup'\n ? `${pickupTitle} (${count} ${suffix})`\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _filterItemsByMultiplePickupMode = (): CartLine[][] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cart.CartLines);\n const cartLinesGroup: CartLine[] = [];\n const cartLinesGrp: CartLine[][] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryMode, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryMode] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n cartLinesGrp.push(cartLine);\n });\n });\n\n return cartLinesGrp;\n };\n\n const _getLineItemsByDeliveryTypeWithMulitplePickupMode = (): ILineItemDeliveryGroup[] | undefined => {\n if (pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) {\n return;\n }\n\n const {\n resources: { multiplePickUpLabel, shippingLable }\n } = input;\n\n const items = _filterItemsByMultiplePickupMode();\n\n if (items.length === 0) {\n return undefined;\n }\n\n const lineItemDeliveryGroup: ILineItemDeliveryGroup[] = [];\n items.map(item => {\n const count = _countItems(item);\n const cartLine = item[0];\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const type: deliveryType =\n cartLine.FulfillmentStoreId && cartLine.DeliveryMode\n ? 'pickup'\n : cartLine.FulfillmentStoreId === '' &&\n cartLine.DeliveryMode === emailDeliveryModeCode &&\n !StringExtensions.isNullOrEmpty(emailDeliveryModeCode)\n ? 'email'\n : 'ship';\n const title = _getGroupTitleComponentWithMultiplePickUp(count, type, cartLine.DeliveryMode, pickupDeliveryLocation);\n const groupTitle = type === 'pickup' ? multiplePickUpLabel : type === 'ship' ? shippingLable : 'email';\n const iconClass = `ms-checkout__line-items-group-title-multiple-pickup-${type}icon`;\n lineItemDeliveryGroup.push({\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group multiple-pickup', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n lineItemWraperIcon:
,\n lineItemWraper:
{groupTitle}
,\n heading:
{title}
,\n lineItems: _getLineItemsComponents(item)\n });\n });\n\n return lineItemDeliveryGroup;\n };\n\n return _getLineItems();\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IOrderSummary {\n orderSummaryProps: INodeProps;\n heading?: React.ReactNode;\n lines?: IOrderSummaryLines;\n}\nexport const getOrderSummary = (input: ICheckoutProps): IOrderSummary => {\n const {\n config: { orderSummaryHeading },\n data: { checkout },\n resources: {\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n otherCharges,\n customerAccountLabel\n },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutState = get(checkout, 'result');\n const cart = get(checkout, 'result.checkoutCart.cart');\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\n const channelConfiguration = context.request.channel!;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = context.request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { orderSummaryHeading }\n } = input;\n if (orderSummaryHeading) {\n orderSummaryHeading.text = event.target.value;\n }\n };\n\n return {\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\n heading: orderSummaryHeading && orderSummaryHeading.text && (\n \n ),\n lines: showLineItems\n ? OrderSummary({\n checkoutState,\n cart,\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n context,\n typeName,\n id,\n channelConfiguration,\n telemetry,\n otherChargeLabel: otherCharges,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- existing property.\n isTaxIncludedInPrice: cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled,\n customerAccountLabel\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport * as React from 'react';\nimport { focusOnCheckoutError, setCheckoutErrorFocus } from '../../../checkout-errors';\n\nexport interface ICheckoutGuidedCardProps {\n id?: string;\n step: number;\n title?: HeadingType;\n disabled?: boolean; // Module is not available\n isActive?: boolean; // Step === currentStep\n isVisted?: boolean; // Step < currentStep\n isExpanded?: boolean;\n isReady?: boolean;\n isPending?: boolean;\n isUpdating?: boolean;\n isSubmitting?: boolean;\n isCancelAllowed?: boolean;\n isMobile?: boolean;\n hasInitialized?: boolean;\n hasControlGroup?: boolean;\n shouldFocus?: boolean;\n children: React.ReactNode;\n moduleState?: IModuleStateManager;\n actionContext?: IActionContext;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n telemetryContent?: ITelemetryContent;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n onNext(): void;\n}\n\n/**\n *\n * CheckoutGuidedCard component.\n * @extends {React.Component}\n */\nclass CheckoutGuidedCard extends React.PureComponent {\n private readonly editButtonRef: React.RefObject = React.createRef();\n\n private readonly formCardRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: ICheckoutGuidedCardProps) {\n super(props);\n this.payLoad = getPayloadObject('click', props.telemetryContent!, '');\n }\n\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\n /**\n * Move to next step when current step is ready.\n */\n const { isActive, isReady, onNext, isVisted, onEdit, shouldFocus, children, moduleState, actionContext } = this.props;\n\n // Move to next step after completing the current step\n if (isActive && isReady) {\n onNext();\n }\n\n // Set the focus to Edit button once edit button appear\n // (It happens when current step switch to isReady status)\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\n const canEdit = isReady && isVisted && !!onEdit;\n if (!prevCanEdit && canEdit) {\n this.focusOnEditButton();\n this.scrollToTitle();\n }\n\n // Set the focus to the first focusable element\n // (It happens when current step switch to isUpdating status)\n if (prevProps.isReady && !isReady) {\n this.focusOnFirstFocusableElement();\n }\n\n // Set the focus for the checkout error\n if (shouldFocus && actionContext) {\n const childrenModules = this._getModules(children);\n\n // Set the focus for the module within the checkout section container\n if (childrenModules.length > 0) {\n for (const childModule of childrenModules) {\n const childId = this._getId(childModule);\n const childState = moduleState?.getModule(childId);\n\n if (childState?.hasError) {\n setCheckoutErrorFocus(childId, actionContext);\n return;\n }\n }\n } else {\n focusOnCheckoutError(this.formCardRef, actionContext);\n }\n }\n }\n\n public render(): JSX.Element | null {\n const {\n title,\n disabled,\n isExpanded,\n isActive,\n isVisted,\n children,\n isReady,\n isPending,\n isUpdating,\n hasInitialized,\n hasControlGroup,\n onEdit,\n resource\n } = this.props;\n const { changeBtnLabel } = resource;\n\n this.payLoad.contentAction.etext = TelemetryConstant.CheckoutChange;\n const changeBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\n\n return (\n \n
\n {this.getTitle()}\n\n {canEdit && (\n \n {changeBtnLabel}\n \n )}\n
\n\n \n
{children}
\n\n {this.renderFooder()}\n
\n \n );\n }\n\n private readonly renderFooder = (): JSX.Element | null => {\n const { isVisted, isReady, isSubmitting, isCancelAllowed, hasControlGroup, onCancel, onSubmit, resource } = this.props;\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\n\n const canSubmit = !isReady && onSubmit;\n const canCancel = !isReady && isVisted && isCancelAllowed && onCancel;\n\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\n return null;\n }\n\n this.payLoad.contentAction.etext = isVisted ? TelemetryConstant.Save : TelemetryConstant.SaveContinue;\n const saveBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
\n {canSubmit && (\n \n {isVisted && isCancelAllowed ? saveBtnLabel : saveAndContinueBtnLabel}\n \n )}\n {canCancel && (\n \n {cancelBtnLabel}\n \n )}\n
\n );\n };\n\n private readonly focusOnFirstFocusableElement = (): void => {\n const node = this.formCardRef.current as HTMLElement;\n const focussableElements = `\n a:not([disabled]),\n button:not([disabled]),\n input[type=submit]:not([disabled]),\n input[type=checkbox]:not([disabled]),\n input[type=text]:not([disabled]),\n input[type=radio]:not([disabled]),\n input[type=password]:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\n `;\n\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\n child && child.focus && child.focus();\n };\n\n private readonly focusOnEditButton = (): void => {\n // Focus on edit button\n const editButton =\n this.editButtonRef &&\n this.editButtonRef.current &&\n this.editButtonRef.current.focus &&\n (this.editButtonRef.current as HTMLElement);\n editButton && editButton.focus();\n };\n\n private readonly scrollToTitle = (): void => {\n // Scroll window to the title of the step that was just completed only in mobile viewport\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\n formCard && formCard.scrollIntoView();\n };\n\n private readonly getTitle = (): JSX.Element => {\n const { step, title } = this.props;\n const { headingTag: Tag = 'h2', text = '' } = title || {};\n return (\n \n \n {step + 1}. {` `}\n \n {text && {text}}\n \n );\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _getModules = (item: React.ReactNode): any[] => {\n return get(item, 'props.modules.primary') || [];\n };\n\n private readonly _getId = (item: React.ReactNode): string => {\n return get(item, 'id') || '';\n };\n}\n\nexport default CheckoutGuidedCard;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport get from 'lodash/get';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport GuidedCard from './guided-card';\n\nexport interface ICheckoutGuidedFormProps {\n items: React.ReactNode[];\n moduleState: IModuleStateManager;\n disableGuidedCheckoutFlow?: boolean;\n isMobile?: boolean;\n isEditor?: boolean;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n requestContext?: ICoreContext;\n telemetryContent?: ITelemetryContent;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n hasError?: boolean;\n hasShippingAddress?: boolean | undefined;\n hasCartDeliveryMode?: boolean | undefined;\n hasGuestCheckoutEmail?: boolean | undefined;\n isTermsAndConditionAccepted?: boolean | undefined;\n shouldEnableCheckoutErrorDisplayMessaging?: boolean;\n shouldFocusOnCheckoutError?: boolean | undefined;\n}\n\ninterface ICheckoutGuidedFormState {\n currentStep: number;\n}\n\nconst paymentInstrumentModuleId = 'payment-instrument';\n\n/**\n *\n * CheckoutGuidedForm component.\n * @extends {React.Component}\n */\n@observer\nclass CheckoutGuidedForm extends React.PureComponent {\n @computed public get hasMissingInfo(): boolean {\n if (\n this.props.hasShippingAddress === false ||\n this.props.hasCartDeliveryMode === false ||\n this.props.hasGuestCheckoutEmail === false ||\n this.props.isTermsAndConditionAccepted === false\n ) {\n return true;\n }\n\n return false;\n }\n\n @computed public get hasOrderError(): boolean {\n for (const item of this.props.items) {\n const childId = this.getId(item);\n const state = this.props.moduleState.getModule(childId);\n\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n state.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (!isPaymentSectionContainer && !state.isDisabled && state.hasError) {\n return true;\n }\n }\n\n return false;\n }\n\n public state: ICheckoutGuidedFormState = {\n currentStep: 0\n };\n\n public componentDidMount(): void {\n /**\n * Append child modules.\n */\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\n this.props.moduleState.init({ childIds });\n }\n\n public render(): JSX.Element | null {\n const { moduleState, items, resource } = this.props;\n if (!items || !moduleState) {\n return null;\n }\n\n const shouldCollapseAfterRedirect =\n this.props.isPaymentVerificationRedirection &&\n this.props.shouldEnableSinglePaymentAuthorizationCheckout &&\n !this.props.hasError &&\n !this.hasMissingInfo &&\n !this.hasOrderError;\n\n let previousModuleHasError = false;\n const childModule = this._enableAfterModule();\n return (\n
\n {items.map((item: React.ReactNode) => {\n const childId = this.getId(item);\n const step = this.getStep(childId);\n const title = this.getHeading(item);\n const state = this.props.moduleState.getModule(childId);\n const {\n isReady,\n isPending,\n isUpdating,\n isDisabled,\n isCancelAllowed,\n onEdit,\n onCancel,\n onSubmit,\n hasModuleState,\n hasInitialized,\n hasError\n } = state || ({} as IModuleStateManager);\n\n let shouldFocus =\n !!this.props.shouldEnableCheckoutErrorDisplayMessaging &&\n !!this.props.shouldFocusOnCheckoutError &&\n !previousModuleHasError &&\n hasError;\n previousModuleHasError = previousModuleHasError || shouldFocus;\n\n return (\n \n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\n \n );\n })}\n
\n );\n }\n\n private readonly getEnabledModules = (): string[] => {\n const {\n moduleState: { childIds, getModule }\n } = this.props;\n return childIds.filter((childId: string) => {\n const state = getModule(childId);\n return !!state && !state.isDisabled;\n });\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _enableAfterModule = (): string => {\n const childIds: string[] = this.props.items.map((item: React.ReactNode) => get(item, 'props.id')).filter(Boolean);\n let id: string = '';\n for (let i = 0; i < childIds.length - 1; i++) {\n const childId = childIds[i];\n const nextChildId = childIds[i + 1];\n if (this._isPaymentSectionContainer(childId) && nextChildId) {\n id = nextChildId;\n }\n }\n return id;\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n const sectionState = this.props.moduleState.getModule(moduleId);\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n sectionState.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (isPaymentSectionContainer) {\n return true;\n }\n return false;\n };\n\n private readonly getStep = (id: string): number => {\n return this.getEnabledModules().indexOf(id);\n };\n\n private readonly getId = (item: React.ReactNode): string => {\n return get(item, 'props.id') || '';\n };\n\n private readonly getHeading = (item: React.ReactNode): Heading => {\n return get(item, 'props.config.heading') || '';\n };\n\n private readonly isExpanded = (step: number, moduleChildId: string, childId: string): boolean => {\n if (this.props.isEditor) {\n // Editorial mode: Expand all the drawers\n return true;\n }\n if (this.props.shouldEnableSinglePaymentAuthorizationCheckout && moduleChildId === childId) {\n return true;\n }\n return step > -1 && step <= this.state.currentStep;\n };\n\n private readonly isActive = (step: number): boolean => {\n return step === this.state.currentStep;\n };\n\n private readonly isVisted = (step: number): boolean => {\n return step > -1 && step < this.state.currentStep;\n };\n\n private readonly onNext = (): void => {\n this.setState({\n currentStep: this.state.currentStep + 1\n });\n };\n}\n\nexport default CheckoutGuidedForm;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\ninterface ICheckoutPlaceOrderButtonProps {\n canPlaceOrder: boolean;\n checkoutBtnText: string;\n telemetryContent?: ITelemetryContent;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n isPlaceOrderLoading?: boolean;\n isExpressCheckoutApplied?: boolean;\n isPaymentVerificationRedirection?: boolean;\n placeOrder(): Promise;\n}\n\nconst buttonsStates: React.Dispatch>[] = [];\n\n/**\n * On place order function.\n * @param isBusy -Check is busy.\n * @param canPlaceOrder -Check can place order.\n * @param placeOrder -Place order function.\n * @returns Set state of button.\n */\nconst onPlaceOrderHandler = (isBusy: boolean, canPlaceOrder: boolean, placeOrder: () => Promise) => async () => {\n if (isBusy || !canPlaceOrder) {\n return;\n }\n buttonsStates.map(buttonSetState => {\n buttonSetState(true);\n return true;\n });\n await placeOrder();\n};\n\nconst CheckoutPlaceOrderButton: React.FC = ({\n checkoutBtnText,\n canPlaceOrder,\n placeOrder,\n telemetryContent,\n shouldEnableSinglePaymentAuthorizationCheckout,\n isPlaceOrderLoading,\n isExpressCheckoutApplied,\n isPaymentVerificationRedirection\n}) => {\n const [isBusy, setIsBusy] = useState(false);\n buttonsStates.push(setIsBusy);\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\n return (\n \n {checkoutBtnText}\n \n );\n }\n\n return (\n \n {checkoutBtnText}\n \n );\n};\n\nexport default CheckoutPlaceOrderButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { CartCheckout } from '../../../common/checkout';\n\nexport const OPERATIONS = {\n PayCard: 201,\n PayGiftCertificate: 214,\n PayLoyalty: 207,\n PayCustomerAccount: 202\n};\n\nexport default async (\n ctx: IActionContext,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n): Promise => {\n return CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { PlaceOrder } from '../../../common/place-order';\n\nexport default async (\n ctx: IActionContext,\n checkoutState: ICheckoutState | undefined,\n orderedProducts: SimpleProduct[] | undefined,\n redirect: boolean,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n) => {\n return PlaceOrder(ctx, checkoutState, orderedProducts, redirect, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../gift-card-balance-check.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n resources: {\n balanceCheckButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On apply function.\n * @param onApplyGiftCard -On apply gift card.\n * @returns Apply gift card.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number function.\n * @param onEnterGiftCardNumber -On enter gift card number.\n * @returns On gift card enter pin function result.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On change pin function.\n * @param onEnterGiftCardPin -On enter gift card pin.\n * @returns On enter gift card pin function result.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On change exp function.\n * @param onEnterGiftCardExp -On enter gift card.\n * @returns On enter gift card function result.\n */\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n resources: {\n balanceCheckButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-gift-card-balance-check__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-gift-card-balance-check__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-gift-card-balance-check__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-gift-card-balance-check__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {balanceCheckButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { GiftCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: GiftCard;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-gift-card-balance-check__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {` `}({giftCardAvailableBalanceLabel}\n {` `}\n {balance})\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { getForm, IForm } from './components/get-form';\nimport { getItem, IItem } from './components/get-item';\nimport { IGiftCardBalanceCheckProps } from './gift-card-balance-check.props.autogenerated';\n\ninterface IGiftCardBalanceCheckState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n giftCard?: GiftCard;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface IGiftCardBalanceCheckModuleProps extends IGiftCardBalanceCheckProps<{}> {}\n\nexport interface IGiftCardBalanceCheckViewProps extends IGiftCardBalanceCheckProps<{}>, IGiftCardBalanceCheckState {\n className?: string;\n\n form: IForm;\n item?: IItem;\n\n giftCardBalanceCheckProps: IModuleProps;\n\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardPin: string): void;\n enterGiftCardExp?(giftCardExp: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * GiftCardBalanceCheck component.\n * @extends {React.Component}\n */\nexport class GiftCardBalanceCheck extends React.Component {\n public state: IGiftCardBalanceCheckState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n public shouldComponentUpdate(nextProps: IGiftCardBalanceCheckModuleProps, nextState: IGiftCardBalanceCheckState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this._isEnabled()) {\n this.props.context.telemetry.error('Gift card balance check is not supported, module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-gift-card-balance-check', className);\n\n const viewProps: IGiftCardBalanceCheckViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n giftCardBalanceCheckProps: { moduleProps: this.props, className: moduleClassName },\n\n enterGiftCardNumber: this._enterGiftCardNumber,\n enterGiftCardPin: this._enterGiftCardPin,\n enterGiftCardExp: this._enterGiftCardExp,\n applyGiftCard: this._applyGiftCard,\n\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n supportExternalGiftCard,\n additionalFields: showAdditionalFields,\n onEnterGiftCardNumber: this._enterGiftCardNumber,\n onEnterGiftCardPin: this._enterGiftCardPin,\n onEnterGiftCardExp: this._enterGiftCardExp,\n onApplyGiftCard: this._applyGiftCard\n }),\n item:\n this.state.giftCard &&\n getItem({\n giftCard: this.state.giftCard,\n getFormattedPrice: this._getFormattedPrice,\n resources\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return true;\n };\n\n private readonly _getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly _enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this._clearError();\n };\n\n private readonly _clearError = (): void => {\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly _setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.setState({\n errorMessage\n });\n };\n\n private readonly _applyGiftCard = async (): Promise => {\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this._getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this._getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (giftCard) {\n this._clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false,\n giftCard\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false,\n giftCard: undefined\n });\n };\n\n private readonly _findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly _getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { invalidCardTypeError, noBalanceError, invalidCardInfoError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (!this.props.context.request.user.isAuthenticated && internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n\n if (isPinRequired && giftCardPin === '') {\n this._setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this._setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this._setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this._setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly _getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, invalidCodeError }\n } = this.props;\n\n if (!giftCardNumber) {\n this._setError(emptyInputError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this._setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this._setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default GiftCardBalanceCheck;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IForm, IItem, IGiftCardBalanceCheckViewProps } from './index';\n\nexport const Form: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const Item: React.FC = ({ itemProps, selectedGiftCard }) => {selectedGiftCard};\n\nconst GiftCardBalanceCheckView: React.FC = props => {\n const { giftCardBalanceCheckProps, form, item } = props;\n return (\n \n {form &&
}\n {item && }\n \n );\n};\n\nexport default GiftCardBalanceCheckView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLinePriceEditor, ICartLinePriceEditorResources, PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\n/**\n * ICartlineResourceString: Interface for specifying the\n * resource strings that the component needs.\n */\nexport interface ICartlineResourceString {\n /**\n * Display string for discount label\n */\n discountStringText: string;\n\n /**\n * String for size key\n */\n sizeString: string;\n\n /**\n * String for color key\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension\n */\n configString: string;\n\n /**\n * String for style key\n */\n styleString: string;\n\n /**\n * String for amount key\n */\n amountString?: string;\n\n /**\n * Display string for quantity label\n */\n quantityDisplayString: string;\n\n /**\n * Display string for quantity label\n */\n inputQuantityAriaLabel: string;\n\n /**\n * Aria label for the decrement button in quantity component\n */\n decrementButtonAriaLabel: string;\n\n /**\n * Aria label for the increment button in quantity component\n */\n incrementButtonAriaLabel: string;\n\n /**\n * Original text screenreader\n */\n originalPriceText: string;\n\n /**\n * Current text screenreader\n */\n currentPriceText: string;\n\n /**\n * Shipping Charges Text\n */\n shippingChargesText: string;\n\n priceEditorResources?: ICartLinePriceEditorResources;\n salesAgreementPricePrompt?: string;\n}\n\ninterface ICartLineData {\n cartLine: CartLine | SalesLine;\n cartState?: ICartState;\n product?: SimpleProduct;\n catalogs?: ProductCatalog[];\n}\n\n/**\n * ICartLineProps: The props required to render cartLineitem.\n */\nexport interface ICartLineProps extends IComponentProps {\n /**\n * The flag to change the quantity component from intractable to static.\n */\n disableQuantityInteractivity?: boolean;\n\n /**\n * The primary image url.\n */\n primaryImageUrl?: string;\n\n /**\n * The product url.\n */\n productUrl?: string;\n\n /**\n * GridSettings for the product image in cartLine.\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartLine.\n */\n imageSettings: IImageSettings;\n\n /**\n * Boolean flag to indicate if the item is out of stock.\n */\n isOutOfStock?: boolean;\n\n /**\n * Flag to make quantity section editable.\n */\n isQuantityEditable?: boolean;\n\n /**\n * Max quantity for line item.\n */\n maxQuantity?: number;\n\n /**\n * Current quantity for line item.\n */\n currentQuantity?: number;\n\n /**\n * Resource string for the component.\n */\n resources: ICartlineResourceString;\n\n /**\n * SalesLine flag.\n */\n isSalesLine?: boolean;\n\n /**\n * Error message to show in place of quantity.\n */\n errorMessage?: string;\n\n /**\n * Inventory information label.\n */\n inventoryInformationLabel?: string;\n\n /**\n * Inventory information class name.\n */\n inventoryLabelClassName?: string;\n\n /**\n * Flag to show/hide shipping charges for line items.\n */\n showShippingChargesForLineItems?: boolean;\n\n /**\n * Boolean flag to indicate if cart state status is ready.\n */\n isCartStateReady?: boolean;\n\n /**\n * Chanel Delivery Option configuration is from api.\n */\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n\n /**\n * The cart line index.\n */\n lineIndex?: number;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): boolean;\n priceCurrency?: string;\n}\n\ninterface IDimensionStrings {\n /**\n * String for size key.\n */\n sizeString: string;\n\n /**\n * String for color key.\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension.\n */\n configString: string;\n\n /**\n * String for style key.\n */\n styleString: string;\n\n /**\n * String for amount key.\n */\n amountString?: string;\n}\n\n/**\n * Renders catalog label for the cart line.\n * @param props - Cart line props.\n * @returns Catalog label.\n */\nconst CatalogLabelComponent: React.FC = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\n return null;\n }\n\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
{catalog.Name}
;\n};\n\nconst CartLineItemFunctions = {\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\n if (!Product || !Product.Dimensions) {\n return [];\n }\n\n return Product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === 1) {\n return (\n
\n \n {DimensionStrings.colorString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 2) {\n return (\n
\n \n {DimensionStrings.configString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 3) {\n return (\n
\n \n {DimensionStrings.sizeString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n\n if (productDimension.DimensionTypeValue === 4) {\n return (\n
\n \n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
\n );\n }\n return null;\n });\n },\n\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\n return null;\n }\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n
\n \n {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n \n {` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}\n
\n );\n });\n },\n renderInventoryLabel: (props: ICartLineProps) => {\n if (!props.inventoryInformationLabel) {\n return null;\n }\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n return {props.inventoryInformationLabel};\n },\n\n /**\n * Gets the react node for product unit of measure display.\n * @param props - Icartline props.\n * @returns The node representing markup for unit of measure component.\n */\n renderUnitOfMeasure: (props: ICartLineProps) => {\n if (props.data.cartLine.IsInvoiceLine) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\n return undefined;\n }\n\n const product = props.data.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n
\n {product.DefaultUnitOfMeasure}\n
\n );\n },\n renderShippingLabel: (props: ICartLineProps) => {\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\n const cartline = props.data.cartLine;\n let hasShippingMethod = false;\n if (channelDeliveryOptionConfig !== undefined) {\n hasShippingMethod = !!(\n cartline.DeliveryMode &&\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\n );\n } else {\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\n }\n if (!hasShippingMethod) {\n return undefined;\n }\n\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\n\n if (shippingChargeLines.length === 0) {\n return undefined;\n }\n\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\n }, 0);\n\n const priceComponent = (\n \n );\n return (\n <>\n \n {priceComponent}\n \n );\n },\n renderOtherCharges: (props: ICartLineProps) => {\n const cartline = props.data.cartLine;\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\n\n return (\n (otherCharges &&\n otherCharges.map((otherCharge, key) => {\n return otherCharge && otherCharge.CalculatedAmount ? (\n
\n \n \n \n \n
\n ) : (\n ''\n );\n })) ||\n undefined\n );\n },\n\n /**\n * Render the sales agreement prompt.\n * @param props - The ICartLineProps.\n * @returns The JSX.Element.\n */\n renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return
{props.resources.salesAgreementPricePrompt}
;\n }\n};\n\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC = (props: ICartLineProps) => {\n const { isSalesLine, productUrl, resources } = props;\n const { product, cartLine } = props.data;\n\n const destructDimensionStrings = {\n sizeString: resources.sizeString,\n colorString: resources.colorString,\n styleString: resources.styleString,\n configString: resources.configString,\n amountString: resources.amountString\n };\n\n const fallbackImageUrl =\n product &&\n getFallbackImageUrl(\n product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\n const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const productName = product?.Name || cartLine.Description;\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\n\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\n }\n return true;\n };\n\n const _generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n
\n \n {props.errorMessage}\n
\n );\n }\n\n return null;\n };\n\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\n const nodes = [];\n if (props.isOutOfStock) {\n return null;\n }\n\n // No quantity selector for invoice line\n if (!props.data.cartLine.IsInvoiceLine) {\n if (props.data.product && props.isQuantityEditable) {\n nodes.push(\n
\n
{resources.quantityDisplayString}
\n \n
\n );\n } else {\n nodes.push(\n
\n \n {props.data.cartLine.Quantity}\n
\n );\n }\n }\n\n nodes.push(\n
\n \n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\n <>\n \n {` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n )) ||\n null}\n
\n );\n\n return nodes;\n };\n\n return (\n <>\n
\n
\n \n
\n
\n
\n \n {MsDyn365.isBrowser ? (\n \n {productName}\n \n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n
{productDimensions}
\n ) : (\n ''\n )}\n {renderUnitOfMeasure}\n
\n \n
\n {renderDisountLines}\n {renderInventoryLabel}\n {props.showShippingChargesForLineItems &&
{renderShippingLabel}
}\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n
\n {_generateQuantityandPrice()}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n \n )}\n
\n
\n {_generateErrorMessage()}\n \n );\n};\n\nexport default CartLine;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPromoCodeProps extends IComponentProps<{}> {\n cart: ICartState | undefined;\n promoCodeHeadingText: string;\n appliedPromoCodeHeadingText: string;\n removePromoAriaLabelFormat: string;\n promoPlaceholderText: string;\n promoCodeApplyButtonText: string;\n collapseTimeOut: number;\n removePromoText: string;\n invalidPromoCodeErrorText: string;\n failedToAddPromoCodeErrorText: string;\n duplicatePromoCodeErrorText: string;\n failedToRemovePromoCodeErrorText: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n promoCodeApplyCallback?(): void;\n}\n\ninterface IPromoCodeState {\n isCollapseOpen: boolean;\n promoCodeInputValue: string;\n error: string;\n canApply: boolean;\n}\n\n/**\n *\n * The PromoCode component renders the promocode section.\n * @extends {React.PureComponent}\n */\nclass PromoCode extends React.Component {\n private readonly payLoad: IPayLoad;\n\n constructor(props: IPromoCodeProps, state: IPromoCodeState) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, TelemetryConstant.ApplyPromoCode);\n this.state = {\n isCollapseOpen: false,\n promoCodeInputValue: '',\n error: '',\n canApply: false\n };\n }\n\n public shouldComponentUpdate(nextProps: IPromoCodeProps, nextState: IPromoCodeState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n return (\n
\n
{this.props.promoCodeHeadingText}
\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\n

\n {this.state.error}\n

\n {this._renderAppliedPromoCode(this.props)}\n
\n );\n }\n\n private readonly _onInputChangeHandler = (e: React.ChangeEvent) => {\n const error = e.target.value === '' ? '' : this.state.error;\n this.setState({\n promoCodeInputValue: e.target.value.trim(),\n error,\n canApply: !!e.target.value\n });\n };\n\n private readonly _applyPromotion = (cartState: ICartState | undefined) => {\n if (!cartState || !cartState.cart) {\n return;\n }\n const appliedPromo = this.state.promoCodeInputValue;\n\n cartState\n .addPromoCode({ promoCode: appliedPromo })\n .then(result => {\n if (result.status === 'SUCCESS') {\n // Show success text\n this.setState({ promoCodeInputValue: '', error: '', canApply: false });\n } else if (result.substatus === 'ALREADYADDED') {\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\n } else {\n this.setState({ error: this.props.invalidPromoCodeErrorText });\n }\n })\n .catch(error => {\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\n });\n };\n\n /**\n * On Submit function.\n * @param cartState -Cartstate.\n * @returns Apply promotion.\n */\n private readonly _onSubmitHandler = (cartState: ICartState | undefined) => (event: React.FormEvent) => {\n event.preventDefault();\n this._applyPromotionHandler(cartState);\n };\n\n /**\n * On apply promotion function.\n * @param cartState -Cartstate.\n * @returns Apply promotion.\n */\n private readonly _applyPromotionHandler = (cartState: ICartState | undefined) => () => {\n this._applyPromotion(cartState);\n };\n\n private readonly _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n \n
\n \n \n {promoCodeApplyButtonText}\n \n
\n \n );\n };\n\n private readonly _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\n if (!cartState) {\n return;\n }\n const code = event.currentTarget.getAttribute('data-value') || '';\n cartState\n .removePromoCodes({\n promoCodes: [code]\n })\n .then(result => {\n if (result.status === 'SUCCESS') {\n this.setState({ error: '' });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\n });\n };\n\n private readonly _calculateDiscount = (code: string, cartState: ICartState | undefined) => {\n if (!cartState || !cartState.cart || !cartState.cart.CartLines || cartState.cart.CartLines.length === 0 || !code) {\n return;\n }\n let discountAmount = 0;\n for (const line of cartState.cart.CartLines) {\n if (line.DiscountLines) {\n for (const discountLine of line.DiscountLines) {\n if (discountLine.DiscountCode === code) {\n discountAmount += discountLine.DiscountCost!;\n }\n }\n }\n }\n return discountAmount * -1;\n };\n\n private readonly _renderAppliedPromoCode = (props: IPromoCodeProps) => {\n if (!props.cart || !props.cart.cart || !props.cart.cart.Coupons || props.cart.cart.Coupons.length === 0) {\n return;\n }\n\n const removePromotionHandler = (event: React.MouseEvent) => {\n this._removePromotion(props.cart, event);\n };\n\n const promoCodTotalDiscount = props.cart.cart.Coupons.reduce((count: number, coupon: Coupon) => {\n return count + (this._calculateDiscount(coupon.Code || '', props.cart) || 0);\n }, 0);\n\n return (\n <>\n
\n
{this.props.appliedPromoCodeHeadingText}
\n \n
\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\n const ariaLabel = props.removePromoAriaLabelFormat\n ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code)\n : '';\n\n return (\n
\n
\n {coupon.Code}{' '}\n \n
\n \n {props.removePromoText}\n \n
\n );\n })}\n \n );\n };\n}\n\nexport default PromoCode;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderProps } from '../header.props.autogenerated';\n\n/**\n * The header preferred store component.\n */\n@observer\nexport class HeaderPreferredStore extends React.PureComponent> {\n private readonly modalCloseButtonRef: React.RefObject = React.createRef();\n\n /**\n * Handle click on the store selector.\n * @returns : Promise void.\n */\n public handleClick = () => {\n return this._findPreferredStoreOnClick(this.props);\n };\n\n public render(): JSX.Element | undefined {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n slots,\n resources\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- slots can be undefined.\n if (ArrayExtensions.hasElements(slots?.storeSelector)) {\n const storeName =\n storeSelectorStateManager?.preferredStore && storeSelectorStateManager.preferredStore.StoreName\n ? storeSelectorStateManager.preferredStore.StoreName\n : resources.headerPreferredStoreText;\n\n return (\n
\n \n {storeName}\n \n {slots.storeSelector}\n
\n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n modules\n } = props;\n if (!storeSelectorStateManager) {\n return;\n }\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && ArrayExtensions.hasElements(modules.storeSelector)) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n await storeSelectorStateManager\n .openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to set preferred store');\n }\n });\n }\n}\n\nexport default HeaderPreferredStore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ILogoProps {\n image: Msdyn365.IImageData;\n gridSettings?: Msdyn365.IGridSettings;\n link?: ILinkData;\n className?: string;\n telemetryContent?: ITelemetryContent;\n requestContext: Msdyn365.IRequestContext;\n typeName?: string;\n}\n\nexport interface ILinkData {\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n linkText?: string;\n}\n\n/**\n *\n * Logo component.\n * @extends {React.PureComponent}\n */\nexport class Logo extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: ILogoProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return
{this._renderLogo(this.props)}
;\n }\n\n private _renderLogo(config: ILogoProps): JSX.Element {\n if (config.link && config.link.linkUrl.destinationUrl) {\n return (\n \n {this._renderImage(config)}\n \n );\n }\n return this._renderImage(config);\n }\n\n private _renderImage(config: ILogoProps): JSX.Element {\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=132&h=28&m=6', w: 0, h: 0 },\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n}\n\nexport default Logo;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderResources } from '../header.props.autogenerated';\n\nexport interface INavIconProps {\n resources: IHeaderResources;\n isExpanded: boolean;\n targetId: string;\n telemetryContent?: ITelemetryContent;\n toggleNavBar(): void;\n}\n\n/**\n *\n * NavIcon component.\n * @extends {React.PureComponent}\n */\n\n@observer\nexport class NavIcon extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: INavIconProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalHeader,\n onTelemetryClick,\n Popover,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\nimport { IHeaderData } from './header.data';\nimport { IHeaderProps, IHeaderResources, IMyAccountLinksData } from './header.props.autogenerated';\n\nexport interface IHeaderState {\n mobileMenuCollapsed: boolean;\n signinPopoverOpen: boolean;\n hasSigninerror?: boolean;\n}\n\nexport interface IHeaderViewProps extends IHeaderProps, IHeaderState {\n logo: React.ReactNode;\n wishListIconDesktop: React.ReactNode;\n wishListIconMobile: React.ReactNode;\n cartIcon: React.ReactNode;\n navIcon: React.ReactNode;\n className: string;\n menuBar: React.ReactNode[];\n search: React.ReactNode[];\n siteOptions: React.ReactNode[];\n HeaderTag: IModuleProps;\n HeaderContainer: INodeProps;\n MobileMenuContainer: INodeProps;\n MobileMenuHeader: React.ReactNode;\n MobileMenuBodyContainer: INodeProps;\n MobileMenuLinksContainer: INodeProps;\n HeaderTopBarContainer: INodeProps;\n Divider: INodeProps;\n\n AccountInfoDropdownParentContainer?: INodeProps;\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\n accountInfoDropdownButton?: React.ReactNode;\n\n signOutLink?: React.ReactNode;\n signInLink?: React.ReactNode;\n switchCustomerLink?: React.ReactNode;\n isOBORequest?: boolean;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n currentDistributor?: React.ReactNode;\n}\n\n/**\n *\n * Header component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Header extends React.PureComponent, IHeaderState> {\n private readonly popOverRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private cart: ICartState | undefined;\n\n private isB2BSite: boolean = false;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return (\n (MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName) ||\n this.props.context.request?.user?.name\n );\n }\n\n /**\n * OBO scenario. The name of worker who shops on behalf of customer.\n */\n @computed public get workerName(): Readonly {\n const worker = this.props.data.employee?.result;\n return worker?.Name;\n }\n\n @computed public get customerName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n if (MsDyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n }\n\n public constructor(props: IHeaderProps) {\n super(props);\n this.popOverRef = React.createRef();\n this._toggleNavbar = this._toggleNavbar.bind(this);\n this._togglePopover = this._togglePopover.bind(this);\n this._keydown = this._keydown.bind(this);\n this.state = {\n mobileMenuCollapsed: true,\n signinPopoverOpen: false,\n hasSigninerror: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isB2BSite = isChannelTypeB2B(this.props.context.request);\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => {\n this.props.data.cart.result;\n },\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: {\n signUpCustomerNotFoundTitle,\n signUpMultipleCustomerFoundTitle,\n signInCustomerNotAuthorizedTitle,\n closeNotificationLabel\n }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(\n user,\n signUpMultipleCustomerFoundTitle,\n signUpCustomerNotFoundTitle,\n signInCustomerNotAuthorizedTitle\n );\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('keydown', this._keydown, false);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n data: { accountInformation, wishlists },\n context: {\n request: { user }\n },\n context,\n resources: { cartLabel, cartQtyLabel }\n } = this.props;\n const { logoLink, logoImage, shouldShowWishlistCount } = this.props.config;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\n const navbarKey = 'header-nav-mobile';\n const customer = accountInformation && accountInformation.result;\n const cartIconSlot = this._getSlot('cartIcon');\n const menuBarSlot = this._getSlot('menuBar');\n const searchSlot = this._getSlot('search');\n let wishlistCount = 0;\n const siteOptionsSlot = this._getSlot('siteOptions');\n const preferredStoreSlot = this._getSlot('storeSelector');\n const currentDistributorSlot = this._getSlot('distributorSelector');\n if (wishlists !== undefined) {\n if (\n !wishlists.result ||\n !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines ||\n !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)\n ) {\n wishlistCount = 0;\n } else {\n wishlistCount = wishlists.result[0].CommerceListLines.length;\n }\n }\n const viewProps: IHeaderViewProps = {\n ...(this.props as IHeaderProps),\n ...this.state,\n logo: (\n \n ),\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: ArrayExtensions.hasElements(cartIconSlot) ? (\n cartIconSlot[0]\n ) : (\n \n ),\n navIcon: (\n \n ),\n menuBar: ArrayExtensions.hasElements(menuBarSlot) ? menuBarSlot : [],\n search: ArrayExtensions.hasElements(searchSlot) ? searchSlot : [],\n siteOptions: ArrayExtensions.hasElements(siteOptionsSlot) ? siteOptionsSlot : [],\n className: headerClassName,\n HeaderTag: {\n moduleProps: this.props,\n className: classnames(headerClassName),\n 'aria-label': this.props.resources.headerAriaLabel,\n tag: 'header'\n },\n HeaderContainer: {\n className: classnames('ms-header__container')\n },\n HeaderTopBarContainer: {\n className: classnames('ms-header__topbar')\n },\n Divider: {\n className: classnames('ms-header__divider')\n },\n MobileMenuContainer: {\n tag: Modal,\n id: navbarKey,\n className: 'ms-header__mobile-hamburger',\n isOpen: !this.state.mobileMenuCollapsed,\n wrapClassName: 'ms-header__modal',\n toggle: this._toggleNavbar\n },\n MobileMenuHeader: ,\n MobileMenuBodyContainer: {\n tag: ModalBody,\n className: 'ms-header__mobile-hamburger-menu-body'\n },\n MobileMenuLinksContainer: {\n className: 'ms-header__mobile-hamburger-menu-links'\n },\n AccountInfoDropdownParentContainer: {\n className: 'ms-header__account-info'\n },\n AccountInfoDropdownPopoverConentContainer: this.displayName\n ? {\n tag: Popover,\n id: 'myprofilePopover',\n className: 'ms-header__account-info-content',\n placement: 'bottom',\n isOpen: this.state.signinPopoverOpen,\n target: this.popOverRef,\n toggle: this._togglePopover\n }\n : undefined,\n signInLink: this._getSigninButton(user, this.props.resources),\n signOutLink: this._getSignOutButton(user, this.props.resources),\n isOBORequest: MsDyn365.isOboRequest(this.props.context.request),\n switchCustomerLink: this._getSwitchCustomerButton(user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(user, this.props.resources),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) && ,\n currentDistributor: this.isB2BSite && ArrayExtensions.hasElements(currentDistributorSlot) ? currentDistributorSlot : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - Link Index.\n * @returns : Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.myAccountLinks?.[linkIndex]) {\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Get the slot.\n * @param slotName - Name of the slot.\n * @returns The slot.\n */\n private _getSlot(slotName: string): React.ReactNode[] | null {\n const { slots } = this.props;\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\n }\n\n /**\n * Renders the sign in button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n !this.displayName && (\n \n \n {resources.signInLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSwitchCustomerButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SwitchCustomer);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const isOBOAccountSelected =\n MsDyn365.isOboRequest(this.props.context.request) && this.props.context.request.cookies.getAccountSelectionCookie();\n return (\n this.displayName &&\n isOBOAccountSelected && (\n this.props.context.request.cookies.removeAccountSelectionCookie()}\n {...attributes}\n >\n
\n
{format(resources.shoppingAsText, this.customerName)}
\n
{resources.switchCustomerLinkText}
\n
\n \n )\n );\n }\n\n private getBusinessPartnerSelectionUrl(): string | undefined {\n const route = MsDyn365.getUrlSync('businessPartnerSelection', this.props.context.actionContext);\n if (!route || !MsDyn365.msdyn365Commerce.isBrowser) {\n return undefined;\n }\n\n // MsDyn365.getUrlSync persists some params in the route and remove other params.\n // Among the persisted params, we need to remove catalogid.\n const persistedParamToRemove = ['catalogid'];\n const url = new URL(route, window.location.href);\n persistedParamToRemove.forEach(param => url.searchParams.delete(param));\n return url.href;\n }\n\n private _getSigninNotification(\n user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string,\n signUpCustomerNotFoundTitle: string,\n signInCustomerNotAuthorizedTitle: string\n ): string | undefined {\n if (!user?.retailServerErrorCode) {\n return undefined;\n }\n\n const { signUpCustomerNotFound, signUpMultipleCustomerFound, signInCustomerNotAuthorized } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n const accountAuthorizationError = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\n\n if (user?.retailServerErrorCode === notFoundError) {\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\n } else if (user?.retailServerErrorCode === multipleAccountError) {\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\n } else if (user?.retailServerErrorCode === accountAuthorizationError) {\n return signInCustomerNotAuthorized !== undefined ? signInCustomerNotAuthorized : signInCustomerNotAuthorizedTitle;\n }\n return user?.retailServerErrorMessage;\n }\n\n private _getAccountInfoDropdownButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n
\n
{this.displayName}
\n {MsDyn365.isOboRequest(this.props.context.request) && this.customerName && (\n
{format(resources.shoppingAsText, this.customerName)}
\n )}\n
\n \n )\n );\n }\n\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\n const { myAccountLinks } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n if (!this.displayName || !myAccountLinks || !ArrayExtensions.hasElements(myAccountLinks)) {\n return undefined;\n }\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\n payLoad.contentAction.etext = cta.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: cta.ariaLabel,\n className: 'ms-signin-info__account-link-button',\n linkText: cta.linkText,\n linkUrl: cta.linkUrl.destinationUrl,\n openInNewTab: cta.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n\n return (\n \n );\n });\n }\n\n private _toggleNavbar(): void {\n this.setState({\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\n });\n }\n\n private _togglePopover(): void {\n this.setState({\n signinPopoverOpen: !this.state.signinPopoverOpen\n });\n }\n\n private _keydown(event: KeyboardEvent): void {\n if (event.keyCode === KeyCodes.Escape) {\n this.setState({ mobileMenuCollapsed: true });\n }\n }\n}\n\nexport default Header;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHeaderViewProps } from './header';\n\nconst headerView: React.FC = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer,\n Divider\n } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {props.currentDistributor}\n {_renderDesktopAccountBlock(props)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n \n \n {props.MobileMenuHeader}\n {_renderReactFragment(props.menuBar)}\n \n {props.accountLinks ? props.accountLinks.map(link => link) : false}\n {props.siteOptions}\n {props.wishListIconMobile}\n {props.signInLink}\n {props.signOutLink}\n \n \n \n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map(link => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return {signInLink};\n }\n }\n props.context.telemetry.error('Header content is empty, module wont render.');\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport interface IOrderSummaryProps {\n subTotalLabel: string;\n shippingLabel: string;\n taxLabel: string;\n orderTotalLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n totalDiscountsLabel: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n id: string;\n typeName: string;\n otherChargeLabel?: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isTaxIncludedInPrice?: boolean;\n isShowTaxBreakup?: boolean;\n customerAccountLabel?: string;\n}\n\nexport interface IOrderSummaryLines {\n subtotal: React.ReactNode;\n shipping?: React.ReactNode;\n otherCharge?: React.ReactNode;\n tax: React.ReactNode;\n orderTotal: React.ReactNode;\n totalDiscounts?: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n customerAccount?: React.ReactNode;\n}\n\ninterface IOrderSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n priceCurrency?: string;\n}\n\ninterface IShippingOrderLine {\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n canShip?: boolean;\n hasDeliveryMethod?: boolean;\n hasShippingMethod?: boolean;\n freightFee?: number;\n}\n\nconst OrderSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel,\n priceCurrency\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n ProductPriceForSelectedProductsInput,\n validateCatalogId,\n getProductPriceForSelectedProducts\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productPrices: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || [],\n productPrices: this.productPrices || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n const discountIds = this.props.config.productCollection.discountIds;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const productPrices = this.state.productPrices;\n\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n \n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(item, index, productPrices ? productPrices.at(index) : undefined);\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n (recommendation || discountIds) && shouldDisplaySeeAllButton && ArrayExtensions.hasElements(updatedProducts)\n ? this._getSeeAllButton(headingLabel, recommendation, discountIds)\n : undefined\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n let productPrices = this.state.productPrices;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n if (this.props.config.productCollection.listType === 'promotional') {\n productPrices = await getProductPriceForSelectedProducts(\n new ProductPriceForSelectedProductsInput(products.map(p => p.RecordId)),\n this.props.context.actionContext\n );\n this.setState({ productPrices: productPrices });\n }\n };\n\n private readonly _getProduct = (\n product: ProductSearchResult,\n index: number,\n productPrice?: ProductPrice\n ): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param headingLabel - Heading label.\n * @param recommendation - Recommendation.\n * @param discountIds - Discount Ids.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (headingLabel: string, recommendation?: string, discountIds?: string[]): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n if (!recommendation && !discountIds) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n\n if (discountIds) {\n // see all button for promotion page\n url.searchParams.set('discountIds', discountIds.toString());\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n } else if (recommendation) {\n // See all button for recommendation\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n }\n\n return (\n \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './product-collection';\n\nconst ProductCollectionView: React.FC = props => {\n const {\n heading,\n ProductCollectionContainer,\n products,\n SingleSlideCarouselComponentProps,\n GridComponentProps,\n isCarousel,\n seeAllButton\n } = props;\n\n if (products) {\n return (\n \n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n \n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return {productComponent};\n};\n\nexport default ProductCollectionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartComponent, IAddToCartFailureResult, IAddToCartResources, OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { getUrlSync, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { SalesLine } from '@msdyn365-commerce/retail-proxy';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\n/**\n * The data on which the component should operate.\n */\nexport interface IAddToCartSelectedData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * The resources needed to render a buy selected component.\n */\nexport interface IAddToCartSelectedResources {\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n}\n\n/**\n * Configuration of a buy selected component.\n */\nexport interface IAddToCartSelectedProps extends IComponentProps {\n className: string;\n context: ICoreContext;\n\n resources: IAddToCartSelectedResources;\n\n isIcon?: boolean;\n onError?(result: IAddToCartFailureResult): void;\n}\n\n/**\n * Get the dialog strings.\n * @param props - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getDialogStrings = (props: IAddToCartSelectedProps): IAddToCartResources => {\n return {\n goToCartText: props.resources.quickOrderGridGoToCartText ?? '',\n continueShoppingText: props.resources.quickOrderGridDialogCloseText ?? '',\n closeNotificationLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? '',\n headerItemOneText: props.resources.quickOrderGridSingleItemText ?? '',\n headerItemFormatText: props.resources.quickOrderGridMultiLineItemFormatText ?? '',\n headerLinesFormatText: props.resources.quickOrderGridMultiLinesFormatText ?? '',\n headerMessageText: props.resources.quickOrderGridHeaderMessageText ?? '',\n freePriceText: props.resources.freePriceText ?? '',\n originalPriceText: props.resources.originalPriceText ?? '',\n currentPriceText: props.resources.currentPriceText ?? '',\n addedQuantityText: props.resources.addedQuantityText ?? '',\n buyAgainNotificationTitle: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationTitle ?? '',\n buyAgainNotificationCloseAriaLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? ''\n };\n};\n\n/**\n * Get the dialog strings.\n * @param quickOrder - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getOrderDetails = (quickOrder: QuickOrderTemplate): OrderDetailsProduct[] => {\n const orderDetails: OrderDetailsProduct[] = [];\n for (const quickLine of quickOrder.quickOrderTemplateLines) {\n const quantity = quickLine.productListLine.Quantity;\n const salesLine: SalesLine = {\n Quantity: quantity\n };\n const products = new OrderDetailsProduct(salesLine, quickLine.fullProduct?.ProductDetails);\n orderDetails.push(products);\n }\n return orderDetails;\n};\n\n/**\n * Renders a button which adds given products to the cart.\n * @param props - Configuration of the component.\n * @returns A react element or null if no products were given.\n */\nexport const AddToCartProductListComponent: React.FC = (props: IAddToCartSelectedProps): JSX.Element | null => {\n const {\n data: { quickOrderTemplate }\n } = props;\n\n if (quickOrderTemplate?.quickOrderTemplateLines[0].fullProduct?.ProductDetails === undefined) {\n return null;\n }\n const quantity = quickOrderTemplate.quickOrderTemplateLines[0].productListLine.Quantity;\n const buttonLabel = props.resources.quickOrderGridBuySelectedButtonText;\n const buttonAriaLabel = props.resources.quickOrderGridBuySelectedButtonAriaLabel;\n const dialogStrings: IAddToCartResources = getDialogStrings(props);\n const shouldSkipSiteSettings: boolean = true;\n const orderDetailProducts = getOrderDetails(quickOrderTemplate);\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddToCartProductListComponent } from './add-to-list';\nimport { IQuickOrderGridActionsViewProps, IQuickOrderGridState } from './utilities';\n\n/**\n * Interface for quick order grid action data.\n */\nexport interface IQuickOrderGridActionsData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * Interface for quick order grid action props.\n */\nexport interface IQuickOrderGridActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n moduleClassName: string;\n typeName: string;\n handlers: {\n removeProductList(productListId: string): void;\n onErrorMessage(message: string): void;\n };\n quickOrderGridState: IQuickOrderGridState;\n resources: {\n quickOrderGridDeleteButtonText: string;\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n };\n}\n\n/**\n * Remove ProductList Action.\n * @param props -Quick order grid action props.\n */\nconst removeQuickOrderList = (props: IQuickOrderGridActionsProps): void => {\n const {\n data: { quickOrderTemplate },\n handlers\n } = props;\n const { removeProductList } = handlers;\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- Need to check data.\n if (quickOrderTemplate && quickOrderTemplate.productList.Id) {\n removeProductList(quickOrderTemplate.productList.Id);\n }\n};\n\n/**\n * Get Addtobag Button.\n * @param props -Order template action props.\n * @returns QuickOrderGrid actions view props.\n */\nconst getQuickOrderGridAddToCartDialog = (props: IQuickOrderGridActionsProps): React.ReactNode => {\n const {\n data: { quickOrderTemplate },\n context,\n moduleClassName,\n resources,\n typeName\n } = props;\n const buttonId = 'quick-order-grid';\n return (\n {\n if (result.cartActionResult?.errorDetails?.LocalizedMessage) {\n props.handlers.onErrorMessage(result.cartActionResult.errorDetails.LocalizedMessage);\n }\n }}\n />\n );\n};\n\n/**\n * Remove Quick order grid action.\n * @param props -Quick order grid action props.\n * @returns Remove order template.\n */\nconst removeActionHandler = (props: IQuickOrderGridActionsProps) => () => {\n removeQuickOrderList(props);\n};\n\n/**\n * Quick order grid action view.\n * @param props -Quick Order Grid template action props.\n * @returns QuickOrderGrid actions view props.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name needs to be this.\nexport const QuickOrderGridActionsView = (props: IQuickOrderGridActionsProps): IQuickOrderGridActionsViewProps => {\n const { moduleClassName, quickOrderGridState, resources } = props;\n const { quickOrderGridDeleteButtonText } = resources;\n\n const userMessageNode = quickOrderGridState.topStateMessage ? (\n \n \n {quickOrderGridState.topStateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n addProductListToBag: getQuickOrderGridAddToCartDialog(props),\n removeProductList: (\n \n ),\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderGridDrawerProps } from './quick-order-grid-drawer-props';\n\n/**\n * Interface for drawer state.\n */\nexport interface IQuickOrderGridDrawerState {\n isOpen: boolean;\n}\n\n/**\n * Placement of glyph.\n */\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Grid Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\nexport class QuickOrderGridDrawer extends React.Component {\n private readonly _drawerOpenGlyph: string;\n\n private readonly _drawerCloseGlyph: string;\n\n private readonly _drawerGlyphClass: string;\n\n private _isManuallyToggled: boolean;\n\n public constructor(props: IQuickOrderGridDrawerProps) {\n super(props);\n this._isManuallyToggled = false;\n this.state = { isOpen: props.collapseProps?.isOpen ?? false };\n this._drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n const closeGlyph = this.props.closeGlyph ? this.props.closeGlyph : '';\n if (this.props.isAnimateGlyph) {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : closeGlyph);\n this._drawerCloseGlyph = this._drawerOpenGlyph;\n } else {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : '');\n this._drawerCloseGlyph = classnames(this._drawerGlyphClass, closeGlyph);\n }\n }\n\n /**\n * Method to call on click of drawer button.\n * @param event - Product DeliveryOption List.\n */\n public toggle = (event: React.MouseEvent | React.KeyboardEvent): void => {\n event.preventDefault();\n this._isManuallyToggled = true;\n if (this.props.onToggle) {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n this.props.onToggle(this.state);\n } else {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n }\n };\n\n public shouldComponentUpdate(nextProps: IQuickOrderGridDrawerProps, nextState: IQuickOrderGridDrawerState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const collapseProps: ICollapseProps = { ...this.props.collapseProps };\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this._isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className);\n const drawerButtonClassName = `${this.props.className ? this.props.className : ''}__button`;\n this._isManuallyToggled = false;\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen, drawerClass)}\n \n \n
\n );\n }\n\n private _generateDrawerButtonInnerMarkup(isCollapseState: boolean, drawerClass: string): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n const headingDrawerClass = `${drawerClass}-heading`;\n const descriptionDrawerClass = `${drawerClass}-description`;\n return (\n <>\n

{this.props.moduleHeadingText}

\n {this.props.moduleDescriptionText}\n {this._generateGlyphMarkup('drawer__glyph__end', isCollapseState)}\n \n );\n }\n\n private _generateGlyphMarkup(location: string, isCollapseState: boolean): JSX.Element {\n let glyphClass = isCollapseState ? this._drawerOpenGlyph : this._drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return ;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridState } from './utilities';\n\n/**\n * Interface quick order grid form props.\n */\nexport interface IQuickOrderGridFormProps {\n isAddtoListDisabled: boolean | undefined;\n productTextInput: React.RefObject;\n quantityTextInput: React.RefObject;\n maxChars: number;\n minQuantity?: number;\n maxQuantity?: number;\n moduleClassName: string;\n ariaLabelQuantity: string;\n ariaLabelProduct: string;\n ariaLabelAddtoCart: string;\n quickOrderGridState: IQuickOrderGridState;\n handleInputChange(query: string): void;\n handleQuantityChange(query: string): void;\n handleAddProductListClick(): Promise;\n}\n\n/**\n * Interface quick order grid form view props.\n */\nexport interface IQuickOrderGridFormViewProps {\n product: React.ReactNode;\n quantity: React.ReactNode;\n addToListBtn: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Input change value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\n\n/**\n * On Quantity Change functionality.\n * @param handleQuantityChange -Quantity change function.\n * @returns Quantity change value.\n */\nconst onQuantityChangeFunction = (handleQuantityChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleQuantityChange(event.target.value || '');\n};\n\n/**\n * Quick order grid form component.\n * @param props -Component form props.\n * @returns Quick order gridp view props..\n */\nexport const QuickOrderGridFormComponent = (props: IQuickOrderGridFormProps): IQuickOrderGridFormViewProps => {\n const {\n moduleClassName,\n productTextInput,\n quantityTextInput,\n quickOrderGridState,\n maxChars,\n minQuantity,\n maxQuantity,\n isAddtoListDisabled,\n ariaLabelQuantity,\n ariaLabelProduct,\n ariaLabelAddtoCart,\n handleQuantityChange,\n handleInputChange,\n handleAddProductListClick\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const onQuantityInputChange = onQuantityChangeFunction(handleQuantityChange);\n\n const productNode = (\n
\n

\n {ariaLabelProduct}\n

\n \n
\n );\n\n const quantityNode = (\n
\n

\n {ariaLabelQuantity}\n

\n \n
\n );\n\n const addToListNode = (\n
\n \n {ariaLabelAddtoCart}\n \n
\n );\n\n const userMessageNode = quickOrderGridState.stateMessage ? (\n \n \n {quickOrderGridState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToListBtn: addToListNode,\n quantity: quantityNode,\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { QuickOrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order grid.\n */\nexport class QuickOrderGridProduct {\n @observable\n public isSelected: boolean;\n\n public readonly productLine: QuickOrderTemplateLine;\n\n public constructor(productLine: QuickOrderTemplateLine) {\n this.productLine = productLine;\n this.isSelected = false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order grid table header resources.\n */\nexport interface IQuickOrderGridTableHeaderResources {\n quickOrderGridProductNumberText: string;\n quickOrderGridProductText: string;\n quickOrderGridUnitPriceText: string;\n quickOrderGridUnitOfMeasureText: string;\n quickOrderGridQuantityText: string;\n quickOrderGridActionsText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderGridTableHeaderResources;\n}\n\n/**\n * Interface for quick order grid table header component.\n */\nexport interface IQuickOrderGridTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order grid header cells for desktop.\n * @param props -- The quick order grid table header props.\n * @returns The list of cells for quick order grid header component in desktop version.\n */\nconst QuickOrderGridDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderGridProductNumberText}\n {resources.quickOrderGridProductText}\n {resources.quickOrderGridUnitPriceText}\n {resources.quickOrderGridUnitOfMeasureText}\n {resources.quickOrderGridQuantityText}\n {resources.quickOrderGridActionsText}\n \n );\n};\n\n/**\n * Get the quick order grid header cells for mobile.\n * @param props -- The quick order grid table header props.\n * @returns The quick order grid header component in desktop version.\n */\nconst QuickOrderGridMobileHeaderCellsComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderGridProductNumberText}\n \n \n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderGridTableHeaderComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductPrice } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { QuickOrderGridProduct } from '../../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../../utilities';\n\n/**\n * Data required to render each quick order grid row.\n */\nexport interface IQuickOrderGridTableRowData {\n product: QuickOrderGridProduct;\n}\n\n/**\n * Resources for quick order grid table rows.\n */\nexport interface IQuickOrderGridTableRowResources {\n quickOrderGridQuantityMobileText: string;\n quickOrderGridProductDimensionsSeparator: string;\n quickOrderGridViewDetailsButtonText: string;\n quickOrderGridViewDetailsButtonAriaLabel: string;\n quickOrderGridRemoveItemButtonAriaLabel: string;\n quickOrderGridInputQuantityAriaLabel: string;\n quickOrderGridDecrementButtonAriaLabel: string;\n quickOrderGridIncrementButtonAriaLabel: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n productListLine: ProductListLine;\n price?: ProductPrice;\n moduleId: string;\n moduleTypeName: string;\n min: number;\n max: number;\n quantity: number;\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderGridTableRowResources;\n index: number;\n callbacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * The default image settings for quick order grid table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order grid row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderGridTableRowProductImageComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const fallbackImageUrl = getFallbackImageUrl(\n product?.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
\n \n
\n );\n};\n\nlet setShowPreviousActions: React.Dispatch> | undefined;\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderProductPrice = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const { context, moduleId, moduleTypeName, resources } = props;\n const price = props.price;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderUnitOfMeasure = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const price = props.price;\n\n if (price) {\n return (\n
\n {StringExtensions.isNullOrEmpty(props.productListLine.UnitOfMeasure) || price.UnitOfMeasure}\n
\n );\n }\n return null;\n};\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (\n orderTemplateLineId: string | undefined,\n quantity: number,\n props?: IQuickOrderGridTableRowProps | undefined\n ) => boolean,\n itemKey: string | undefined,\n props: IQuickOrderGridTableRowProps\n) => (newValue: number) => {\n onChangeQuantity(itemKey, newValue, props);\n return true;\n};\n\n/**\n * On Change function.\n * @param onRemoveItem -On change quantity function.\n * @param quickOrderGridProductKey -QuickOrderGridp Product.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onRemoveHandler = (\n onRemoveItem: (quickOrderGridProduct: QuickOrderGridProduct, props?: IQuickOrderGridTableRowProps | undefined) => void,\n quickOrderGridProductKey: QuickOrderGridProduct,\n props: IQuickOrderGridTableRowProps\n) => () => {\n onRemoveItem(quickOrderGridProductKey, props);\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderGridExtraActionsPopupComponent: React.FC = (\n props: IQuickOrderGridTableRowProps\n): JSX.Element | null => {\n const {\n resources: { quickOrderGridViewDetailsButtonAriaLabel, quickOrderGridViewDetailsButtonText }\n } = props;\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const [shouldShowActions, setShowActions] = useState(false);\n let productUrl = '';\n if (product === undefined) {\n return null;\n }\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n const onClickViewDetails = React.useCallback(() => {\n if (MsDyn365.isBrowser) {\n window.location.href = productUrl;\n }\n }, [productUrl]);\n\n const toggle = React.useCallback(() => {\n const shouldShowActionsNewValue = !shouldShowActions;\n if (shouldShowActionsNewValue) {\n if (setShowPreviousActions) {\n setShowPreviousActions(false);\n }\n setShowActions(shouldShowActionsNewValue);\n setShowPreviousActions = setShowActions;\n } else {\n setShowPreviousActions = undefined;\n setShowActions(shouldShowActionsNewValue);\n }\n }, [shouldShowActions, setShowActions]);\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n const actionsContainerClassName = `${className}__actions-container`;\n\n return (\n
\n \n \n {props.resources.quickOrderGridRemoveItemButtonAriaLabel}\n \n
\n )}\n \n );\n};\n\n/**\n * Renders quick order grid table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for desktop view.\n */\nexport const QuickOrderGridDesktopTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n if (product !== undefined) {\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
\n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderGridProductDimensionsSeparator)}\n \n
\n \n {renderProductPrice(props)}\n {renderUnitOfMeasure(props)}\n \n \n \n \n \n \n \n );\n }\n\n return null;\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for mobile view.\n */\nexport const QuickOrderGridMobileTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n if (product !== undefined) {\n return (\n <>\n \n \n \n \n
\n {product.RecordId}\n \n \n \n
\n \n \n \n \n \n );\n }\n return null;\n};\n\n/**\n * Quick order table row component.\n * @param props - Configuration of the component.\n * @returns React node for the row.\n */\nexport const QuickOrderGridTableRowComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const rowClassName = `${props.className}__row`;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n let headerCells: JSX.Element;\n if (isMobileView) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IComponent, IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport React from 'react';\n\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { QuickOrderGridProduct } from '../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../utilities';\nimport {\n IQuickOrderGridTableHeaderResources,\n IQuickOrderGridTableRowResources,\n QuickOrderGridTableHeaderComponent,\n QuickOrderGridTableRowComponent\n} from './components';\n\n/**\n * Quick order table data interface.\n */\ninterface IQuickOrderGridTableData {\n quickOrderGridProducts: QuickOrderGridProduct[];\n isOrderQuantityLimitsFeatureEnabled: boolean;\n}\n\n/**\n * Quick order table resources.\n */\nexport interface IQuickOrderGridTableResources extends IQuickOrderGridTableHeaderResources, IQuickOrderGridTableRowResources {}\n\n/**\n * Quick order table props.\n */\nexport interface IQuickOrderGridTableProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n moduleId: string;\n moduleTypeName: string;\n\n resources: IQuickOrderGridTableResources;\n isMobileView: boolean;\n imageSettings?: IImageSettings;\n callBacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * Quick order table component.\n */\nexport interface IQuickOrderGridTableComponent extends IComponent {}\n\n/**\n * The quick order table.\n * @param props -- The quick order table props.\n * @returns The quick order table element.\n */\nexport const QuickOrderGridTableComponent: React.FC = (props: IQuickOrderGridTableProps) => {\n const [isMobile, setIsMobile] = React.useState(props.isMobileView);\n const quickOrderGridProducts = props.data.quickOrderGridProducts;\n const isOrderQuantityLimitsFeatureEnabled = props.data.isOrderQuantityLimitsFeatureEnabled;\n\n /**\n * Update the view port.\n */\n const updateViewport = () => {\n setIsMobile(props.isMobileView);\n };\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', updateViewport);\n }\n\n const headerClassName = `${props.className}__header`;\n const rowClassName = `${props.className}__row`;\n\n return (\n \n \n {quickOrderGridProducts.map((quickOrderProduct, index) => {\n let quantity = quickOrderProduct.productLine.productListLine.Quantity!;\n const product = quickOrderProduct.productLine.fullProduct;\n let min: number = 1;\n let max: number = 10;\n const behavior = product?.ProductDetails?.Behavior;\n if (isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(behavior)) {\n if (behavior.MinimumQuantity && behavior.MinimumQuantity > 0) {\n min = behavior.MinimumQuantity;\n }\n if (behavior.MaximumQuantity && behavior.MaximumQuantity > 0) {\n max = behavior.MaximumQuantity;\n }\n quantity = Math.max(quantity, min);\n }\n const price = quickOrderProduct.productLine.fullProduct?.ProductPrice;\n return (\n \n );\n })}\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getProductConfigure,\n IProductDimensionCallbacks,\n IProductDimensionConfigureResources,\n IProductDimensionConfigureViewProps\n} from '@msdyn365-commerce/components';\nimport {\n ProductDimension,\n ProductDimensionType,\n ProductDimensionValue,\n ProductListsDataActions,\n ProductListType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n addItemToProductListAction,\n AddItemToProductListInput,\n ArrayExtensions,\n createProductList,\n CreateProductListInput,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getScanResult,\n GetScanResultInput,\n getSelectedVariant,\n IDimensionForSelectedVariant,\n IPromiseQueue,\n ObjectExtensions,\n QuickOrderTemplate,\n QuickOrderTemplateLine,\n SelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { ActiveProductListInput } from './actions';\nimport {\n EcommerceQuantityLimitConfigurationsFeatureName,\n IQuickOrderGridActionsProps,\n IQuickOrderGridActionsViewProps,\n IQuickOrderGridRowCallbacks,\n IQuickOrderGridState,\n QuickOrderGridActionsView,\n QuickOrderGridDrawer,\n QuickOrderGridFormComponent,\n QuickOrderGridProduct,\n QuickOrderGridTableComponent,\n RetailDefaultOrderQuantityLimitsFeatureName\n} from './components';\nimport { IQuickOrderGridData } from './quick-order-grid.data';\nimport { IQuickOrderGridProps, IQuickOrderGridResources } from './quick-order-grid.props.autogenerated';\n\n/**\n * QuickOrder Grid View props.\n */\nexport interface IQuickOrderGridViewProps extends IQuickOrderGridProps {\n header: JSX.Element;\n actions?: INodeProps;\n isB2bCustomer?: boolean;\n isQuickOrderGridFormExpanded: boolean;\n contentProps: INodeProps;\n drawer: INodeProps;\n loading?: React.ReactNode;\n quickOrderGridForm: INodeProps;\n quickOrderGridFormProductContent: INodeProps;\n quickOrderGridFormMsgContent: INodeProps;\n quickOrderGridProps: IModuleProps;\n form: React.ReactNode;\n configure?: IProductDimensionConfigureViewProps;\n isMobileView: boolean;\n container?: JSX.Element;\n orderActions?: IQuickOrderGridActionsViewProps | null;\n bulkPurchase?: React.ReactNode;\n}\n\n/**\n * QuickOrder Grid View port.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * QuickOrderGrid component.\n * @extends {React.PureComponent>}\n */\nclass QuickOrderGrid extends React.PureComponent, IQuickOrderGridState> {\n private readonly _productTextInput: React.RefObject;\n\n private readonly _quantityInput: React.RefObject;\n\n private readonly _waitTime: number = 500;\n\n private readonly _dimensionUpdateQueueMaxLength: number = 2;\n\n private readonly _errorCssClass: string = 'danger';\n\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n\n private readonly _quickOrderGridFormClass: string;\n\n private readonly _quickOrderGridFormProductContent: string;\n\n private readonly _quickOrderGridFormMsgContent: string;\n\n private readonly _telemetryContent: ITelemetryContent;\n\n private readonly _dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(this._dimensionUpdateQueueMaxLength);\n\n private _dimensions: { [id: number]: string } = {};\n\n private _initializedDimensions: Set = new Set();\n\n private readonly _cssClassNameConfigure: string = 'ms-quick-order_grid__content-form-main';\n\n private readonly _className: string = 'ms-quick-order-grid';\n\n // @ts-expect-error: Debouce needs to be used as type.\n private _cancellabelDebounce: debounce;\n\n private _isOrderQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isChannelLimitsFeatureEnabled: boolean = false;\n\n private _applyDefaultOrderSettingsForCartLine: boolean = false;\n\n private readonly _quickOrderGridCallbacks: IProductDimensionCallbacks = {\n initializeDimension: (initializedDimension: string): void => {\n if (initializedDimension) {\n this._initializedDimensions.add(initializedDimension);\n }\n },\n /**\n * Get Dropdown name.\n * @param selectedDimensionId - Dimension type.\n * @param selectedDimensionValueId - Resources.\n * @returns Dropdown name.\n */\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this._dimensions[selectedDimensionId] = selectedDimensionValueId;\n // Only trigger _updateDimensions when all dimensions are initialized\n if (this._initializedDimensions.size === this.state.productDimensions?.length) {\n return this._dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: string) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw new Error(error);\n }\n });\n }\n },\n\n /**\n * Get Dropdown name.\n * @param dimensionType - Dimension type.\n * @param resources - Resources.\n * @returns Dropdown name.\n */\n getDropdownName: (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n\n /**\n * Method to call on dimension change.\n * @param isUpdatingDimension - Flag to update dimension.\n */\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n }\n };\n\n private readonly _quickOrderGridRowCallbacks: IQuickOrderGridRowCallbacks = {\n /**\n * Method to call remove button.\n * @param line - Grid row product.\n */\n onRemoveItem: (line: QuickOrderGridProduct): void => {\n this._removeItemRowFromTable(line.productLine);\n },\n\n /**\n * Method to call on change quantity button.\n * @param productListLineId - Grid row product list line id.\n * @param quantity - Product quantity.\n * @returns - Falg to get confirmation for action.\n */\n onChangeQuantity: (productListLineId: string | undefined, quantity: number): boolean => {\n return this._changeRowQuantity(productListLineId, quantity);\n }\n };\n\n public constructor(props: IQuickOrderGridProps) {\n super(props);\n this._productTextInput = React.createRef();\n this._quantityInput = React.createRef();\n\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.state = {\n isQuickOrderGridFormExpanded: false,\n min: 0,\n max: 10,\n quantity: 1,\n productResponse: undefined,\n productDimensions: undefined,\n productDimensionErrorState: {\n configureErrors: {}\n },\n isMobile: this.isMobile,\n products: [],\n isUpdatingDimension: false,\n productListId: ''\n };\n\n this._quickOrderGridFormClass = 'ms-quick-order-grid__content-form';\n this._quickOrderGridFormProductContent = 'ms-quick-order-grid__content-form-main';\n this._quickOrderGridFormMsgContent = 'ms-quick-order-grid__content-form-msg';\n\n this._isOrderQuantityLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName)\n ?.IsEnabled ?? false;\n\n this._isChannelLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === EcommerceQuantityLimitConfigurationsFeatureName)\n ?.IsEnabled ?? false;\n\n const cartConfiguration = this.props.data.cartConfiguration;\n this._applyDefaultOrderSettingsForCartLine = cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false;\n }\n\n @computed public get isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public render(): JSX.Element | null {\n const { data } = this.props;\n if (!data.customerInformation.result) {\n return null;\n }\n const quickOrderTemplate = data.quickOrderTemplate;\n\n if (quickOrderTemplate?.result !== undefined) {\n this.setState({\n products: quickOrderTemplate.result.quickOrderTemplateLines,\n productListId: quickOrderTemplate.result.productList.Id\n });\n }\n const { className = '', maxQuantity } = this.props.config;\n const customerInfo = this.props.data.customerInformation.result;\n const {\n quickOrderGridModuleHeading,\n quickOrderGridModuleDescription,\n quickOrderGridAddtogrid,\n quickOrderGridProductQuantityInputLabel,\n quickOrderGridProductInputLabel,\n quickOrderGridProductDimensionTypeColor,\n quickOrderGridProductDimensionTypeConfiguration,\n quickOrderGridSelectDimensionFormatString,\n quickOrderGridProductDimensionTypeSize,\n quickOrderGridProductDimensionTypeStyle,\n quickOrderGridProductDimensionTypeAmount,\n quickOrderGridModulePageHeading\n } = this.props.resources;\n\n const productConfigureResources: IProductDimensionConfigureResources = {\n selectDimensionFormatString: quickOrderGridSelectDimensionFormatString,\n productDimensionTypeColor: quickOrderGridProductDimensionTypeColor,\n productDimensionTypeConfiguration: quickOrderGridProductDimensionTypeConfiguration,\n productDimensionTypeSize: quickOrderGridProductDimensionTypeSize,\n productDimensionTypeStyle: quickOrderGridProductDimensionTypeStyle,\n productDimensionTypeAmount: quickOrderGridProductDimensionTypeAmount\n };\n\n const { isQuickOrderGridFormExpanded, productDimensionErrorState, productResponse, productDimensions } = this.state;\n\n const headerClassName = `${this._className}__header`;\n\n const header = (\n
\n \n
\n );\n\n const viewProps: IQuickOrderGridViewProps = {\n ...(this.props as IQuickOrderGridProps),\n\n quickOrderGridProps: { className: classnames('ms-quick-order-grid', className), moduleProps: this.props },\n contentProps: { className: 'ms-quick-order-grid__content' },\n isB2bCustomer: customerInfo?.IsB2b,\n header,\n actions: {\n className: `${this._className}-action-bar`,\n tag: 'div'\n },\n drawer: {\n tag: QuickOrderGridDrawer,\n className: `${this._className}__drawer`,\n collapseProps: { isOpen: this.state.isQuickOrderGridFormExpanded },\n moduleHeadingText: quickOrderGridModuleHeading,\n moduleDescriptionText: quickOrderGridModuleDescription,\n requestContext: this.props.context.request,\n telemetryContent: this._telemetryContent\n },\n bulkPurchase: this._renderBulkPurchase(),\n quickOrderGridForm: {\n className: `${this._quickOrderGridFormClass} ${isQuickOrderGridFormExpanded ? 'qo-show' : 'qo-hide'}`\n },\n quickOrderGridFormProductContent: {\n className: this._quickOrderGridFormProductContent\n },\n quickOrderGridFormMsgContent: {\n className: this._quickOrderGridFormMsgContent\n },\n form: QuickOrderGridFormComponent({\n productTextInput: this._productTextInput,\n quantityTextInput: this._quantityInput,\n isAddtoListDisabled: !productResponse,\n ariaLabelAddtoCart: quickOrderGridAddtogrid,\n ariaLabelProduct: quickOrderGridProductInputLabel,\n ariaLabelQuantity: quickOrderGridProductQuantityInputLabel,\n maxChars: 50,\n minQuantity: this.state.min ?? 0,\n maxQuantity: this.state.max ?? maxQuantity,\n moduleClassName: this._className,\n quickOrderGridState: this.state,\n handleInputChange: this._handleInputChange,\n handleQuantityChange: this._handleQuantityChange,\n handleAddProductListClick: this._addItemToProductListLine\n }),\n configure:\n productResponse && productDimensions\n ? getProductConfigure(\n this._cssClassNameConfigure,\n this.props.context,\n this.props.friendlyName,\n this.props.telemetry,\n quickOrderGridSelectDimensionFormatString,\n productConfigureResources,\n this._quickOrderGridCallbacks,\n productResponse,\n productDimensions,\n productDimensionErrorState\n )\n : undefined,\n isQuickOrderGridFormExpanded: this.state.isQuickOrderGridFormExpanded,\n isMobileView: this.state.isMobile,\n container: ArrayExtensions.hasElements(this.state.products) ? this._renderListContainer() : undefined,\n orderActions: this._renderQuickOrderGridActions(quickOrderTemplate?.result)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderQuickOrderGridActions(quickOrderTemplate: QuickOrderTemplate | undefined): IQuickOrderGridActionsViewProps | null {\n const { typeName, context, resources } = this.props;\n const {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n } = resources;\n if (ArrayExtensions.hasElements(quickOrderTemplate?.quickOrderTemplateLines)) {\n const quickOrderGridActions: IQuickOrderGridActionsProps = {\n data: { quickOrderTemplate },\n moduleClassName: this._className,\n id: 'quick-order-grid',\n typeName,\n context,\n handlers: {\n removeProductList: this._removeProductList,\n onErrorMessage: (message: string) =>\n this.setState({\n topStateMessage: {\n messageText: message,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n })\n },\n quickOrderGridState: this.state,\n resources: {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n }\n };\n\n return QuickOrderGridActionsView(quickOrderGridActions);\n }\n return null;\n }\n\n /**\n * Renders bulk purchase module.\n * @returns Bulk purchase module react node.\n */\n private _renderBulkPurchase(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!ArrayExtensions.hasElements(this.props.slots.bulkPurchaseSlots)) {\n return null;\n }\n\n const containerClass = `${this._className}__bulk-purchase`;\n return (\n
\n {React.cloneElement(this.props.slots.bulkPurchaseSlots[0] as React.ReactElement, {\n productDimensions: this.state.productDimensions\n })}\n
\n );\n }\n\n /**\n * Render list container.\n * @returns JSX element.\n */\n private _renderListContainer(): JSX.Element {\n const containerClass = `${this._className}__table-content`;\n return
{this._renderQuickOrderTable(this._className)}
;\n }\n\n /**\n * Initial the products on quick order.\n * @returns List of quick order products or undefined.\n */\n private _initQuickOrderGridProducts(): QuickOrderGridProduct[] {\n const products: QuickOrderTemplateLine[] = this.state.products;\n\n const quickOrderGridProduct: QuickOrderGridProduct[] = products.map((product: QuickOrderTemplateLine) => {\n return new QuickOrderGridProduct(product);\n });\n\n return ArrayExtensions.validValues(quickOrderGridProduct);\n }\n\n /**\n * Method to call on clear button.\n */\n private readonly _removeProductList = () => {\n const { context, data, telemetry, resources } = this.props;\n const { quickOrderTemplate } = data;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && quickOrderTemplate && quickOrderTemplate.result) {\n ProductListsDataActions.deleteAsync({ callerContext: context.actionContext }, quickOrderTemplate.result.productList)\n .then(() => {\n window.location.reload();\n })\n .catch((error: string) => {\n telemetry.warning('[quick-order-grid] Unable to delete product list.');\n telemetry.error(error);\n this._updateStatusState(\n resources.quickOrderGridDeleteProductListFailedText,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n });\n } else {\n telemetry.warning('[quick-order-grid] Failed to delete product list. Product List was not found');\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param className - Class name.\n * @returns JSX element.\n */\n private _renderQuickOrderTable(className: string): JSX.Element {\n const tableClassName = `${className}__table-list`;\n\n return (\n \n );\n }\n\n private _updateQuantitiesInState(product: SimpleProduct): void {\n const min: number = this._getMinQuantityForCartLineItem(this._isOrderQuantityLimitsFeatureEnabled, product);\n const max: number = this._getMaxQuantityForCartLineItem(\n this._isChannelLimitsFeatureEnabled || this._isOrderQuantityLimitsFeatureEnabled,\n product\n );\n let quantity: number = this._getQuantity(\n this._isOrderQuantityLimitsFeatureEnabled,\n this._applyDefaultOrderSettingsForCartLine,\n product\n );\n quantity = Math.max(quantity, min);\n\n this.setState({\n min,\n max,\n quantity\n });\n }\n\n private _getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (isOrderQuantityLimitsFeatureEnabled && product?.Behavior?.MinimumQuantity && product.Behavior.MinimumQuantity > 0) {\n return product.Behavior.MinimumQuantity;\n }\n\n return 1;\n }\n\n private _getMaxQuantityForCartLineItem(isQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (isQuantityLimitsFeatureEnabled && product?.Behavior?.MaximumQuantity && product.Behavior.MaximumQuantity > 0) {\n return product.Behavior.MaximumQuantity;\n }\n\n return this.props.context.app.config.maxQuantityForCartLineItem;\n }\n\n private _getQuantity(\n isOrderQuantityLimitsFeatureEnabled: boolean,\n applyDefaultOrderSettingsForCartLine: boolean,\n product: SimpleProduct\n ): number {\n let defaultQuantity = 1;\n\n if (!isOrderQuantityLimitsFeatureEnabled || !applyDefaultOrderSettingsForCartLine) {\n return defaultQuantity;\n }\n\n if (product?.Behavior?.DefaultQuantity && product.Behavior.DefaultQuantity > 0) {\n defaultQuantity = product.Behavior.DefaultQuantity;\n }\n\n return defaultQuantity;\n }\n\n /**\n * Method to called on product input change.\n * @param query - Product inventory info.\n */\n private readonly _handleInputChange = (query: string): void => {\n const queryMinLength = 4;\n if (!query || query.length > queryMinLength) {\n this.setState({ quantity: 0, productDimensions: [], productResponse: undefined });\n this._updateStatusState('', '', '', false);\n }\n if (this._cancellabelDebounce) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call -- existing code.\n this._cancellabelDebounce.cancel();\n }\n\n const { telemetry, context } = this.props;\n const zeroNumber = 0;\n if (!StringExtensions.isNullOrEmpty(query)) {\n this._cancellabelDebounce = debounce(() => {\n getScanResult(\n new GetScanResultInput(\n context.actionContext.requestContext.apiSettings,\n query,\n context.actionContext.requestContext.apiSettings.channelId\n ),\n this.props.context.actionContext\n )\n .then(results => {\n this.setState({\n productResponse: results?.Product,\n productDimensions: results?.ProductDimensionFull,\n isQuickOrderGridFormExpanded: true\n });\n if (results?.Product) {\n this._updateQuantitiesInState(results.Product);\n }\n })\n .catch((error: Error) => {\n telemetry.exception(error);\n telemetry.debug('Unable to get scan results');\n });\n }, this._waitTime);\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- Existing code.\n this._cancellabelDebounce();\n }, zeroNumber);\n this.setState({ isQuickOrderGridFormExpanded: true });\n } else {\n this.setState({ productResponse: undefined, isQuickOrderGridFormExpanded: true });\n }\n };\n\n /**\n * Method to called on quantity change.\n * @param value - Quantity value.\n */\n private readonly _handleQuantityChange = (value: string): void => {\n let currentValue = Number.parseInt(value, 10);\n const inputElement = this._quantityInput.current instanceof HTMLInputElement && this._quantityInput.current;\n const quantityChangeDebounceTimeout = 200;\n let minimumQuantity = 0;\n let needToUpdateUIValue: boolean = false;\n if (this._isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(this.state.productResponse?.Behavior)) {\n const behavior = this.state.productResponse!.Behavior;\n minimumQuantity = behavior?.MinimumQuantity ?? 0;\n const newCurrentValue = Math.max(currentValue, minimumQuantity);\n if (newCurrentValue !== currentValue) {\n needToUpdateUIValue = true;\n }\n currentValue = newCurrentValue;\n }\n\n this.setState({ quantity: currentValue }, () => {\n debounce(() => {\n if (needToUpdateUIValue && !Number.isNaN(this.state.quantity) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.value = currentValue.toString();\n }\n }, quantityChangeDebounceTimeout)();\n });\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionType - Dimension Type.\n * @param resources - String resources.\n * @returns Dropdwon label.\n */\n private readonly _getDropdownName = (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n const isGiftCard = this.state.productResponse?.IsGiftCard;\n\n switch (dimensionType) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n /**\n * Method to update dimension and product in UI.\n */\n private readonly _updateDimensions = async (): Promise => {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { productDimensions, productResponse } = this.state;\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n if (!productResponse || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this._dimensions };\n this.setState({ isUpdatingDimension: true });\n\n // eslint-disable-next-line no-console -- Testing.\n console.log(this.state.isUpdatingDimension);\n\n // Step 1: Update state to indicate which dimensions are selected\n if (this.state.productDimensionErrorState.otherError) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const clearOtherErrorState = { ...this.state.productDimensionErrorState };\n clearOtherErrorState.otherError = undefined;\n this.setState({ productDimensionErrorState: clearOtherErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const dimensionKey of Object.keys(dimensionsToUpdate)) {\n if (this.state.productDimensionErrorState.configureErrors[dimensionKey]) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors[dimensionKey] = undefined;\n\n this.setState({ productDimensionErrorState: errorState });\n }\n }\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension.DimensionValue;\n });\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n // eslint-disable-next-line no-async-promise-executor -- existing code\n const selectedProduct = new Promise(async resolve => {\n const newProduct = await getSelectedVariant(\n new SelectedVariantInput(\n productResponse.MasterProductId ? productResponse.MasterProductId : productResponse.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n if (newProduct) {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n ),\n actionContext\n );\n }\n\n resolve(newProduct);\n });\n\n const variantProduct = await selectedProduct;\n this.setState({ productResponse: variantProduct !== null ? variantProduct : undefined });\n };\n\n /**\n * Method to get updated dimension value.\n * @param productDimensionFull - Product dimension full.\n * @param newValueId - New Dimension value.\n * @returns Dimension Value.\n */\n private readonly _updateDimensionValue = (\n productDimensionFull: IDimensionForSelectedVariant,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionTypeValue - Dimension Type.\n * @param resources - String resources.\n * @param isGiftCard - Flag to check if its a giftcard product.\n * @returns Dropdwon error label.\n */\n private readonly _getDimensionErrorString = (\n dimensionTypeValue: number,\n resources: IQuickOrderGridResources,\n isGiftCard?: boolean\n ): string => {\n const amountErrorMessage = resources.quickOrderGridproductDimensionTypeAmountErrorMessage;\n\n switch (dimensionTypeValue) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.quickOrderGridproductDimensionTypeColorErrorMessage;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.quickOrderGridproductDimensionTypeConfigurationErrorMessage;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.quickOrderGridproductDimensionTypeSizeErrorMessage;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? amountErrorMessage : resources.quickOrderGridproductDimensionTypeStyleErrorMessage;\n default:\n return '';\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param productResponse - Simple Product.\n * @param quantity - Product Quantity.\n * @returns Flag to validate productlistline.\n */\n private readonly _validateCart = (productResponse: SimpleProduct, quantity: number): boolean => {\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- existing code\n const missingDimensions = productResponse.Dimensions?.filter(\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\n );\n const minimumQuantity = 0;\n if (ArrayExtensions.hasElements(missingDimensions)) {\n const userMessage = this._getConfigureErrors(missingDimensions, false);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code\n if (this.state.productDimensionErrorState.configureErrors) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors = userMessage;\n\n this.setState({ productDimensionErrorState: errorState });\n return false;\n }\n }\n\n if (quantity <= minimumQuantity) {\n const resources = this.props.resources;\n this._updateStatusState(resources.quickOrderGridWrongQuantityErrorMsg, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n }\n return true;\n };\n\n /**\n * Initial the products on quick order.\n * @param result - Simple Product.\n * @param isGiftCard - Product Quantity.\n * @returns Flag to validate cart.\n */\n private _getConfigureErrors(\n result: ProductDimension[] | undefined,\n isGiftCard?: boolean\n ): { [configureId: string]: string | undefined } {\n if (!result) {\n return {};\n }\n const dimensions: { [configureId: string]: string | undefined } = {};\n const resources = this.props.resources;\n for (const dimension of result) {\n dimensions[dimension.DimensionTypeValue] = this._getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\n }\n return dimensions;\n }\n\n /**\n * Method to call on quantity change in row.\n * @param itemKey - Product Key.\n * @param quantity - Product quantity.\n * @returns Flag to update status.\n */\n private readonly _changeRowQuantity = (itemKey: string | undefined, quantity: number): boolean => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n if (quickOrderTemplate?.result) {\n const quickOrderTemplateLinesData = quickOrderTemplate.result.quickOrderTemplateLines;\n if (ArrayExtensions.hasElements(quickOrderTemplateLinesData)) {\n const orderLineIndex = quickOrderTemplateLinesData.findIndex(\n (lines: QuickOrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...quickOrderTemplateLinesData[orderLineIndex] };\n if (quickOrderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return true;\n }\n const previousQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n ProductListsDataActions.updateProductListLinesAsync(\n { callerContext: context.actionContext },\n quickOrderTemplate.result.productList.Id,\n [line.productListLine]\n )\n .then(list => {\n if (ArrayExtensions.hasElements(list)) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n quickOrderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...quickOrderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedProductList = { ...quickOrderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveProductListInput(context.actionContext.requestContext),\n updatedProductList\n );\n return true;\n }\n\n return false;\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable to update product quantity.');\n telemetry.error(error.message);\n const userMessage = 'Failed to update quantity value.';\n newProductListLine.productListLine.Quantity = previousQuantity;\n this._updateStatusState(userMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n });\n }\n return false;\n }\n\n return false;\n };\n\n /**\n * Method to call on remove item from table.\n * @param line - Order Template Line.\n */\n private readonly _removeItemRowFromTable = (line: QuickOrderTemplateLine): void => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n\n if (quickOrderTemplate?.result) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken) {\n ProductListsDataActions.removeProductListLinesAsync(\n { callerContext: context.actionContext },\n line.productListLine.ProductListId!,\n [line.productListLine]\n )\n .then(() => {\n window.location.reload(false);\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable remove item from product list grid');\n telemetry.error(error.message);\n });\n } else {\n telemetry.warning('[quick-order-grid] Unable remove items from product list grid user token was not found');\n }\n }\n };\n\n /**\n * Method to call on add item from form.\n */\n private readonly _addItemToProductListLine = async (): Promise => {\n const {\n context: { actionContext },\n resources,\n telemetry\n } = this.props;\n const {\n quickOrderGridAddedToGridSuccessMessage,\n quickOrderGridAddedToGridFailureMessage,\n quickOrderGridAddedToGridDuplicateError\n } = resources;\n const { productResponse, quantity, productListId } = this.state;\n\n this._updateStatusState('', '', '', false);\n\n if (productResponse !== undefined && this._validateCart(productResponse, quantity)) {\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n await this._createProductList();\n }\n\n if (StringExtensions.isNullOrWhitespace(this.state.productListId)) {\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return;\n }\n const input = new AddItemToProductListInput(\n this.state.productListId,\n productResponse.RecordId,\n quantity,\n productResponse.DefaultUnitOfMeasure ?? 'ea'\n );\n\n await addItemToProductListAction(input, actionContext)\n .then(result => {\n if (result.ProductListId) {\n this._updateStatusState(quickOrderGridAddedToGridSuccessMessage, 'success', 'fas fa-check', true);\n window.location.reload();\n this.setState({});\n }\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error trying to Update Grid Line from the quick order grid');\n if (error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n this._updateStatusState(\n quickOrderGridAddedToGridDuplicateError,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n } else {\n this._updateStatusState(\n quickOrderGridAddedToGridFailureMessage,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n }\n });\n }\n };\n\n /**\n * Method to create product list.\n * @returns - ProductListId.\n */\n private _createProductList = async (): Promise => {\n const {\n context: { actionContext },\n telemetry,\n resources\n } = this.props;\n const { productListId } = this.state;\n const { quickOrderGridAddedToGridFailureMessage } = resources;\n\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n const input = new CreateProductListInput('', ProductListType.QuickOrder);\n\n await createProductList(input, actionContext)\n .then(result => {\n if (!StringExtensions.isNullOrWhitespace(result.Id)) {\n this.setState({ productListId: result.Id });\n return result.Id;\n }\n return '';\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error on creating productlist from quick order grid');\n telemetry.error(error.message);\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return '';\n });\n return '';\n }\n\n return productListId;\n };\n\n /**\n * Method to create product list.\n * @param messageText - Message Text.\n * @param statusCssString - Css class names.\n * @param messageGlyph - Glyph string.\n * @param isOpen - Flag to show.\n */\n private readonly _updateStatusState = (messageText: string, statusCssString: string, messageGlyph: string, isOpen: boolean): void => {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Showing user message in Form component.\n stateMessage: {\n messageText,\n statusCssString,\n messageGlyph,\n isOpen\n }\n });\n };\n}\nexport default QuickOrderGrid;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IErrorState } from '@msdyn365-commerce/components';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IDimensionForSelectedVariant, OrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { QuickOrderGridProduct } from './quick-order-grid-product';\n\n/**\n * QuickOrderGrid state message Interface.\n */\nexport interface IQuickOrderGridStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * QuickOrderGrid state Interface.\n */\nexport interface IQuickOrderGridState {\n isQuickOrderGridFormExpanded: boolean;\n isUpdatingDimension?: boolean;\n productResponse: SimpleProduct | undefined;\n productDimensions: IDimensionForSelectedVariant[] | undefined;\n min: number | undefined;\n max: number | undefined;\n quantity: number;\n stateMessage?: IQuickOrderGridStateMessage;\n topStateMessage?: IQuickOrderGridStateMessage;\n productDimensionErrorState: IErrorState;\n isMobile: boolean;\n products: OrderTemplateLine[];\n productListId: string;\n}\n\n/**\n * QuickOrder Grid Row view.\n */\nexport interface IQuickOrderGridRowViewModel extends OrderTemplateLine {\n isChecked: boolean;\n}\n\n/**\n * Interface for quick order callbacks.\n */\nexport interface IQuickOrderGridRowCallbacks {\n onRemoveItem(line: QuickOrderGridProduct): void;\n onChangeQuantity(orderTemplateLineId: string | undefined, quantity: number): boolean;\n}\n\n/**\n * Interface for quick order grid action view props.\n */\nexport interface IQuickOrderGridActionsViewProps {\n addProductListToBag: React.ReactNode;\n removeProductList?: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\nexport const RetailDefaultOrderQuantityLimitsFeatureName: string = 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature';\n\nexport const EcommerceQuantityLimitConfigurationsFeatureName: string =\n 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridViewProps, IQuickOrderGridFormViewProps } from './index';\n\n/**\n * Render product dimension/configure dropdown.\n * @param dropdown -- Product dimension drop down.\n * @returns Dropdown.\n */\nconst renderConfigureDropdown = (dropdown: IProductDimensionConfigureDropdownViewProps): JSX.Element => {\n const { containerProps, labelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n {heading}\n {errors}\n {select}\n \n );\n};\n\n/**\n * Render product dimension/configure container.\n * @param configure -- Product dimension configuration.\n * @returns Container to have dimension dropdown.\n */\nconst renderConfigure = (configure?: IProductDimensionConfigureViewProps): JSX.Element | null => {\n if (configure !== undefined) {\n const { containerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n }\n return null;\n};\n\n/**\n * Render product dimension/configure container.\n * @param form -- Form props.\n * @param isMobileView -- Flag to check mobile view.\n * @param quickOrderForm - Form component container.\n * @param quickOrderProductContent - Form product component.\n * @param quickOrderMessageContent - Form user message component.\n * @param configure - Product Dimension component.\n * @returns Jsx element of quick order form component.\n */\nconst renderForm = (\n form: IQuickOrderGridFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMessageContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n \n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.userMessage}\n {form.addToListBtn}\n \n \n ) : (\n \n {form.userMessage}\n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToListBtn}\n \n \n );\n};\n\n/**\n * Retrieves current sort criteria.\n * @param props - QuickOrder Grid view props.\n * @returns - Render View.\n */\nconst quickOrderGridView: React.FC = props => {\n const {\n quickOrderGridProps,\n contentProps,\n form,\n quickOrderGridForm,\n drawer,\n configure,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n isMobileView,\n header,\n container,\n actions,\n orderActions\n } = props;\n\n return (\n \n {header}\n {actions && (\n \n {orderActions?.userMessage}\n {orderActions?.addProductListToBag}\n {orderActions?.removeProductList}\n \n )}\n \n \n {renderForm(\n form as IQuickOrderGridFormViewProps,\n isMobileView,\n quickOrderGridForm,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n configure\n )}\n {props.bulkPurchase}\n \n \n {container}\n \n );\n};\n\nexport default quickOrderGridView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { format, INodeProps, Progress } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IHistogramItemsProps {\n ratingsSummary: RatingsSummary;\n resources: IHistogramItemsResources;\n locale: string;\n onClick(stars: number): void;\n}\n\nexport interface IHistogramItemsResources {\n barItemAriaLabel: string;\n}\n\nexport interface IHistogramItemViewProps {\n starLabel: React.ReactElement;\n bar: React.ReactElement;\n percentage: React.ReactElement;\n buttonProps: INodeProps;\n}\n\n/**\n * CartLineItems component.\n */\n\nexport const HistogramItems = (props: IHistogramItemsProps): IHistogramItemViewProps[] => {\n const { ratingsSummary } = props;\n const totalRatingsCount: number = ratingsSummary.totalRatingsCount || 0;\n if (totalRatingsCount === 0) {\n return [];\n }\n return [\n renderItem(props, 5, ratingsSummary.star5Count, totalRatingsCount),\n renderItem(props, 4, ratingsSummary.star4Count, totalRatingsCount),\n renderItem(props, 3, ratingsSummary.star3Count, totalRatingsCount),\n renderItem(props, 2, ratingsSummary.star2Count, totalRatingsCount),\n renderItem(props, 1, ratingsSummary.star1Count, totalRatingsCount)\n ];\n};\n\nconst renderItem = (props: IHistogramItemsProps, stars: number, count?: number, totalCount?: number): IHistogramItemViewProps => {\n count = count || 0;\n totalCount = totalCount || 0;\n const percentage = totalCount === 0 ? 0 : count / totalCount;\n const formattedPercent = new Intl.NumberFormat(props.locale, { style: 'percent' }).format(percentage);\n const ariaLabel = format(props.resources.barItemAriaLabel, stars, formattedPercent);\n\n return {\n starLabel: (\n \n ),\n percentage: (\n \n ),\n bar: ,\n buttonProps: {\n tag: 'button',\n className: 'ms-ratings-histogram__item',\n onClick: () => {\n props.onClick(stars);\n }\n }\n };\n};\n\nexport const AverageRatingNumber: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return (\n

\n {props.summary.averageRating}\n {` `}/ 5\n

\n );\n};\n\nexport const TotalReviews: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return

{props.summary.totalRatingsCount}

;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { format, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createRatingsReviewsStateInput } from '../../actions/ratings-reviews-state-data-action';\nimport { AverageRatingNumber, HistogramItems, IHistogramItemViewProps, TotalReviews } from './component/components';\nimport { IRatingsHistogramData } from './ratings-histogram.data';\nimport { IRatingsHistogramProps } from './ratings-histogram.props.autogenerated';\n\nexport interface IRatingsHistogramViewProps extends IRatingsHistogramProps {\n className: string;\n histogramItems: IHistogramItemViewProps[];\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n averageRating: React.ReactNode;\n averageNumber: React.ReactNode;\n totalReviews: React.ReactNode;\n histogramProps: INodeProps;\n ratingsSummaryProps: INodeProps;\n callbacks: IRatingsHistogramCallbacks;\n}\n\nexport interface IRatingsHistogramCallbacks {\n selectFilterBy(stars: number): void;\n}\n\n/**\n * RatingsHistogram component.\n * @extends {React.Component>}\n */\n@observer\nclass RatingsHistogram extends React.PureComponent> {\n constructor(props: IRatingsHistogramProps) {\n super(props);\n this.selectFilterBy = this.selectFilterBy.bind(this);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const ratingCount = ratingsSummary && ratingsSummary.totalRatingsCount ? `${ratingsSummary.totalRatingsCount}` : '0';\n\n const completeClass = classname('ms-ratings-histogram', className);\n const viewProps: IRatingsHistogramViewProps = {\n ...this.props,\n className: completeClass,\n callbacks: {\n selectFilterBy: this.selectFilterBy\n },\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n histogramItems: ratingsSummary\n ? HistogramItems({\n ratingsSummary,\n resources: { ...resources },\n locale: this.props.context.request.locale,\n onClick: this.selectFilterBy\n })\n : [],\n averageRating: ratingsSummary && (\n \n ),\n averageNumber: ratingsSummary && ,\n totalReviews: ratingsSummary && ,\n ratingsSummaryProps: { className: 'ms-ratings-histogram__summary' },\n heading: heading && (\n \n ),\n histogramProps: { className: 'ms-ratings-histogram__histogram' }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public selectFilterBy(stars: number): void {\n const filterKey = `${stars}`;\n this.props.context.actionContext.update(createRatingsReviewsStateInput({ filterKey }), { filterKey });\n }\n}\n\nexport default RatingsHistogram;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHistogramItemViewProps } from './component/components';\nimport { IRatingsHistogramViewProps } from './ratings-histogram';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAdditionalContentData, ILinksData } from '../video-player.props.autogenerated';\n\n/**\n * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content Component props.\n */\nexport interface IVideoPlayerAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData | undefined;\n handleAdditionalTextChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content view props.\n */\nexport interface IVideoPlayerAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n additionalContentItems?: IVideoPlayerAdditionalContentItemViewProps;\n}\n\n/**\n * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content Item view props.\n */\nexport interface IVideoPlayerAdditionalContentItemViewProps {\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentItemContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Video Player Additional content component props.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IVideoPlayerAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Video Player Additional content component props.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IVideoPlayerAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalParagraphChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Video Player Additional content component props.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IVideoPlayerAdditionalContentProps, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'ms-video-player__details__additional-content__cta__links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.openInNewTab,\n role: 'link'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Video Player additonal content item props.\n * @param props - Video Player Additional content component props.\n * @returns IVideoPlayerAdditionalContentItemViewProps.\n */\nconst getAdditionalContentItems = (\n item: IAdditionalContentData,\n props: IVideoPlayerAdditionalContentProps\n): IVideoPlayerAdditionalContentItemViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, index);\n });\n\n return {\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentItemContainer: { className: 'ms-video-player__details__additional-content__container' },\n additionalContentItemLinks: { className: 'ms-video-player__details__additional-content__cta' }\n };\n};\n\n/**\n * VideoPlayerAdditionalContent component.\n * @param props - Video Player Additional content component props.\n * @returns Video Player Additional content view props.\n */\nexport const videoPlayerAdditionalContent = (\n props: IVideoPlayerAdditionalContentProps\n): IVideoPlayerAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n const reactNodes: IVideoPlayerAdditionalContentItemViewProps = getAdditionalContentItems(additionalContent, props);\n return {\n additionalContentNode: { className: 'ms-video-player__details__additional-content' },\n additionalContentItems: reactNodes\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IPlayerData, IPlayerOptions, IPlayerResources, IVideoMetadata, Player } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IVideoPlayerAdditionalContentViewProps, videoPlayerAdditionalContent } from './components/additional-content';\nimport { ILinksData, IVideoPlayerConfig, IVideoPlayerProps } from './video-player.props.autogenerated';\n\nexport interface IVideoPlayerViewProps extends IVideoPlayerProps<{}> {\n player: React.ReactNode;\n title?: React.ReactNode;\n text?: React.ReactNode;\n links?: React.ReactNode;\n detailsContainer?: INodeProps;\n detailsContainerCta?: INodeProps;\n additionalContent?: IVideoPlayerAdditionalContentViewProps;\n handleText?(): void;\n handleParagraph?(): void;\n handleAdditionalText?(): void;\n handleAdditionalParagraph?(): void;\n handleLink?(): void;\n handleAdditionalLink?(): void;\n}\n\n/**\n *\n * VideoPlayer component.\n * @extends {React.PureComponent>}\n */\nclass VideoPlayer extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly isMobileDevice: boolean;\n\n public constructor(props: IVideoPlayerProps) {\n super(props);\n this.isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element {\n const options = {\n ...this.props.config,\n isMobileDevice: this.isMobileDevice\n };\n const video: MsDyn365.IVideoData = this.props.config.video;\n const playerResources: IPlayerResources = {\n playAriaLabel: this.props.resources.playLabel,\n pauseAriaLabel: this.props.resources.pauseLabel,\n playingAriaLabel: this.props.resources.playingLabel,\n pausedAriaLabel: this.props.resources.pausedLabel,\n muteAriaLabel: this.props.resources.muteLabel,\n unMuteAriaLabel: this.props.resources.unMuteLabel,\n fullScreenAriaLabel: this.props.resources.fullScreenLabel,\n exitFullScreenAriaLabel: this.props.resources.exitFullScreenLabel,\n seekBarLabel: this.props.resources.seekBarLabel,\n videoTimeDurationLabel: this.props.resources.videoTimeDurationLabel,\n closedCaptionLabel: this.props.resources.closedCaptionLabel\n };\n const videoMetaData: IVideoMetadata = {};\n\n if (video) {\n videoMetaData.videoId = video.id;\n videoMetaData.title = video.title;\n videoMetaData.duration = video.playTime;\n\n if (video.thumbnail) {\n videoMetaData.posterframeUrl = video.thumbnail.src;\n }\n\n if (video._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = video._links.binaryReferences;\n }\n }\n const videoPlayerData: IPlayerData = { options: options as IPlayerOptions, metaData: videoMetaData };\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n\n player: (\n \n \n \n ),\n title: this._getVideoDetailsHeading(),\n text: this._getVideoDetailsParagraph(),\n links: this._getVideoDetailsLinks(),\n detailsContainer: { className: 'ms-video-player__details' },\n detailsContainerCTA: { className: 'ms-video-player__details__cta' },\n additionalContent: videoPlayerAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleText: this.handleTextChange,\n handleParagraph: this.handleParagraphChange,\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleLink: this.handleLinkTextChange,\n handleAdditionalLink: this.handleAdditionalTextChange\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * Handle text change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Handle paragraph change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * Handle additional text change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalTextChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.heading = event.target.value;\n }\n }\n\n /**\n * Handle additional link text change.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n const additionalContent = this.props.config.additionalContent ?? {};\n if (additionalContent.links) {\n additionalContent.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * Handle additional paragraph change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalParagraphChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.subtext = event.target.value;\n }\n }\n\n /**\n * Get video details links.\n * @returns - React node.\n */\n private _getVideoDetailsLinks(): React.ReactNode[] | undefined {\n const { links } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n\n return links?.map((linkData: ILinksData, index: number) => {\n payLoad.contentAction.etext = linkData.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const linkId = index;\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: linkData.ariaLabel,\n className: 'ms-video-player__details__cta__link',\n linkText: linkData.linkText,\n linkUrl: linkData.linkUrl.destinationUrl,\n openInNewTab: linkData.openInNewTab,\n role: 'button',\n additionalProperties: attributes\n };\n\n return (\n {\n this.handleLinkTextChange(index, event);\n },\n requestContext: this.props.context.request\n }}\n />\n );\n });\n }\n\n private _getVideoDetailsHeading(): React.ReactNode | undefined {\n const { heading } = this.props.config;\n\n return (\n heading && (\n \n )\n );\n }\n\n private _getVideoDetailsParagraph(): React.ReactNode | undefined {\n const { paragraph } = this.props.config;\n\n return (\n paragraph && (\n \n )\n );\n }\n}\n\nexport default VideoPlayer;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IVideoPlayerAdditionalContentViewProps, IVideoPlayerViewProps } from './index';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IVideoPlayerAdditionalContentViewProps) => {\n if (additionalContent.additionalContentItems) {\n return (\n \n <>\n {additionalContent.additionalContentItems.heading}\n \n {additionalContent.additionalContentItems.text}\n \n {additionalContent.additionalContentItems.links}\n \n \n \n \n );\n }\n\n return null;\n};\n\nconst VideoPlayerView: React.FC = props => {\n return (\n
\n {props.player}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n
\n );\n};\n\nexport default VideoPlayerView;\n"],"names":["filterDeliveryModeOption","useDefaultDeliveryOption","HeadingTag","_ref","description","React","className","message","title","isChecked","value","ariaSetSize","ariaPosInSet","ariaLabel","onChange","checked","type","name","FilterDeliveryModeOption","CheckoutDeliveryOptions","constructor","selectedItemId","deliveryOptions","isLoading","checkoutErrorRef","init","async","this","props","moduleState","onEdit","onCancel","onSubmit","status","canShip","cartDeliveryMode","getSavedDeliveryOption","loadDeliveryOptions","getCartLinesForShipping","length","getDeliveryOptionSelected","selectedItem","find","deliveryOption","Code","id","typeName","context","priceFree","resources","price","get","channelConfig","request","channel","DeliveryOption","DescriptionComponent","Object","assign","Description","PriceComponent","data","CustomerContextualPrice","freePriceText","currencyCode","Currency","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","tag","role","ErrorTitleComponent","ErrorMessageComponent","errorMessage","getDeliveryOptionList","count","map","index","code","radioButton","RadioButtonComponent","onDeliveryOptionChange","getSaveButton","saveBtnLabel","Button","color","disabled","onClick","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","telemetry","error","setHasError","onUpdating","clearError","undefined","information","updateCartDeliverySpecification","savedDeliveryOption","onReady","cartLinesForShipping","DeliveryMode","deliveryModeId","trim","checkoutState","checkout","result","updateCartDeliverySpecificationInput","shippingAddress","onPending","checkoutCart","then","response","_response$errorDetail","errorDetails","LocalizedMessage","StringExtensions","isNullOrEmpty","genericErrorMessage","setIsCancellable","catch","pickupDeliveryModeCode","PickupDeliveryModeCode","cart","CartLines","filter","cartLine","getDeliveryOptions","_this$props$data$chec","config","cartState","cartId","Id","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","deliveryOptionFilter","none","None","filterOutNonCarrierDeliveryMode","FilterOutNonCarrierDeliveryMode","getDeliveryOptionsAsync","callerContext","actionContext","queryResultSettings","_this$props$data$chec2","deliveryOptionsNotFound","isDeliveryModeExists","ShippingAddress","deliveryMode","event","currentTarget","_this$props$data$cart","_this$props$data$cart2","properties","ExtensionProperties","property","Key","Value","StringValue","JSON","parse","_this$expressPaymentD","_this$expressPaymentD2","expressPaymentDetailsFromCartPage","isExpressCheckoutAppliedInCartPage","_this$props$data$chec3","reaction","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec4","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec5","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","render","isReady","isUpdating","hasError","console","log","isError","isShowList","isShowSelected","viewProps","_objectSpread","deliveryOptionsData","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","moduleProps","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","Waiting","saveButton","editButton","cancelButton","renderView","__decorate","observable","action","withModuleState","observer","DeliveryOptionList","Node","key","DeliveryOptionSelected","_ref2","ErrorMessage","_ref3","Error","Module","ref","CheckoutErrors","setCheckoutErrors","errorCode","isExpressCheckoutApplied","ctx","apiError","clientCheckoutError","consoleCheckoutErrors","getCheckoutState","exception","checkoutErrorsList","Console","consoleCheckoutError","errorMessageResource","push","getCheckoutErrorMessage","CheckoutPaymentInstrument","Checkout","updateCheckoutError","newCheckoutError","updateShouldFocusOnCheckoutError","newShouldFocusOnCheckoutError","genericError","current","scrollIntoView","updateCheckoutErrorFocus","newCheckoutErrorFocus","setCheckoutErrorFocus","checkoutModuleId","checkoutModule","keys","includes","errorMessageFromAPI","errorResource","resource","ActionError","ErrorCode","ErrorMessageResource","checkoutTimeoutErrorMessage","Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard","blockedLoyaltyCardErrorMessage","CheckoutLoyalty","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue","customerAccountLimitSignDifferentFromAmountDueErrorMessage","CheckoutCustomerAccountPayment","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit","customerAccountPaymentExceedsAvailableCreditLimitErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit","customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems","customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount","customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices","customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_FraudRisk","fraudRiskErrorMessage","Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed","giftCardBalanceInquiryFailedErrorMessage","CheckoutGiftCard","Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch","giftCardCurrencyMismatchErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion","invalidCartVersionErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber","invalidLoyaltyCardNumberErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest","invalidPaymentRequestErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console","invalidPaymentRequestConsoleErrorMessage","Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines","missingRequiredCartTenderLinesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed","multipleCustomerAccountPaymentsNotAllowedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender","noMoreThanOneLoyaltyTenderErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry","noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard","noTenderLoyaltyCardErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints","notEnoughRewardPointsErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided","paymentAlreadyVoidedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance","paymentAmountExceedsGiftBalanceErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties","paymentRequiresMerchantPropertiesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console","paymentRequiresMerchantPropertiesConsoleErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount","paymentUsingUnauthorizedAccountErrorMessage","Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed","refundAmountMoreThanAllowedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","unableToAuthorizePaymentErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired","unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported","unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment","unableToCancelPaymentErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo","unableToReadCardTokenInfoErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult","unableToRetrieveCardPaymentAcceptResultErrorMessage","getLineItems","input","_getLineItemComponent","_input$data$catalogs","product","ProductId","productId","_product","RecordId","imageSettings","showShippingChargesForLineItems","quantityDisplayString","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","configString","inputQuantityAriaLabel","discountStringText","shippingCharges","gridSettings","catalogs","CartLineItemComponent","sizeString","colorString","styleString","originalPriceText","currentPriceText","shippingChargesText","salesAgreementPricePrompt","isQuantityEditable","productUrl","getProductUrlSync","primaryImageUrl","PrimaryImageUrl","priceCurrency","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","PickUpAtStore","label","location","_getLineItemsComponents","items","orgUnitLocations","FulfillmentStoreId","locationMatch","InventoryLocationId","OrgUnitName","_getDeliveryLocation","isPickUp","LineId","LineItem","item","pickUpAtStore","_getLineItemsByDeliveryType","_filterItemsByDiliveryType","_getGroupTitleComponent","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","suffix","replace","toString","reduce","Quantity","_countItems","LineItemDeliveryGroup","classnames","LineItemList","heading","lineItems","_getLineItems","lineItemsHeading","products","editCartText","LineItems","Header","Heading","editLink","href","getUrlSync","itemsForPickup","itemsForShip","OrderSummaryLine","toBeCalculatedText","freeText","cssLabel","_buildOrderSummarySection","_computedLoyaltyAmount","loyaltyAmount","OrderSummary","NetPrice","TaxAmount","DiscountAmountWithoutTax","TotalAmount","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","channelConfiguration","cartLines","deliveryModes","freightFeeFromCart","ChargeAmount","freightFeeFromCartLines","ChargeLines","chargeTotal","chargeLine","IsShipping","CalculatedAmount","some","reactNodes","subtotal","subTotalLabel","tax","taxLabel","orderTotal","orderTotalLabel","shipping","shippingLabel","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCards","giftCardCounter","giftCard","Balance","amount","Math","min","totalAmountAfterGiftCard","loyalty","loyaltyLabel","giftcardLabel","totalDiscounts","totalDiscountsLabel","getOrderSummary","orderSummaryHeading","customerAccountLabel","showLineItems","orderSummaryProps","lines","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","hasControlGroup","saveAndContinueBtnLabel","canSubmit","canCancel","focusOnFirstFocusableElement","node","ReactDOM","child","querySelector","focus","focusOnEditButton","scrollToTitle","formCard","isMobile","getTitle","step","headingTag","Tag","text","_getModules","_getId","componentDidUpdate","prevProps","isActive","onNext","shouldFocus","children","childrenModules","childModule","childId","childState","getModule","isExpanded","isPending","hasInitialized","changeBtnLabel","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","innerRef","CheckoutGuidedForm","state","currentStep","_enableAfterModule","childIds","Boolean","i","nextChildId","_isPaymentSectionContainer","moduleId","_sectionState$childId","sectionState","ArrayExtensions","hasElements","currentId","getEnabledModules","isDisabled","getStep","indexOf","getId","getHeading","moduleChildId","isEditor","shouldEnableSinglePaymentAuthorizationCheckout","setState","componentDidMount","previousModuleHasError","_this$props$requestCo","hasModuleState","shouldFocusOnCheckoutError","GuidedCard","disableGuidedCheckoutFlow","requestContext","enableControl","placeOrderText","canPlaceOrder","placeOrder","isBusy","setIsBusy","useState","OPERATIONS","getCardTypeId","cardPrefix","arguments","resolveCardTypesAsync","CardType","Unknown","TypeId","findTenderIdTypeByOperationId","tenderTypes","operationId","matchedTenderType","tenderType","OperationId","TenderTypeId","roundNumber","Number","toFixed","CartCheckout","updatedCartVersion","isPaymentVerificationRedirection","giftCardExtends","tokenizedPaymentCard","guestCheckoutEmail","billingAddress","cardPaymentAcceptResult","isExpressAddressApplied","cartTenderLines","amountDue","AmountDue","getTenderLinePromises","loyaltyCardNumber","LoyaltyCardId","chargedAmount","loyaltyTenderLinePromise","Amount","getTenderTypesAsync","getLoyaltyTenderLine","customerAccountAmount","customerAccountTenderLinePromise","CustomerId","user","isAuthenticated","createCustomerAccountTenderLine","giftCardExtend","_giftCardExtend$Expir","_giftCardExtend$Expir2","tenderTypeId","giftCardPin","Pin","giftCardExpirationYear","ExpirationDate","parseInt","split","giftCardExpirationMonth","creditCardTenderLinePromise","GiftCardId","GiftCardPin","GiftCardExpirationYear","GiftCardExpirationMonth","getGiftCardTenderLine","currency","TokenizedPaymentCard","House","Phone","Country","ThreeLetterISORegionName","Address1","Street","City","State","Zip","ZipCode","CardPaymentAcceptResult","getCreditCardTenderLineForSinglePaymentAuth","_tokenizedPaymentCard","cartTypeId","CardTypeId","TenderType","cardTenderLine","CardTokenInfo","getCreditCardTenderLine","Promise","all","cartVersion","Version","salesOrder","checkoutAsync","bypassCache","_error$data","_error$data2","_cardPaymentAcceptRes","_cardPaymentAcceptRes2","AdditionalContext","warning","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","updateRedirectAdditionalContext","newRedirectAdditionalContext","updateRedirectPaymentConnectorId","newRedirectPaymentConnectorId","Settings","PaymentConnectorId","updateIsCheckoutCallFailed","newIsCheckoutCallFailed","updateCheckoutErrorPaymentConnectorId","newCheckoutErrorPaymentConnectorId","refreshCart","updateIsExpressCheckoutApplied","newIsExpressCheckoutApplied","PlaceOrder","orderedProducts","redirect","resolve","reject","lineItemIdsToRemove","getCartState","activeCart","activeCartLine","checkoutCartLine","removeCartLines","cartLineIds","removeAllPromoCodes","removeCheckoutCartId","EmptyActiveCart","orderConfirmationUrl","separator","url","window","updateSalesOrder","newSalesOrder","newOrderedProducts","PaymentConnectorPostMessageType","AsyncResultStatusCode","isPlaceOrderClicked","getSlotItems","slots","onPlaceOrder","orderConfirmation","hasOrderConfirmation","handleCheckoutError","_setErrorMessage","_saveShippingAndBillingAddress","address","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","TwoLetterISORegionName","Name","NameOnCard","StreetNumber","Address2","timeoutErrorMessage","checkoutResult","statusCode","isPlaceOrderLoading","isEditorialMode","cartStatus","isEmpty","_this$props$data$chec6","when","asyncResultStatus","LOADING","_this$props$data$chec7","_this$props$data$chec10","email","tenderLine","paymentTenderType","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","_this$props$data$chec8","_this$props$data$chec9","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newTenderLine","newTokenizedPaymentCard","newPaymentTenderType","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","isEmptyCart","editCartLink","_this$props$data$chec11","_this$props$data$chec12","checkoutErrorLocation","checkoutPaymentErrorLocation","_this$props$data$chec13","_this$props$data$chec14","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","_this$props$data$chec19","_this$props$data$chec20","_this$props$data$chec21","checkoutHeading","backToShopping","cookieConsentRequiredMessage","checkoutClass","allCheckoutInformation","checkoutInformation","info","checkoutExpressPaymentContainer","isConsentGiven","cookies","device","Type","backToShoppingUrl","hasSalesOrder","checkoutProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","alert","AlertComponent","loading","canShow","guidedForm","GuidedFormComponent","orderSummary","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","values","every","SUCCESS","FAILED","computed","PickUpAtStoreComponent","LineItemComponent","LineItemGroupComponent","lineItem","LineItemsComponent","_ref4","OrderSummaryComponent","_ref5","customerAccount","getTenderIdOperationIdMap","countItems","salesLines","salesLine","getSalesLinesByDelivery","defaultImageSettings","viewports","xs","q","w","h","lg","lazyload","getSalesStatusCode","deliveryType","statusValue","QuantityInvoiced","QuantityOrdered","groupSalesLines","flatGroup","group","groupBy","entries","forEach","groupByDeliveryType","salesStatus","getGroupBySalesStatusCode","groupBySalesStatusCode","getGroupByAddressId","addressId","groupByAddressId","TrackingId","getGroupByTrackingId","trackingId","groupByTrackingId","getGroups","moduleName","customerName","isOboRequest","orderItemLabel","orderItemsLabel","shippingItemToOBOCustomerLabel","groups","_salesLines","groupProps","salesLinesProps","trackingInfo","isProcessing","delivery","deliveryProps","processing","groupsProps","getPlacedBy","originator","isYou","orderPlacedByFullText","orderPlacedByYouText","orderOnBehalfOfText","placedByNode","placedByName","StaffId","StaffName","CustomerName","onBehalfOfText","getOrderInformation","channelReferenceId","receiptEmail","createdDate","priceContext","salesId","receiptEmailMessage","processingLabel","orderIdLabel","confirmationIdLabel","orderInformationProps","placedBy","isOnlineStoreChannel","channelTypeValue","channelAddress","getOrderChannelTypeValue","order","channelIdentities","orderChannel","ChannelId","ChannelType","getOrderChannelAddress","_orderOrgUnitLocation","orderOrgUnitLocation","Address","getOrderInfomationInput","customer","showChannelInfo","isSalesInvoice","shouldShowQrCode","apiSettings","channelId","locale","SalesLines","AccountNumber","isYouObo","CreatedDateTime","Date","toLocaleDateString","SalesId","CurrencyCode","isB2bAdmin","IsB2bAdmin","ReceiptEmail","ChannelReferenceId","isOnlineStore","shipToLabel","storeLabel","phoneLabel","phoneAriaLabel","FullAddress","deliveryTypeEnum","getDeliveryTypeClassName","deliveryTypeStringMap","retailMultiplePickupOption","ship","carryOut","pickUp","getSalesLine","moduleComponentProps","shipment","isCurrentChannel","imageOnly","salesLineQuantityText","buyItAgainLabel","buyItAgainAriaLabel","orderStatusReadyForPickup","orderStatusProcessing","orderStatusShipped","orderStatusPickedUp","orderStatusCanceled","orderStatusPartialShipped","pickedUpSalesLines","deliveredSalesLines","trackingLabel","trackingAriaLabel","trackingComingSoonLabel","salesStatusStringMap","canceled","readyForPickup","pickedUp","shipped","partialShipped","unknown","SalesStatusValue","salesStatusString","deliveryTypeClass","deliveryTypeString","deliveryTypeComp","LabelComponent","salesStatusComp","target","rel","TrackingNumber","salesLineProps","Image","altText","src","loadFailureBehavior","isSalesLine","buyAgainButton","getSalesLines","shipments","newSalesLine","getSalesLinesInput","Shipments","getOrderDetailsHelp","needHelpLabel","helpLineNumberLabel","contactNumber","helpLineContactAriaLabel","helpProps","getOrderDetailsOrderSummary","earnedPoints","orderSummaryItemsTotalLabel","orderSummaryShippingFeeLabel","orderSummaryTaxLabel","orderSummaryGrandTotalLabel","pointsEarnedLabel","SubtotalAmount","GrossAmount","zeroAmount","totalAmount","getLastFourDigit","digits","substr","getOrderDetailsPaymentMethods","tenderLines","tenderIdOperationIdMap","paymentMethodsTitle","creditCardEndingLabel","giftCardEndingLabel","amountCoveredLabel","loyaltyCardUsedLabel","cashUsedLabel","paymentMethodsProps","methods","MaskedCardNumber","getCard","getGiftCertificate","getLoyalty","getCash","OrderDetails","super","_isSelectionModeEnabled","loyaltyCard","RewardPoints","pointPrograms","point","RewardPointId","rewardLines","LoyaltyRewardPointLines","total","line","RewardPointAmountQuantity","TenderLines","_this$props$data$chan","_this$props$data$orgU","noSalesOrderText","loadingLabel","customerInformation","originators","orderOriginators","channels","orderInformationInput","orderInformation","backToShoppingLink","footerProps","isUserTypeB2B","isDataReady","salesLinesInput","orderInfomationInput","orderInfomation","payment","help","OrderDetailsOrderInfomation","OrderDetailsSalesLine","OrderDetailsGroupDelivery","OrderDetailsGroup","OrderDetailsGroups","OrderDetailsOrderSummary","_ref6","OrderDetailsPayment","_ref7","OrderDetailsHelp","_ref8","_ref9","GetSalesOrderHistoryWithHydrationsInput","paging","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getSalesOrderHistoryWithHydrationsAction","salesOrders","accountNumber","customerAccountNumber","getOrderShipmentsHistoryAsync","Paging","Top","top","Skip","skip","NextPageToken","nextPageToken","getOrderShipmentHistory","prodIdsByChannel","childrenEntry","prodId","getProductsPromise","cId","prodIds","productIds","productInputs","ProductInput","getSimpleProducts","getProducts","productList","memo","debug","createObservableDataAction","channelName","posChannelNameText","onlineStoreChannelNameText","carryOutSalesLines","TrackingUrl","_shipment","ShipmentId","getSalesOrder","detailsAriaLabel","detailsLabel","salesOrderProps","TransactionId","orderDetailsLink","_getorderDetailsPageUrl","GetOrderOriginatorsInput","transactionIds","salesIds","searchCriteria","TransactionIds","SalesIds","getOriginatorsAction","SalesOrdersDataActions","inputData","_inputData$requestCon","transactionId","query","OrderHistory","onMoreButtonClick","getOrderHistory","orderHistory","isShowMoreButton","pageSize","getOriginator","_error$error","_error$error2","Msdyn365","_order$SalesId","_order$TransactionId","originatorsInput","originatorList","ex","shouldShowCount","noOrderHistoryLable","moreButtonText","orderCountLabel","ordersCountLabel","orderHistoryProps","header","emptyMessage","_orderCountLabel","listProps","o","moreButton","OrderHistoryView","getOrderProducts","j","k","_salesLine$data$produ","_salesLine$data$produ2","pId","ItemId","pName","pQuantity","OrderHistoryList","prodInformation","prod","findIndex","y","productInformation","OrderHistorySalesOder","_index","renderHeadingRow","orderSummaryLabel","orderDescriptionLabel","orderStatusLabel","orderActionLabel","dateTime","substring","orderInfo","createdDateTime","orderID","OrderHistoryOrderInfomation","SalesStatus","confirmationIDLabel","cultureFormatter","productInfo","currOrderProductsInfo","currentOrderProducts","word","toUpperCase","join","currentOrderInfo","formatCurrency","OrderHistoryGroup","OrderHistoryGroups","OrderHistoryHeader","orderHeadingLabel","orderStatus","salesStatusCode","salesID","currentSalesOrder","currentSalesOrderIndex","_currentSalesOrder$Sa","_currentSalesOrder$Sa2","checkImage","path","img","onload","onerror","VendorLogo","logoUrl","alt","CartView","getSitePath","sitePath","_renderCartlines","cartEmptyText","CartlinesWrapper","storeSelector","backToShoppingButton","waitingComponent","cartLoadingStatus","cartDataResult","homeUrl","requestUrl","origin","cartProduct","_cart","cartline","pickUpInStore","ContainerProps","defaultComponent","isCartEmpty","removeClickHandler","_removeItemFromCartHandler","removeCartButtonText","addToWishlist","backToShoppingButtonTitle","goBack","history","back","cartlineToRemove","handleClickDelivery","isOpenDelivery","handleClick","isOpen","getCheckoutURL","guestCheckoutUrl","signInUrl","isAbsoluteUrl","RegExp","test","returnURL","MsDyn365","isBrowser","checkoutAsSignedInUserBtn","checkoutURL","checkoutButtonTitle","checkoutAsGuestBtn","guestCheckoutButtonTitle","cartlines","standardDeliveryPrice","expressDeliveryPrice","showfreeShippingPrompt","homeDeliveryText","standardDeliveryText","expressDeliveryText","preFreeShippingDiscountText","postFreeShippingDiscountText","qualifyForFreeDeliveryAmount","cartAmount","freeDeliveryAmount","cartAmountDue","BasePrice","renderModuleAttributes","emptyCartText","style","listStyleType","OrderSummaryWrapper","Collapse","timeout","promoCode","isCartLine","ProductCard","getDataOnUpdate","renderLabel","rating","ratingAriaLabel","ratingLabel","roundedRating","format","renderDescription","renderProductPlacementImage","imageUrl","imageProps","itemId","updatedItemId","vendorImageUrl","baseImageUrl","recordId","matchingDimensionValues","isVendorLogoAvailable","vendorLogo","dimensionTypeValue","swatches","getDimensionValuesAsync","renderSwatches","arr","dimensionValue","colorName","colorId","DimensionId","swatch","backgroundImageUrl","backgroundImage","backgroundColor","renderPrice","basePrice","adjustedPrice","savingsText","AdjustedPrice","renderPriceRange","priceRangeAttribute","_getAttributeValue","discountedPriceRangeAttribute","priceRanges","TextValue","discountedPriceRangesValue","discountedPriceRanges","lowerPrice","higherPrice","discountedLowerPrice","discountedHigherPrice","discount","Price","getProductPageUrlSync","AverageRating","attributeName","AttributeValues","x","PromoCode","_onInputChange","e","promoCodeInputValue","canApply","_applyPromotion","appliedPromo","addPromoCode","substatus","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","_renderForm","promoPlaceholderText","promoCodeApplyButtonText","preventDefault","placeholder","_removePromotion","getAttribute","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_calculateDiscount","discountAmount","DiscountLines","discountLine","DiscountCode","DiscountCost","_renderAppliedPromoCode","Coupons","coupon","removePromoAriaLabelFormat","removePromoText","isCollapseOpen","HeaderView","togglePopOver","signinPopoverOpen","getUserOptions","popOverRef","getSignInButton","signInLinkText","signInLinkAriaText","getSignUpButton","signUpUrl","getDropdownPopoverConentContainer","Popover","placement","toggle","getAccountInfoDropdownButton","FirstName","getSignInDropdownPopoverConentContainer","renderDesktopAccountBlock","AccountInfoDropdownParentContainer","accountLinks","signOutLink","accountInformation","welcomeText","helloText","accountInfoDropdownButton","AccountInfoDropdownPopoverConentContainer","userOptionsDropDownContainer","userOptionsButton","signInButton","signUpButton","onMouseEnter","onMouseLeave","link","renderReactFragment","slot","_togglePopover","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","_data$accountInformat","HeaderTag","HeaderContainer","HeaderTopBarContainer","MobileMenuContainer","MobileMenuBodyContainer","MobileMenuLinksContainer","signOutUrl","homePageLink","contactUsLink","signoutLinkText","registerLinkText","cartLabel","cartQtyLabel","cartIconSlot","_getSlot","navIcon","logo","search","MobileMenuHeader","menuBar","signInLink","isUserSignedIn","CartIconComponent","linkText","linkUrl","destinationUrl","slotName","CheckoutView","toggleChange","renderCheckBox","termsConditionsUrl","acceptTermsAndConditionText","totalItems","_editLink","_heading","TotalItems","totalItemsText","cartUrl","toolTipText","mobileView","BulkPurchase","_errorCssClass","_errorCssGlyphClass","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_onErrorMessage","stateMessage","messageText","statusCssString","messageGlyph","_toggleCollapse","_this$props$data$prod","hasDimensionsInProps","productDimensions","hasDimensionsInData","container","content","_renderCollapseContent","_renderCollapseButton","_renderCollapse","bulkPurchaseHeaderTitle","_renderMainContent","isMobileDevice","variant","VariantType","Viewport","userMessageNode","Alert","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_featureState$result","_this$props$data$orde","_this$props$data$cust","featureState","isMultipleCatalogsFeatureEnabled","IsEnabled","catalogId","getCatalogId","validateCatalogId","ProductDimensionsMatrix","dimensions","orderTemplates","dimensionOnChange","onErrorMessage","isMultipleCatalogFeatureEnabledInHq","BulkPurchaseViewComponent","validateCartAsync","propsContext","cartResult","shouldRetry","AsyncResult","_validationResult$Val","validationResult","CartsDataActions","ValidationResultsByLineId","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","Behavior","MaximumQuantity","cartLineId","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","getProductByProductId","getProductByProductIdAndWarehouse","warehouseId","targetWarehouseValue","WarehouseId","_product$Behavior","_renderDeliveryLocation","deliverylocation","_foundProductDelivery","orgUnitName","_getOrgUnitName","foundProductDeliveryOption","productDeliveryOptions","DeliveryOptions","option","shippingText","_renderStoreLocation","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","_assembleCartlines","foundProductAvailability","_foundProductAvailabi","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","_assembleNode","foundProductDeliveryOptions","removeButtonText","removeItemClickHandler","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","payLoad","getPayloadObject","TelemetryConstant","RemoveCartItem","removeCartItemAttribute","getTelemetryAttributes","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","searchParams","set","CatalogId","currentQuantity","isOutOfStock","displayMode","channelDeliveryOptionConfig","deliveryLocation","remove","storeLocation","getMiniCartData","miniCartData","hasInvoiceLine","getActiveCartProductsAction","ActiveCartProductsInput","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","CartIcon","retailMultiplePickUpOptionEnabled","getSortedCartLines","sortOrder","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","sm","isCartValid","payload","TelemetryEvent","CheckOut","checkoutBySignInAttributes","contentAction","etext","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_setQuantityLimitsFeatureFlag","_validateCart","shouldComponentUpdate","nextProps","nextState","_this$props$context$r","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$feat","enableHoverCart","isAnonymousCheckout","_getCheckoutURL","shouldShowMiniCart","isProductAddedToCart","app","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","EmailDeliveryModeCode","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","includeFlyout","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","flyoutTitle","flyoutTooltip","UncontrolledTooltip","hideArrow","trigger","shouldShowCloseButton","cartPageUrl","hideAriaHidden","priceString","totalPriceFormatString","feature","cartIcon","FlyoutContainer","miniCartWrapper","miniCartItemWrapper","checkoutAsSignInUserButton","checkoutAsGuestButton","goToCartButton","checkoutBlockedDueToUnavailableFunds","totalPrice","_cart$result$cart$Ver","_cart$result","lastValidatedCartVersion","ValidationResultsPairs","urlCheck","msdyn365Commerce","_this$props$data$cata","FlyoutCartLineItems","cartLinesSortOrder","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","productDimensionTypeConfiguration","quantityDisplayText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","_featureStatuses$find","_featureStatuses$find2","featureStatuses","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find3","customerInfo","IsB2b","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","ProductPickUpOptionsForCartLineItems","getPickUpOptionsForCartLineItems","ProductsDataActions","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","PickUpInStore","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","storeSelectorModuleId","openDialog","alreadySelectedLocation","onLocationSelected","updateCartLinePickupLocation","locationChangedHandler","_onLocationChangedCallback","clearCartLinePickupLocation","_props$channelDeliver","retailMulitplePickupFeatureState","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","pickup","deliveryCode","PickupDeliveryModeCodes","callbacks","toggleBopis","_renderShippingMethod","shipItText","pickupInStoretext","changeStoreText","bopisSelected","toggleBOPIS","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","productPickUpOptions","_product$Dimensions","_props$cartState","_context$request$chan","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","wishlists","defaultWishlistName","nameOfWishlist","IsProductAvailable","shouldSkipStockCheck","IsInvoiceLine","ObjectExtensions","isNullOrUndefined","_getErrorMessage","lineId","_props$productAvailab","finalErrorMessages","includeErrors","checkForErrors","cartlinesErrors","errorsFoundByLineId","ValidationFailures","validation","ErrorContext","RemoveFromCart","attributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","toLowerCase","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","getInvoiceDetailsPageUrlSync","cartlineId","lineIndex","quantityOnChange","updateCartLinesQuantitySuccessHandler","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","pickitUpText","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","shouldShowButtonFailedTooltip","disableButton","disableTooltip","assembleCartlines","isPickUpItem","isCartLineItemPickUpType","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","CartLineGroupItems","_assembleGroupInvoiceCartlines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","groupDelivery","cartLinesGroup","getPromotionData","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","Cart","_isMounted","promotionPopupId","promotionLinkClick","showPromotionDialog","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","removeItemFromCartHandler","validateCart","updateCartlineQuantity","cartlineToUpdate","cartActionResult","_cartActionResult$err","lineUpdateFailure","validationResults","fulfillmentStoreIdUpdated","bind","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","_this$props$data$cart3","componentWillUnmount","RetailMultiplePickupFeatureState","multiplePickUpEnabled","currentCatalogId","getCartLinesGroup","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","cartTitle","OrderSummaryItems","_getPromoCode","_getPromotions","invoiceSummaryTitle","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","showGuestCheckoutButton","expressCheckoutButton","paymentExpress","ExpressCheckoutSectionWrapper","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","cartLoadingErrorMessage","OrderSummaryErrors","_getOrderSummaryErrors","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","tabIndex","promotionDialog","Modal","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","Wrapper","assertive","outOfStockErrorMessageHeader","errors","InvoiceSummary","totalAmountLabel","invoiceLabel","_this$props","_featureState$result2","_this$props$context$r2","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","itemsWithCountLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","estimatedTaxLabel","yetToBeCalculatedText","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","PromoCodeComponent","promoCodeHeadingText","appliedPromoCodeHeadingText","collapseTimeOut","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$feat2","_this$props$data$feat3","modules","storeSelectorId","CartLineItems","warehouseAggregation","amountString","productDimensionTypeAmount","decrementButtonAriaLabel","incrementButtonAriaLabel","priceEditorResources","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$cata2","_this$props$data$chan2","_this$props$data$cart5","cartLinesPickUpOptions","_cartLine$cartlineId","renderCartLinesGroupHeader","pickUpText","emailShippingText","titleSeparate","_cartLine$pickUpInSto4","groupTitle","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_props$cart","_props$cart2","errorData","_props$context$action","emailshippingText","renderCartLinesGroup","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","_renderOrderSummarylines","orderSummaryLines","otherCharge","isSelectDefaultOptionEnabled","_this$channelDelivery","channelDeliveryOptionConfiguration","_unused","updateHasCartDeliveryMode","newHasCartDeliveryMode","getStoredDeliveryOptions","isExpressPaymentAppliedInCartPage","deliveryOptionAriaLabel","ErrorComponent","onApplyHandler","onApplyGiftCard","onChangeNumberHandler","onEnterGiftCardNumber","onChangePinHandler","onEnterGiftCardPin","onChangeExpHandler","onEnterGiftCardExp","getForm","options","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardExp","supportExternalGiftCard","additionalFields","disableAddGiftCard","applyGiftCardButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","formProps","inputPinLabel","inputExpLabel","alertFieldLabel","fade","includeAlertClass","inputNumber","inputPin","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","onRemoveHandler","onRemoveGiftCard","_giftCard$Id","getItem","getFormattedPrice","canRemove","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","CardCurrencyCode","giftCardLast4Digit","selectedGiftCard","removeButton","itemProps","getList","SupportedGiftCardType","_this","isFetchingGiftCard","isRequired","isEnabled","onSkip","couldPaidByGiftCard","giftCardSupported","External","shouldBeEnabledForGuest","handleCancelOrSubmit","hasSelectedItem","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","PaymentMethodId","getGiftCard","addGiftCard","findGiftcardTenderTypes","giftcardType","matchedTenderTypes","Internal","ConnectorId","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","internalGiftcardTenderTypes","PayGiftCertificate","externalGiftcardTenderTypes","Both","month","year","getGiftCardAsync","activeGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","card","GiftCard","getLoyaltyAmount","getGiftCardTotalAmount","getCustomerAccountAmount","showAdditionalFields","shouldPayGiftCard","isOBORequest","EnabledPaymentsForOBO","moduleClassName","checkoutGiftCardProps","showGiftCard","TitleCompoent","form","From","SelectedGiftCard","GiftCardList","_objectWithoutProperties","_excluded","AddResource","ShowResource","max","ariaValueMax","ariaValueMin","ariaValueNow","onBlur","htmlFor","_defaultLoyaltyPoints","CardNumber","updateLoyaltyCardId","shouldPayLoyalty","_clearError","_dialogToggleRef","_applyLoyaltyPoints","_removeLoyaltyPoints","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","Loyalty","isShowLoyalty","isShowAddLoyalty","checkoutLoyalty","showLoyalty","loyaltyHeadingText","coveredAmountText","TextComponent","loyaltyCoveredAmountText","addLoyalty","drawer","Drawer","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","cardNumber","rewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","payWithLoyaltyAmountLabel","loyaltyAmountInput","InputComponent","loyaltyAmountApplyButton","applyCheckoutLoyaltyPaymentText","isNaN","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","removeCheckoutLoyaltyPaymentText","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","ActivePoints","expiringPointsText","expiringPoints","PointsExpiringSoon","updateLoyaltyAmount","newAmount","parseFloat","num","document","getElementById","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","callActionOrExecute","_points$MaxCurrencyVa","update","GetLoyaltyTransactionEstimationInput","newMaxPoints","AddCheckoutLoyalty","rewardPoint","ShowCheckoutLoyalty","isValidationPassed","handleCheckoutHeadingChange","triggerPaymentWithPlaceOrder","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","checkoutOutOfStockErrorMessage","isOverMaxQuantity","_checkout$result","updateCartLineEmailAddress","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","emailDeliveryCartLines","lineDeliverySpecifications","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","updatedCart","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","_cartlineProduct$Beha","cartlineProduct","isStockedItem","IsStockedProduct","isEmailDelivery","productInventory","_productInventory$Pro","cartLinesInventoryValidation","getActiveChildModuleStates","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","validateForCheckout","retry","_shouldValidateQuantityLimits","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","isB2BSite","isOrderQuantityLimitsFeatureEnabledInSiteSettings","checkoutApiFailureErrorMessage","params","isTermsAndConditionAccepted","disableForOBO","isPaidOffByCustomerAccount","_this$props$data$chec22","_this$props$data$chec23","_this$props$data$chec24","_this$props$data$chec27","_this$props$data$chec25","_this$props$data$chec26","isCartReady","_this$props$data$chec28","isPaymentSectionContainerReady","_this$props$data$chec29","_this$props$data$chec30","_this$props$data$chec31","_this$props$data$chec32","redirectAdditionalContext","isPaymentVerificationRequired","_this$props$data$chec33","isPaymentSectionContainerHasError","_this$props$data$chec34","_this$props$data$chec35","isBillingAddressHasError","_this$props$data$chec36","_this$props$data$chec37","updateIsBillingAddressHasError","newIsBillingAddressHasError","_this$props$data$chec38","_this$props$data$chec39","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","_this$props$data$chec40","_this$props$data$chec41","_this$props$data$chec42","_this$props$data$chec43","_this$props$data$chec44","_this$props$data$chec45","_this$props$data$chec46","_this$props$data$chec47","_this$props$data$chec48","_this$props$data$chec49","_this$props$data$chec50","_this$props$data$chec51","_this$props$data$chec52","_this$props$data$chec53","_this$props$data$chec54","_this$props$data$chec55","_this$props$data$chec56","_this$props$data$chec57","_document","_this$props$data$chec58","confirmPaymentText","termsAndConditions","backToShoppingAttributes","checkoutBtnText","hasShippingAddress","hasCartDeliveryMode","hasGuestCheckoutEmail","hasExpressPaymentContainer","getElementsByClassName","display","termsAndConditionsProps","renderMsdyn365Text","_this$props$data$chec59","_this$props$data$chec60","invoicePaymentSummary","getInvoicePaymentSummary","editProps","EmailDeliveryComponent","EmailDelivery","emailDelivery","LineItemGroupComponentWithMultiplePickUp","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","PickUpAtStoreComponentWithMultiplePickUp","itemsForEmail","itemsGroupWithMulitplePickupMode","PaymentSummaryComponent","_ref10","_cartLine$CatalogId","_getEmailDeliveryComponents","emailDeliveryText","_getCartPickDeliveryMode","cartLineItem","_channelDeliveryOptio","isNullOrWhitespace","_channelDeliveryOptio2","_input$data$deliveryO","emailDeliveryModeDesc","_productDeliveryOptio","handleLineItemHeadingChange","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","cartLinesGrp","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","iconClass","EditCart","attribute","groupClass","isCancelAllowed","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","CheckoutChange","changeBtnAttributes","paymentInstrumentModuleId","_state$childIds","shouldCollapseAfterRedirect","hasMissingInfo","hasOrderError","buttonsStates","onPlaceOrderHandler","buttonSetState","Purchase","PayCard","PayLoyalty","PayCustomerAccount","balanceCheckButton","GiftCardBalanceCheck","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","Form","Item","CatalogLabelComponent","isB2b","catalog","CartLineItemFunctions","renderProductDimensions","Product","DimensionStrings","productDimension","IsGiftCard","OfferId","PeriodicDiscount","EffectiveAmount","EffectivePercentage","inventoryCssName","unitOfMeasureDisplayType","DefaultUnitOfMeasure","_props$context$reques","shippingChargeLines","priceComponent","_cartline$ChargeLines","chargeline","SalesAgreementLineRecordId","_props$context$reques2","_props$primaryImageUr","destructDimensionStrings","fallbackImageUrl","getFallbackImageUrl","OmniChannelMedia","cropFocalRegion","renderDisountLines","renderInventoryLabel","renderUnitOfMeasure","renderShippingLabel","renderOtherCharges","renderSalesAgreementPrompt","productAttribute","productName","imgeClassName","newValue","fallBackSrc","NetAmountWithAllInclusiveTax","ExtendedPrice","salesAgreementLineId","_generateQuantityandPrice","nodes","IncrementalQuantity","currentCount","isGiftCard","classNames","DiscountAmount","CartLinePriceEditor","_onInputChangeHandler","_onSubmitHandler","_applyPromotionHandler","removePromotionHandler","promoCodTotalDiscount","ApplyPromoCode","HeaderPreferredStore","modalCloseButtonRef","_findPreferredStoreOnClick","storeName","preferredStore","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","showMapViewLink","parentElementRef","Logo","_renderLogo","openInNewTab","_renderImage","image","moduleType","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","targetId","handleLinkTextChange","linkIndex","_this$props$config$my","myAccountLinks","_toggleNavbar","_keydown","mobileMenuCollapsed","hasSigninerror","workerName","_this$props$data$empl","worker","employee","_this$props$data$acco","addEventListener","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","removeEventListener","logoLink","logoImage","shouldShowWishlistCount","headerToggleClass","headerClassName","navbarKey","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","wishListIconDesktop","WishListIconComponent","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","wishListIconMobile","siteOptions","headerAriaLabel","Divider","wrapClassName","displayName","_getSigninButton","_getSignOutButton","switchCustomerLink","_getSwitchCustomerButton","_getAccountInfoDropdownButton","_getAccountLinks","currentDistributor","SignIn","onTelemetryClick","_user$signOutUrl","SignOut","signOutLinkText","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","removeAccountSelectionCookie","shoppingAsText","route","param","delete","retailServerErrorCode","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","cta","editableLink","onTextChange","keyCode","KeyCodes","Escape","_renderReactFragment","_renderDesktopAccountBlock","InvoiceSummaryLine","_buildPaymentSummarySection","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmountWithoutTax","TaxOnNonShippingCharges","OtherChargeAmount","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","ProductCollection","handleHeadingChange","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","validValues","DimensionTypes","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","initProductState","productPrices","productCollectionProducts","productCollection","equals","listType","getProductPriceForSelectedProducts","ProductPriceForSelectedProductsInput","p","_getProduct","productPrice","_this$state$productsD","trace","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","TotalRatings","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","priceResources","priceRangeSeparator","ProductContainer","productComponent","ProductComponent","quickViewButton","dimensionAvailabilities","dimensionAvailability","_product$MasterProduc","masterProductId","MasterProductId","_getActivePrice","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSeeAllButton","headingLabel","recommendation","discountIds","searchPageLink","seeAllButtonText","enableAffiliationBasedPricing","shouldDisplaySeeAllButton","recommendationListId","isCarousel","layout","headingComponent","updatedProducts","getProductData","at","productCollectionViewProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","ProductCollectionContainer","GridComponentProps","seeAllButton","_renderCarousel","carouselContainer","_renderProduct","_renderGrid","gridContainer","AddToCartProductListComponent","_quickOrderTemplate$q","_quickOrderTemplate$q2","quickOrderTemplate","quickOrderTemplateLines","fullProduct","ProductDetails","productListLine","buttonLabel","quickOrderGridBuySelectedButtonText","buttonAriaLabel","quickOrderGridBuySelectedButtonAriaLabel","dialogStrings","_props$resources$quic","_props$resources$quic2","_props$resources$quic3","_props$resources$quic4","_props$resources$quic5","_props$resources$quic6","_props$resources$quic7","_props$resources$free","_props$resources$orig","_props$resources$curr","_props$resources$adde","_props$resources$quic8","_props$resources$quic9","goToCartText","quickOrderGridGoToCartText","continueShoppingText","quickOrderGridDialogCloseText","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","headerItemOneText","quickOrderGridSingleItemText","headerItemFormatText","quickOrderGridMultiLineItemFormatText","headerLinesFormatText","quickOrderGridMultiLinesFormatText","headerMessageText","quickOrderGridHeaderMessageText","addedQuantityText","buyAgainNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","OrderDetailsProduct","getOrderDetails","AddToCartComponent","addToCartText","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","onError","getQuickOrderGridAddToCartDialog","_result$cartActionRes","handlers","removeActionHandler","removeProductList","removeQuickOrderList","QuickOrderGridDrawer","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","onToggle","previousState","collapseProps","_drawerGlyphClass","toggleGlyphClassName","isAnimateGlyph","_drawerOpenGlyph","_drawerCloseGlyph","drawerClass","drawerButtonClassName","toggleButtonProps","block","_generateDrawerButtonInnerMarkup","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","QuickOrderGridFormComponent","productTextInput","quantityTextInput","quickOrderGridState","maxChars","minQuantity","isAddtoListDisabled","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","handleQuantityChange","handleInputChange","handleAddProductListClick","onInputChange","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","pattern","maxLength","addToListBtn","userMessage","QuickOrderGridProduct","productLine","isSelected","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_product$PrimaryImage","_props$imageSettings","containerClassName","setShowPreviousActions","onChangeHandler","onChangeQuantity","itemKey","onRemoveItem","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","setShowActions","onClickViewDetails","shouldShowActionsNewValue","actionsContainerClassName","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_productListLine$Line","_dimension$DimensionV","quickOrderGridProductDimensionsSeparator","moduleTypeName","renderProductPrice","UnitOfMeasure","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","QuickOrderGridTableComponent","setIsMobile","isMobileView","quickOrderGridProducts","isOrderQuantityLimitsFeatureEnabled","updateViewport","quickOrderProduct","_product$ProductDetai","_quickOrderProduct$pr","_quickOrderProduct$pr2","behavior","MinimumQuantity","ProductPrice","callBacks","QuickOrderGrid","_cartConfiguration$re","_cartConfiguration$re2","_waitTime","_dimensionUpdateQueueMaxLength","_dimensionUpdateQueue","FinitePromiseQueue","_dimensions","_initializedDimensions","Set","_cssClassNameConfigure","_className","_isOrderQuantityLimitsFeatureEnabled","_applyDefaultOrderSettingsForCartLine","_quickOrderGridCallbacks","initializeDimension","initializedDimension","add","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","_removeItemRowFromTable","productListLineId","_changeRowQuantity","_removeProductList","token","ProductListsDataActions","reload","_updateStatusState","quickOrderGridDeleteProductListFailedText","_handleInputChange","productResponse","_cancellabelDebounce","cancel","isQuickOrderGridFormExpanded","_debounce","getScanResult","GetScanResultInput","results","ProductDimensionFull","_updateQuantitiesInState","setTimeout","_handleQuantityChange","_this$state$productRe","currentValue","inputElement","_quantityInput","HTMLInputElement","minimumQuantity","needToUpdateUIValue","_behavior$MinimumQuan","newCurrentValue","setAttribute","_this$state$productRe2","ProductDimensionType","Color","Configuration","Size","Style","hasProductDimensions","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","configureErrors","errorState","mappedDimensions","_this$_updateDimensio","_updateDimensionValue","selectedProduct","newProduct","getSelectedVariant","SelectedVariantInput","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","productDimensionFull","newValueId","DimensionValues","_getDimensionErrorString","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_productResponse$Dime","missingDimensions","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","quickOrderTemplateLinesData","orderLineIndex","newProductListLine","previousQuantity","newLine","updatedLines","updatedProductList","ProductListLines","ActiveProductListInput","ProductListId","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","productListId","_productResponse$Defa","_createProductList","AddItemToProductListInput","addItemToProductListAction","CreateProductListInput","ProductListType","QuickOrder","createProductList","_productTextInput","_telemetryContent","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","ValidateDefaultOrderSettingsPerLine","_this$state$min","_this$state$max","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","quickOrderGridProps","contentProps","isB2bCustomer","actions","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","configure","getProductConfigure","_renderListContainer","orderActions","_renderQuickOrderGridActions","quickOrderGridDeleteButtonText","topStateMessage","addProductListToBag","QuickOrderGridActionsView","isBulkPurchaseEnabled","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","tableClassName","_getMinQuantityForCartLineItem","_getMaxQuantityForCartLineItem","_getQuantity","_product$Behavior2","applyDefaultOrderSettingsForCartLine","_product$Behavior3","defaultQuantity","DefaultQuantity","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","select","renderConfigure","dropdowns","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","HistogramItems","ratingsSummary","totalRatingsCount","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","stars","totalCount","percentage","formattedPercent","Intl","NumberFormat","barItemAriaLabel","starLabel","bar","Progress","buttonProps","AverageRatingNumber","summary","averageRating","TotalReviews","RatingsHistogram","selectFilterBy","ratingCount","completeClass","histogramItems","RatingComponent","avgRating","averageRatingAriaLabel","readOnly","hideCount","averageNumber","totalReviews","ratingsSummaryProps","histogramProps","filterKey","createRatingsReviewsStateInput","histogramItem","getAdditionalContentItems","_item$links","renderHeading","additionalContentHeading","handleAdditionalTextChange","subtext","renderParagraph","additionalContentParagraphText","handleAdditionalParagraphChange","links","ctaLink","renderLinks","handleAdditionalLinkTextChange","additionalContentItemContainer","additionalContentItemLinks","videoPlayerAdditionalContent","additionalContent","additionalContentNode","additionalContentItems","VideoPlayer","handleTextChange","handleParagraphChange","paragraph","video","playerResources","playAriaLabel","playLabel","pauseAriaLabel","pauseLabel","playingAriaLabel","playingLabel","pausedAriaLabel","pausedLabel","muteAriaLabel","muteLabel","unMuteAriaLabel","unMuteLabel","fullScreenAriaLabel","fullScreenLabel","exitFullScreenAriaLabel","exitFullScreenLabel","seekBarLabel","videoTimeDurationLabel","closedCaptionLabel","videoMetaData","_video$_links","videoId","duration","playTime","thumbnail","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","player","Player","playerData","_getVideoDetailsHeading","_getVideoDetailsParagraph","_getVideoDetailsLinks","detailsContainer","detailsContainerCTA","handleText","handleParagraph","handleAdditionalText","handleAdditionalParagraph","handleLink","handleAdditionalLink","_this$props$config$ad","linkData","linkId","_heading$tag","detailsContainerCta"],"sourceRoot":""}