{"version":3,"file":"static/js/16.d9cb1343c8215e4b8f37.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/filtered-delivery-options/filtered-delivery-options.props.autogenerated.ts?9ca7","webpack://Msdyn365.Commerce.Online/./src/modules/filtered-delivery-options/components/filtered-delivery-options.description.tsx?b6af","webpack://Msdyn365.Commerce.Online/./src/modules/filtered-delivery-options/components/filtered-delivery-options.error-message.tsx?a76a","webpack://Msdyn365.Commerce.Online/./src/modules/filtered-delivery-options/components/filtered-delivery-options.error-title.tsx?829f","webpack://Msdyn365.Commerce.Online/./src/modules/filtered-delivery-options/components/filtered-delivery-options.radio-button.tsx?9751","webpack://Msdyn365.Commerce.Online/./src/modules/filtered-delivery-options/filtered-delivery-options.tsx?9a97","webpack://Msdyn365.Commerce.Online/./src/modules/filtered-delivery-options/filtered-delivery-options.view.tsx?6bae","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-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-express-payment-container/checkout-express-payment-container.tsx?1d63","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-express-payment-container/checkout-express-payment-container.view.tsx?4299","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-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-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-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-section-container/checkout-section-container.tsx?c853","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-section-container/checkout-section-container.view.tsx?b4ab","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-section-container/components/loading.tsx?2e57","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-invoice-payment-summary.tsx?9549","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-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/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/order-summary-lineitem.tsx?8a98","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.tsx?4ecb","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.view.tsx?a45e","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/utilities.ts?8569","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/choice-summary.tsx?3f71","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/error-message.tsx?6302","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/feature-search-result-item.tsx?71fa","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/link.tsx?52c2","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/modal.tsx?d78e","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/product-search-result-items.tsx?5174","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/range-refine-item.tsx?6288","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/refine-item.tsx?a594","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/refine-submenu.tsx?1292","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/separator.tsx?4ea6","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/title.tsx?c269","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.tsx?7500","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://Msdyn365.Commerce.Online/./src/search-state.ts?dd10","webpack://Msdyn365.Commerce.Online/./src/modules/search/actions/get-auto-suggest-suggestions.ts?4735","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.categorysuggest.tsx?c65d","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.form.tsx?25a5","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.keywordsuggest.tsx?297c","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.label.tsx?0c17","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.productsuggest.tsx?2af9","webpack://Msdyn365.Commerce.Online/./src/modules/search/search.tsx?72fb","webpack://Msdyn365.Commerce.Online/./src/modules/search/search.view.tsx?1505","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/cartlineitem.component.tsx?ccc2"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IFilteredDeliveryOptions 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 IFilteredDeliveryOptionsConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n filterDeliveryModeOption?: filterDeliveryModeOption;\r\n useDefaultDeliveryOption?: useDefaultDeliveryOption;\r\n className?: string;\r\n clientRender?: boolean;\r\n enableAddressFilter?: boolean;\r\n nameExcludedStrings?: string;\r\n cityExcludedStrings?: string;\r\n streetExcludedStrings?: string;\r\n excludedAddressErrorMessage?: string;\r\n paragraph?: Msdyn365.RichText;\r\n}\r\n\r\nexport interface IFilteredDeliveryOptionsResources {\r\n deliveryOptionsNotFound: string;\r\n genericErrorMessage: string;\r\n errorMessageTitle: 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 IFilteredDeliveryOptionsProps extends Msdyn365.IModule {\r\n resources: IFilteredDeliveryOptionsResources;\r\n config: IFilteredDeliveryOptionsConfig;\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/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\r\n description?: string;\r\n}\r\n\r\n/**\r\n * AddPaymentForm SFC.\r\n * @param root0\r\n * @param root0.description\r\n * @extends {React.FC}\r\n */\r\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description }) => {\r\n if (!description) {\r\n return null;\r\n }\r\n\r\n return {description};\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsDescription;\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/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\r\n message?: string;\r\n}\r\n\r\n/**\r\n * AddPaymentForm SFC.\r\n * @param root0\r\n * @param root0.message\r\n * @extends {React.FC}\r\n */\r\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\r\n if (!message) {\r\n return null;\r\n }\r\n\r\n return

{message}

;\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsErrorMessage;\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/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nexport interface ICheckoutDeliveryOptionsErrorTitleProps {\r\n title?: string;\r\n}\r\n\r\n/**\r\n * AddPaymentForm SFC.\r\n * @param root0\r\n * @param root0.title\r\n * @extends {React.FC}\r\n */\r\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\r\n if (!title) {\r\n return null;\r\n }\r\n\r\n return

{title}

;\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsErrorTitle;\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/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\r\n isChecked: boolean;\r\n value?: string;\r\n ariaSetSize: number;\r\n ariaPosInSet: number;\r\n ariaLabel?: string;\r\n telemetryContent?: ITelemetryContent;\r\n onChange(event: React.ChangeEvent): void;\r\n}\r\n\r\n/**\r\n * AddPaymentForm SFC.\r\n * @param root0\r\n * @param root0.isChecked\r\n * @param root0.value\r\n * @param root0.ariaSetSize\r\n * @param root0.ariaPosInSet\r\n * @param root0.ariaLabel\r\n * @param root0.telemetryContent\r\n * @param root0.onChange\r\n * @extends {React.FC}\r\n */\r\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\r\n isChecked,\r\n value,\r\n ariaSetSize,\r\n ariaPosInSet,\r\n ariaLabel,\r\n telemetryContent,\r\n onChange\r\n}) => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsRadioButton;\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/* eslint-disable no-duplicate-imports */\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\r\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { Address, CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { QueryResultSettingsProxy, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport get from 'lodash/get';\r\nimport { action, computed, observable, reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { ErrorComponent } from '@msdyn365-commerce-modules/checkout';\r\nimport { IFilteredDeliveryOptionsData } from './filtered-delivery-options.data';\r\nimport {\r\n filterDeliveryModeOption,\r\n IFilteredDeliveryOptionsProps,\r\n useDefaultDeliveryOption\r\n} from './filtered-delivery-options.props.autogenerated';\r\nimport DescriptionComponent from './components/filtered-delivery-options.description';\r\nimport ErrorMessageComponent from './components/filtered-delivery-options.error-message';\r\nimport ErrorTitleComponent from './components/filtered-delivery-options.error-title';\r\nimport RadioButtonComponent from './components/filtered-delivery-options.radio-button';\r\nimport { focusOnCheckoutError } from '@msdyn365-commerce-modules/checkout';\r\n\r\nexport interface ICheckoutDeliveryOptionsModuleProps\r\n extends IFilteredDeliveryOptionsProps,\r\n IModuleStateProps {}\r\n\r\nexport interface ICheckoutDeliveryOption {\r\n DeliveryOption: INodeProps;\r\n description?: React.ReactNode;\r\n price?: React.ReactNode;\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\r\n code: string;\r\n radioButton?: React.ReactNode;\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionsList {\r\n DeliveryOptionsList: INodeProps;\r\n list: ICheckoutDeliveryOptionEdit[];\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionsError {\r\n Error: INodeProps;\r\n title: React.ReactNode;\r\n message: React.ReactNode;\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionsViewState {\r\n isLoading: boolean;\r\n isError: boolean;\r\n isShowList: boolean;\r\n isShowSelected: boolean;\r\n isShowSaveButton: boolean;\r\n isShowEditButton: boolean;\r\n isShowCancelButton: boolean;\r\n}\r\n\r\nexport interface ICheckoutDeliveryOptionsViewProps extends IFilteredDeliveryOptionsProps<{}> {\r\n CheckoutDeliveryOptions: IModuleProps;\r\n selectedItemId: string;\r\n deliveryOptionsData: DeliveryOption[];\r\n isLoading: boolean;\r\n errorMessageData: string;\r\n viewState: ICheckoutDeliveryOptionsViewState;\r\n deliveryOptions?: ICheckoutDeliveryOptionsList;\r\n deliveryOptionSelected?: ICheckoutDeliveryOption;\r\n errorMessage?: ICheckoutDeliveryOptionsError;\r\n waiting?: React.ReactNode;\r\n saveButton?: React.ReactNode;\r\n editButton?: React.ReactNode;\r\n cancelButton?: React.ReactNode;\r\n alert?: React.ReactNode;\r\n checkoutErrorRef?: React.RefObject;\r\n onDeliveryOptionChange(event: React.ChangeEvent): void;\r\n onSave(): void;\r\n onEdit(): void;\r\n onCancel(): void;\r\n}\r\n\r\nfunction parseStringToArray(input: string): string[] {\r\n // Split the string by comma\r\n const elements = input.split(',');\r\n // Trim whitespace and remove single or double quotes from each element\r\n return elements.map(element => element.trim().replace(/^[\"']|[\"']$/g, ''));\r\n}\r\n\r\nfunction createRegexExcludedPatterns(excludedValuesString: string | undefined): RegExp | null {\r\n if (!excludedValuesString) {\r\n return null;\r\n }\r\n const substrings = parseStringToArray(excludedValuesString);\r\n // Create a regular expression from the substrings\r\n const regexString = substrings.map(s => s.toLowerCase().replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')).join('|');\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(regexString);\r\n}\r\nfunction validateAddressString(addressFieldString: string, regexExcludedStrings: RegExp): boolean {\r\n const lowerCaseAddressField = addressFieldString.toLowerCase();\r\n // Create a regular expression from the substrings\r\n return !regexExcludedStrings.test(lowerCaseAddressField);\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutDeliveryOptions component.\r\n * @extends {React.Component>}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass CheckoutDeliveryOptions extends React.Component {\r\n @observable private selectedItemId: string = '';\r\n\r\n @observable private deliveryOptions: DeliveryOption[] = [];\r\n\r\n @observable private isLoading: boolean = false;\r\n\r\n @observable private errorMessage?: string;\r\n\r\n @computed private get isDataReady(): boolean {\r\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\r\n }\r\n\r\n public get expressPaymentDetailsFromCartPage() {\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const properties =\r\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\r\n ?.StringValue ?? '';\r\n\r\n return properties ? JSON.parse(properties) : null;\r\n }\r\n\r\n public get isExpressPaymentAppliedInCartPage(): boolean {\r\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\r\n }\r\n\r\n private cartDeliveryMode?: string;\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n private readonly telemetryContent?: ITelemetryContent;\r\n\r\n private readonly isSelectDefaultOptionEnabled?: boolean;\r\n\r\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\r\n\r\n private readonly deliveryNameExcludedValuesRegExp: RegExp | null;\r\n private readonly deliveryStreetExcludedValuesRegExp: RegExp | null;\r\n private readonly deliveryCityExcludedValuesRegExp: RegExp | null;\r\n\r\n public constructor(props: ICheckoutDeliveryOptionsModuleProps) {\r\n super(props);\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 this.isSelectDefaultOptionEnabled =\r\n this.props.config.useDefaultDeliveryOption && this.props.config.useDefaultDeliveryOption !== useDefaultDeliveryOption.none;\r\n this.deliveryNameExcludedValuesRegExp = createRegexExcludedPatterns(props.config.nameExcludedStrings);\r\n this.deliveryCityExcludedValuesRegExp = createRegexExcludedPatterns(props.config.cityExcludedStrings);\r\n this.deliveryStreetExcludedValuesRegExp = createRegexExcludedPatterns(props.config.streetExcludedStrings);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n when(\r\n () => this.isDataReady,\r\n async () => {\r\n await this.init();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result?.shippingAddress,\r\n async () => {\r\n await this.loadDeliveryOptions();\r\n this.props.moduleState.setIsCancellable(false);\r\n\r\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\r\n async isExpressCheckoutApplied => {\r\n if (isExpressCheckoutApplied && this.canShip() && !this.isExpressPaymentAppliedInCartPage) {\r\n await this.loadDeliveryOptions();\r\n this.props.moduleState.setIsCancellable(false);\r\n\r\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\r\n }\r\n }\r\n );\r\n\r\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutError,\r\n checkoutError => {\r\n if (\r\n checkoutError &&\r\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\r\n checkoutError.errorMessage\r\n ) {\r\n this.setError(checkoutError.errorMessage);\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutErrorFocus,\r\n checkoutErrorFocus => {\r\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\r\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: ICheckoutDeliveryOptionsModuleProps, nextState: ICheckoutDeliveryOptionsViewState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\r\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\r\n feature => feature.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n\r\n if (!this.canShip()) {\r\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n const {\r\n moduleState: { isReady, isUpdating, hasError }\r\n } = this.props;\r\n const isError = !this.isLoading && hasError;\r\n const isShowList = !this.isLoading && !hasError && isUpdating && !this.isSelectDefaultOptionEnabled;\r\n const isShowSelected = !this.isLoading && !hasError && isReady;\r\n const { errorMessageTitle, deliveryOptionAriaLabel } = this.props.resources;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n onDeliveryOptionChange: this.onDeliveryOptionChange,\r\n selectedItemId: this.selectedItemId,\r\n deliveryOptionsData: this.deliveryOptions,\r\n isLoading: this.isLoading,\r\n alert: this.errorMessage && ,\r\n errorMessageData: this.errorMessage,\r\n viewState: {\r\n isLoading: this.isLoading,\r\n isError,\r\n isShowList,\r\n isShowSelected,\r\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\r\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\r\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\r\n },\r\n CheckoutDeliveryOptions: {\r\n moduleProps: this.props,\r\n className: classname('ms-checkout-delivery-options', this.props.config.className)\r\n },\r\n deliveryOptions: {\r\n DeliveryOptionsList: {\r\n className: 'ms-checkout-delivery-options__list',\r\n role: 'list',\r\n 'aria-label': deliveryOptionAriaLabel\r\n },\r\n list: this.getDeliveryOptionList()\r\n },\r\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\r\n errorMessage: this.getErrorMessage(),\r\n waiting: ,\r\n checkoutErrorRef: this.checkoutErrorRef,\r\n saveButton: this.getSaveButton(),\r\n editButton: this.getEditButton(),\r\n cancelButton: this.getCancelButton(),\r\n onSave: this.onSave,\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n @action\r\n private readonly init = async (): Promise => {\r\n this.props.moduleState.init({\r\n onEdit: this.isSelectDefaultOptionEnabled ? undefined : this.onEdit,\r\n onCancel: this.isSelectDefaultOptionEnabled ? undefined : this.onCancel,\r\n onSubmit: this.isSelectDefaultOptionEnabled ? undefined : this.onSubmit,\r\n status:\r\n !(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption) &&\r\n this.canShip()\r\n ? 'updating'\r\n : 'disabled'\r\n });\r\n\r\n this.cartDeliveryMode = this.getSavedDeliveryOption();\r\n await this.loadDeliveryOptions();\r\n };\r\n\r\n private readonly canShip = (): boolean => {\r\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\r\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\r\n };\r\n\r\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\r\n if (deliveryMode) {\r\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\r\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\r\n if (!selectedItem) {\r\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n const { id, typeName, context } = this.props;\r\n const { priceFree } = this.props.resources;\r\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\r\n\r\n return {\r\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\r\n description: ,\r\n price: (\r\n \r\n )\r\n };\r\n };\r\n\r\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\r\n const { errorMessageTitle } = this.props.resources;\r\n return {\r\n // @ts-expect-error\r\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\r\n title: ,\r\n message: \r\n };\r\n };\r\n\r\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\r\n const count = this.deliveryOptions.length;\r\n const { priceFree } = this.props.resources;\r\n const { id, typeName, context } = this.props;\r\n\r\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\r\n return {\r\n DeliveryOption: { className: 'ms-checkout-delivery-options__option', role: 'listitem' },\r\n code: deliveryOption.Code || '',\r\n radioButton: (\r\n \r\n ),\r\n description: (\r\n \r\n ),\r\n price: (\r\n \r\n )\r\n };\r\n });\r\n };\r\n\r\n private readonly getSaveButton = (): React.ReactNode => {\r\n const { saveBtnLabel = 'Save' } = this.props.resources;\r\n return (\r\n \r\n {saveBtnLabel}\r\n \r\n );\r\n };\r\n\r\n private readonly getEditButton = (): React.ReactNode => {\r\n const { editBtnLabel = 'Change' } = this.props.resources;\r\n return (\r\n \r\n );\r\n };\r\n\r\n private readonly getCancelButton = (): React.ReactNode => {\r\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\r\n return (\r\n \r\n );\r\n };\r\n\r\n private readonly setError = (errorMessage: string): void => {\r\n this.props.telemetry.error(errorMessage);\r\n this.props.moduleState.setHasError(true);\r\n this.props.moduleState.onUpdating();\r\n this.errorMessage = errorMessage;\r\n };\r\n\r\n private readonly clearError = (): void => {\r\n this.props.moduleState.setHasError(false);\r\n this.errorMessage = undefined;\r\n };\r\n\r\n private readonly onSave = async (): Promise => {\r\n await this.onSubmit();\r\n };\r\n\r\n private readonly onEdit = async (): Promise => {\r\n this.props.telemetry.information('Delivery options onEdit is called.');\r\n\r\n this.clearError();\r\n this.onUpdating();\r\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\r\n };\r\n\r\n private readonly onSubmit = async (): Promise => {\r\n this.props.telemetry.information('Delivery options onSubmit is called.');\r\n\r\n await this.updateCartDeliverySpecification(this.selectedItemId);\r\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\r\n };\r\n\r\n private readonly onCancel = async (): Promise => {\r\n this.props.telemetry.information('Delivery options onCancel is called.');\r\n\r\n // Reset to the saved value\r\n const savedDeliveryOption = this.getSavedDeliveryOption();\r\n if (savedDeliveryOption) {\r\n this.selectedItemId = savedDeliveryOption;\r\n this.onReady();\r\n\r\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\r\n } else {\r\n this.onUpdating();\r\n }\r\n };\r\n\r\n private readonly getSavedDeliveryOption = (): string | undefined => {\r\n const cartLinesForShipping = this.getCartLinesForShipping();\r\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\r\n };\r\n\r\n private readonly updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\r\n if (deliveryModeId.trim() === '') {\r\n return;\r\n }\r\n\r\n const { resources } = this.props;\r\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\r\n const updateCartDeliverySpecificationInput = {\r\n deliveryModeId,\r\n shippingAddress: checkoutState.shippingAddress,\r\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined\r\n };\r\n\r\n this.clearError();\r\n this.onPending();\r\n\r\n await checkoutState.checkoutCart\r\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\r\n .then(response => {\r\n if (response.status === 'FAILED') {\r\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\r\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\r\n }\r\n\r\n this.onReady();\r\n this.props.moduleState.setIsCancellable(true);\r\n })\r\n .catch(() => {\r\n this.setError(resources.genericErrorMessage);\r\n });\r\n };\r\n\r\n private readonly getCartLinesForShipping = (): CartLine[] => {\r\n const { request } = this.props.context;\r\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\r\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\r\n\r\n return this.retailMultiplePickUpOptionEnabled\r\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !==\r\n this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\r\n deliveryMode => deliveryMode === cartLine.DeliveryMode\r\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n )\r\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n );\r\n };\r\n\r\n private readonly getDeliveryOptions = async (shippingAddress: Address): Promise => {\r\n if (!this.props.data.checkout.result) {\r\n return;\r\n }\r\n\r\n const { context, resources, config } = this.props;\r\n const cartState = this.props.data.checkout.result?.checkoutCart;\r\n const cartId = (cartState.cart as Cart).Id;\r\n\r\n if (context) {\r\n this.isLoading = true;\r\n this.deliveryOptions = [];\r\n this.selectedItemId = '';\r\n this.clearError();\r\n\r\n try {\r\n let originalDeliveryMode: string = '';\r\n const shippingCartLines = this.getCartLinesForShipping();\r\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\r\n if (hasShippingDeliveryLines) {\r\n // First store the delivery mode, so that we can restore the shipping information.\r\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\r\n\r\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\r\n const cart = cartState.cart;\r\n await cartState.clearCartLinesDeliveryInformation({\r\n cart,\r\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\r\n });\r\n }\r\n\r\n // TODO: Check if we can move this getDeliveryOptions to checkout state\r\n let deliveryOptionFilter: FilterDeliveryModeOption;\r\n switch (config.filterDeliveryModeOption) {\r\n case filterDeliveryModeOption.none:\r\n deliveryOptionFilter = FilterDeliveryModeOption.None;\r\n break;\r\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\r\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\r\n break;\r\n default:\r\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\r\n }\r\n if (config.enableAddressFilter) {\r\n let isAddressValid = true;\r\n\r\n if (\r\n this.deliveryNameExcludedValuesRegExp &&\r\n !validateAddressString(shippingAddress.Name!, this.deliveryNameExcludedValuesRegExp)\r\n ) {\r\n isAddressValid = false;\r\n } else if (\r\n this.deliveryCityExcludedValuesRegExp &&\r\n !validateAddressString(shippingAddress.City!, this.deliveryCityExcludedValuesRegExp)\r\n ) {\r\n isAddressValid = false;\r\n } else if (\r\n this.deliveryStreetExcludedValuesRegExp &&\r\n !validateAddressString(shippingAddress.Street!, this.deliveryStreetExcludedValuesRegExp)\r\n ) {\r\n isAddressValid = false;\r\n }\r\n if (!isAddressValid) {\r\n this.setError(config.excludedAddressErrorMessage ?? '');\r\n this.isLoading = false;\r\n return;\r\n }\r\n }\r\n const response = await getDeliveryOptionsAsync(\r\n {\r\n callerContext: context.actionContext,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\r\n },\r\n cartId,\r\n shippingAddress,\r\n [],\r\n deliveryOptionFilter,\r\n true\r\n );\r\n\r\n if (hasShippingDeliveryLines) {\r\n await this.updateCartDeliverySpecification(originalDeliveryMode);\r\n }\r\n\r\n var sortedDeliveryOptions: DeliveryOption[];\r\n if (response && response.length > 0) {\r\n sortedDeliveryOptions = response.sort((a, b) => {\r\n return a.ShippingChargeAmount! - b.ShippingChargeAmount!;\r\n });\r\n this.deliveryOptions = sortedDeliveryOptions;\r\n }\r\n } catch {\r\n this.setError(resources.genericErrorMessage);\r\n }\r\n\r\n if (this.deliveryOptions.length === 0) {\r\n this.setError(resources.deliveryOptionsNotFound);\r\n } else if (this.cartDeliveryMode && this.isDeliveryModeExists(this.cartDeliveryMode)) {\r\n this.selectedItemId = this.cartDeliveryMode;\r\n this.cartDeliveryMode = undefined;\r\n this.onReady();\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\r\n\r\n if (!this.props.data.checkout.result?.isPaymentVerificationRedirection) {\r\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\r\n }\r\n } else {\r\n this.onUpdating();\r\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: !!this.isSelectDefaultOptionEnabled });\r\n }\r\n\r\n this.isLoading = false;\r\n }\r\n };\r\n\r\n private readonly getStoredDeliveryOptions = async (): Promise => {\r\n if (!this.props.data.checkout.result) {\r\n return;\r\n }\r\n\r\n const { context } = this.props;\r\n const cartState = this.props.data.checkout.result.checkoutCart;\r\n\r\n if (context) {\r\n this.isLoading = true;\r\n this.deliveryOptions = [];\r\n this.selectedItemId = '';\r\n this.clearError();\r\n\r\n let originalDeliveryMode: string = '';\r\n const shippingCartLines = this.getCartLinesForShipping();\r\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\r\n if (hasShippingDeliveryLines) {\r\n // First store the delivery mode, so that we can restore the shipping information.\r\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\r\n\r\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\r\n const cart = cartState.cart;\r\n await cartState.clearCartLinesDeliveryInformation({\r\n cart,\r\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\r\n });\r\n if (hasShippingDeliveryLines) {\r\n await this.updateCartDeliverySpecification(originalDeliveryMode);\r\n }\r\n }\r\n\r\n if (this.cartDeliveryMode) {\r\n this.selectedItemId = this.cartDeliveryMode;\r\n this.cartDeliveryMode = undefined;\r\n this.onReady();\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\r\n\r\n if (!this.props.data.checkout.result.isPaymentVerificationRedirection) {\r\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\r\n }\r\n }\r\n\r\n this.isLoading = false;\r\n }\r\n };\r\n\r\n private readonly loadDeliveryOptions = async (): Promise => {\r\n const shippingAddress = this.props.data.checkout.result?.shippingAddress;\r\n\r\n if (this.canShip() && shippingAddress) {\r\n if (\r\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\r\n this.isSelectDefaultOptionEnabled ||\r\n this.props.data.checkout.result?.isExpressCheckoutApplied\r\n ) {\r\n await this.getDeliveryOptions(shippingAddress);\r\n }\r\n\r\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\r\n await this.getStoredDeliveryOptions();\r\n }\r\n\r\n if (\r\n this.isSelectDefaultOptionEnabled ||\r\n this.props.data.checkout.result?.isExpressCheckoutApplied ||\r\n this.isExpressPaymentAppliedInCartPage\r\n ) {\r\n this.onSubmit();\r\n }\r\n }\r\n };\r\n\r\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\r\n const deliveryModeId = event.currentTarget.value;\r\n this.selectedItemId = deliveryModeId;\r\n };\r\n\r\n private readonly onReady = () => {\r\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\r\n this.props.moduleState.onReady();\r\n }\r\n };\r\n\r\n private readonly onUpdating = () => {\r\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\r\n this.props.moduleState.onUpdating();\r\n }\r\n };\r\n\r\n private readonly onPending = () => {\r\n if (!this.isSelectDefaultOptionEnabled) {\r\n this.props.moduleState.onPending();\r\n }\r\n };\r\n}\r\n\r\nexport default CheckoutDeliveryOptions;\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/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { RichTextComponent } from '@msdyn365-commerce/core';\r\n\r\nimport {\r\n ICheckoutDeliveryOption,\r\n ICheckoutDeliveryOptionEdit,\r\n ICheckoutDeliveryOptionsList,\r\n ICheckoutDeliveryOptionsViewProps\r\n} from './filtered-delivery-options';\r\n\r\nconst DeliveryOptionList: React.FC = ({ DeliveryOptionsList, list }) => {\r\n if (!list || list.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\r\n return (\r\n \r\n {deliveryOption.radioButton}\r\n {deliveryOption.description}\r\n {deliveryOption.price}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst DeliveryOptionSelected: React.FC = ({ DeliveryOption, description, price }) => {\r\n return (\r\n \r\n {description}\r\n {price}\r\n \r\n );\r\n};\r\n\r\nconst CheckoutDeliveryOptionsView: React.FC = props => {\r\n const {\r\n CheckoutDeliveryOptions,\r\n checkoutErrorRef,\r\n viewState,\r\n deliveryOptions,\r\n deliveryOptionSelected,\r\n alert,\r\n waiting,\r\n saveButton,\r\n editButton,\r\n cancelButton\r\n } = props;\r\n\r\n const extraTextField = props.config.paragraph;\r\n const extraText = extraTextField && ;\r\n\r\n return (\r\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\r\n \r\n {extraText}\r\n {viewState.isLoading && waiting}\r\n {viewState.isError && alert}\r\n {viewState.isShowList && deliveryOptions && }\r\n {viewState.isShowSelected && deliveryOptionSelected && }\r\n {viewState.isShowSaveButton && saveButton}\r\n {viewState.isShowEditButton && editButton}\r\n {viewState.isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutDeliveryOptionsView;\r\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 * 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 * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IModuleStateProps, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport classname from 'classnames';\n\nimport { reaction } from 'mobx';\nimport { ICheckoutExpressPaymentContainerData } from './checkout-express-payment-container.data';\nimport {\n ICheckoutExpressPaymentContainerProps,\n ICheckoutExpressPaymentContainerHeadingData\n} from './checkout-express-payment-container.props.autogenerated';\nimport { WaitingComponent } from '../../common/waiting';\n\n/**\n * ICheckoutExpressPaymentContainerModuleProps interface.\n */\nexport interface ICheckoutExpressPaymentContainerModuleProps\n extends ICheckoutExpressPaymentContainerProps,\n IModuleStateProps {}\n\nexport interface ICheckoutExpressPaymentContainerViewProps\n extends ICheckoutExpressPaymentContainerProps<{}>,\n ICheckoutExpressPaymentContainerState {\n checkoutPlainContainerProps: IModuleProps;\n items: React.ReactNode[];\n isReady?: boolean;\n waiting?: React.ReactNode;\n title?: React.ReactNode;\n headerProps: INodeProps;\n}\n\n/**\n * Checkout Express Payment Container State.\n */\nexport interface ICheckoutExpressPaymentContainerState {\n isReady?: boolean;\n shouldHideExpressPaymentContainer?: boolean;\n}\n\n/**\n *\n * CheckoutExpressPaymentContainer component\n * @extends {React.PureComponent>}\n */\n@observer\nexport class CheckoutExpressPaymentContainer extends React.PureComponent<\n ICheckoutExpressPaymentContainerProps,\n ICheckoutExpressPaymentContainerState\n> {\n private readonly moduleClassName: string = 'ms-checkout-express-section-container';\n\n public constructor(props: ICheckoutExpressPaymentContainerModuleProps) {\n super(props);\n this.state = {\n isReady: false,\n shouldHideExpressPaymentContainer: this.props.data.checkout.result?.shippingAddressFromExpressCheckout ? true : false\n };\n }\n\n public componentDidMount(): void {\n reaction(\n () => this.props.data.checkout.result?.isExpressPaymentModulesReady,\n () => {\n const items = this._getItems();\n if (items.length === 0) {\n this.props.context.telemetry.error('Checkout express payment container content is empty, module wont render');\n } else {\n let isReady = true;\n\n for (const item of items) {\n // @ts-ignore\n if (item.key.includes('checkout-express')) {\n // @ts-ignore\n const extensionPropertyKey = `is${item.props.config.paymentTenderType}ExpressModuleReady`;\n\n const isModuleReady =\n this.props.data.checkout.result?.isExpressPaymentModulesReady?.find(\n property => property.Key === extensionPropertyKey\n )?.Value?.BooleanValue ?? false;\n isReady = isReady && isModuleReady;\n }\n }\n this.setState({ isReady });\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\n isExpressCheckoutApplied => {\n this.setState({ shouldHideExpressPaymentContainer: isExpressCheckoutApplied });\n }\n );\n }\n\n public render(): JSX.Element | null {\n const {\n config: { checkoutExpressPaymentContainerHeading },\n resources: { checkoutExpressPaymentSectionLoadingMessage },\n data: { checkout }\n } = this.props;\n\n if (!checkout.result || checkout.result?.isExpressCheckoutApplied || checkout.result?.isPaymentVerificationRedirection) {\n this.props.context.telemetry.information('Other payment is applied, checkout express payment container module wont render');\n return null;\n }\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.ExpressPayment === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout express payment container module wont render');\n return null;\n }\n\n const items = this._getItems();\n if (items.length === 0) {\n this.props.context.telemetry.error('Checkout express payment container content is empty, module wont render');\n return null;\n }\n\n const shouldHideExpressPaymentContainerClassName: string = this.state.shouldHideExpressPaymentContainer ? 'hide' : '';\n\n const moduleClassName = classname(\n 'ms-checkout-express-payment-container',\n this.props.config.className,\n shouldHideExpressPaymentContainerClassName\n );\n\n const viewProps: ICheckoutExpressPaymentContainerViewProps = {\n ...this.props,\n\n checkoutPlainContainerProps: {\n moduleProps: this.props,\n className: moduleClassName\n },\n items: items,\n isReady: this.state.isReady,\n waiting: ,\n title: checkoutExpressPaymentContainerHeading && this._renderMsdyn365Text(checkoutExpressPaymentContainerHeading),\n headerProps: { className: 'ms-checkout-express-payment-container__head' }\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _getItems = (): React.ReactNode[] => {\n const { slots } = this.props;\n return (slots && slots.primary && slots.primary.length && slots.primary) || [];\n };\n\n /**\n * Renders heading.\n * @param checkoutExpressPaymentContainerHeading - The checkout express container heading.\n * @returns React node.\n */\n private _renderMsdyn365Text(checkoutExpressPaymentContainerHeading: ICheckoutExpressPaymentContainerHeadingData): 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 private _handleCheckoutExpressContainerHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.checkoutExpressPaymentContainerHeading!.text = event.target.value);\n}\n\nexport default CheckoutExpressPaymentContainer;\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 { ICheckoutExpressPaymentContainerViewProps } from './checkout-express-payment-container';\n\ninterface IContainerItemsComponent {\n isLoadingClassName: string;\n items: React.ReactNode[];\n}\n\nconst ContainerItemsComponent: React.FC = ({ isLoadingClassName, items }) => (\n
{items}
\n);\n\nconst CheckoutExpressPaymentContainerView: React.FC = ({\n checkoutPlainContainerProps,\n items,\n isReady,\n waiting,\n title,\n headerProps\n}) => {\n const isLoadingClassName: string = isReady ? 'showContainer' : 'notShowContainer';\n return (\n \n {title}\n {!isReady && waiting}\n \n \n );\n};\n\nexport default CheckoutExpressPaymentContainerView;\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 { 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 { 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 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 { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutSectionContainerData } from './checkout-section-container.data';\nimport { ICheckoutSectionContainerProps } from './checkout-section-container.props.autogenerated';\nimport LoadingComponent from './components/loading';\n\n/**\n * ICheckoutSectionContainerModuleProps interface.\n */\nexport interface ICheckoutSectionContainerModuleProps\n extends ICheckoutSectionContainerProps,\n IModuleStateProps {\n enableControl: boolean;\n}\n\ninterface ICheckoutSectionContainerState {\n isCollapse?: boolean;\n}\n\nexport interface ICheckoutSectionContainerItem {\n id: string;\n loading?: React.ReactNode;\n itemProps: INodeProps;\n item: React.ReactNode;\n}\n\nexport interface ICheckoutSectionContainerViewProps extends ICheckoutSectionContainerProps<{}> {\n className: string;\n checkoutPlainContainerProps: IModuleProps;\n items: ICheckoutSectionContainerItem[];\n}\n\nconst paymentInstrumentModuleId = 'payment-instrument';\n\nconst zeroAmount = 0;\n\n/**\n *\n * CheckoutPlainContainer component.\n * @extends {React.Component>}\n */\n@observer\nexport class CheckoutPlainContainer extends React.Component {\n @computed public get amountDue(): number {\n const {\n data: { checkout }\n } = this.props;\n if (!checkout?.result) {\n return 0;\n }\n\n const checkoutResult = checkout.result;\n const cart = checkoutResult.checkoutCart?.cart;\n if (!cart || !cart.CartLines || !ArrayExtensions.hasElements(cart.CartLines)) {\n return 0;\n }\n\n return cart.TotalAmount ?? zeroAmount;\n }\n\n public constructor(props: ICheckoutSectionContainerModuleProps) {\n super(props);\n this.state = { isCollapse: false };\n }\n\n public componentDidMount(): void {\n const items = this.getItems();\n const childIds = items.map((item: React.ReactNode) => get(item, 'props.id'));\n const shouldEnableSinglePaymentAuthorizationCheckout: boolean =\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: shouldEnableSinglePaymentAuthorizationCheckout ? undefined : this.onCancel,\n onSubmit: shouldEnableSinglePaymentAuthorizationCheckout ? undefined : this.onSubmit,\n childIds\n });\n\n reaction(\n () => this.props.moduleState.isReady,\n () => {\n this.onContainerReady();\n }\n );\n\n reaction(\n () => this.props.moduleState.shouldSubmitContainer,\n () => {\n this.onSubmit();\n }\n );\n\n // Reaction to collapse the payment section for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.shouldCollapsePaymentSection,\n shouldCollapsePaymentSection => {\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n this.props.moduleState.childIds.filter(childId => childId.includes(paymentInstrumentModuleId))\n );\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && isPaymentSectionContainer) {\n this.setState({ isCollapse: shouldCollapsePaymentSection });\n }\n }\n );\n\n // Reaction to submit section container for new checkout flow\n reaction(\n () => this.props.data.checkout.result?.shouldTriggerPaymentWithPlaceOrder,\n () => {\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n this.props.moduleState.childIds.filter(childId => childId.includes(paymentInstrumentModuleId))\n );\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && isPaymentSectionContainer) {\n this.onSubmit();\n }\n }\n );\n\n // Reaction to set isPaymentSectionContainerReady for new checkout flow.\n reaction(\n () => this.props.moduleState.isReady,\n async isReady => {\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n this.props.moduleState.childIds.filter(childId => childId.includes(paymentInstrumentModuleId))\n );\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && isPaymentSectionContainer && this.amountDue > zeroAmount) {\n await this.props.data.checkout.result?.updateIsPaymentSectionContainerReady({\n newIsPaymentSectionContainerReady: isReady\n });\n }\n }\n );\n\n // Reaction to set isPaymentSectionContainerHasError for new checkout flow.\n reaction(\n () => this.props.moduleState.hasError,\n async hasError => {\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n this.props.moduleState.childIds.filter(childId => childId.includes(paymentInstrumentModuleId))\n );\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && isPaymentSectionContainer) {\n await this.props.data.checkout.result?.updateIsPaymentSectionContainerHasError({\n newIsPaymentSectionContainerHasError: hasError\n });\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isCheckoutCallFailed,\n async () => {\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n this.props.moduleState.childIds.filter(childId => childId.includes(paymentInstrumentModuleId))\n );\n\n if (isPaymentSectionContainer && this.props.data.checkout.result?.isCheckoutCallFailed) {\n this.onEdit();\n await this.props.data.checkout.result.updateIsCheckoutCallFailed({ newIsCheckoutCallFailed: true });\n }\n }\n );\n }\n\n public componentDidUpdate(): void {\n if (!this.props.moduleState.hasExternalSubmitGroup) {\n return;\n }\n\n /**\n * Review all modules to updating status if one of the modules has error.\n */\n const { childIds, hasError, getModule } = this.props.moduleState;\n const hasReadyOrSkippedItems = childIds.some((childId: string) => {\n const state = getModule(childId);\n return !!state && (state.isReady || state.isSkipped);\n });\n if (hasReadyOrSkippedItems && hasError) {\n this.onEdit();\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutSectionContainerModuleProps, nextState: ICheckoutSectionContainerState): 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 enableControl,\n moduleState,\n config: { width }\n } = this.props;\n\n const items = this.getItems();\n if (items.length === 0) {\n this.props.context.telemetry.error('Checkout section content is empty, module wont render');\n return null;\n }\n\n const moduleClassName = classname(\n 'ms-checkout-section-container',\n {\n 'has-initialized': moduleState.hasInitialized,\n 'is-ready': moduleState.isReady,\n 'is-updating': !moduleState.isReady,\n container: width === 'container',\n 'col-12 fullwidth': width === 'fluid'\n },\n this.props.config.className\n );\n\n const viewProps: ICheckoutSectionContainerViewProps = {\n ...this.props,\n\n className: moduleClassName,\n checkoutPlainContainerProps: {\n moduleProps: this.props,\n className: moduleClassName\n },\n items: items.map((item: React.ReactNode) => {\n const childId = get(item, 'props.id');\n const state = moduleState.getModule(childId);\n\n // Modules has not completed initializing or it's disable\n const hidden =\n this.state.isCollapse || (state.hasModuleState && (!state.hasInitialized || state.isDisabled || state.isSkipped));\n return {\n id: childId,\n loading: state.hasModuleState && !state.hasInitialized && ,\n itemProps: {\n 'data-type-name': state.typeName,\n className: classname('ms-checkout-section-container__item', {\n hidden,\n initialized: state.hasInitialized,\n disabled: state.isDisabled,\n skipped: state.isSkipped,\n ready: state.isReady,\n updating: state.isUpdating,\n pending: state.isPending\n })\n },\n item: React.cloneElement(item as React.ReactElement, { enableControl })\n };\n })\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly getItems = (): React.ReactNode[] => {\n const { slots } = this.props;\n return (slots && slots.primary && slots.primary.length && slots.primary) || [];\n };\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 private readonly clearError = (): void => {\n // Clear error before action, otherwise it will rise conflict;\n this.getActiveChildModuleStates().forEach(state => {\n state.hasError && state.setHasError(false);\n });\n };\n\n private readonly onSubmit = (): void => {\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n this.props.moduleState.childIds.filter(childId => childId.includes(paymentInstrumentModuleId))\n );\n\n this.props.telemetry.information('Section container onSubmit is called.');\n\n this.clearError();\n this.getActiveChildModuleStates().forEach(state => {\n !state.isReady && state.onSubmit && state.onSubmit();\n });\n\n // Handle when the amount due is zero\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n isPaymentSectionContainer &&\n this.amountDue === zeroAmount\n ) {\n this.props.data.checkout.result?.updateIsPaymentSectionContainerReady({\n newIsPaymentSectionContainerReady: true\n });\n }\n };\n\n private readonly onCancel = (): void => {\n this.props.telemetry.information('Section container onCancel is called.');\n\n this.clearError();\n this.getActiveChildModuleStates().forEach(state => {\n !state.isReady && state.onCancel && state.onCancel();\n });\n };\n\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Section container onEdit is called.');\n\n this.getActiveChildModuleStates().forEach(state => {\n (state.isReady || state.isSkipped) && state.onEdit && state.onEdit();\n });\n };\n\n private readonly onContainerReady = (): void => {\n this.props.telemetry.information('Section container onContainerReady is called.');\n\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\n}\n\nexport default withModuleState(CheckoutPlainContainer);\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 { ICheckoutSectionContainerItem, ICheckoutSectionContainerViewProps } from './checkout-section-container';\n\nconst ItemComponent: React.FC = ({ loading, itemProps, item }) => (\n <>\n {loading}\n {item}\n \n);\n\nconst CheckoutSectionContainerView: React.FC = ({ checkoutPlainContainerProps, items }) => (\n \n {items.map(item => (\n \n ))}\n \n);\n\nexport default CheckoutSectionContainerView;\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\nconst Loading: React.FC = () =>
;\n\nexport default Loading;\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 * 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 const isOrderQuantityLimitsFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n const isEcommerceQuantityLimitsFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\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 if (\n (isOrderQuantityLimitsFeatureEnabledInHq && isOrderQuantityLimitsFeatureEnabledInSiteSettings) ||\n isEcommerceQuantityLimitsFeatureEnabledInHq\n ) {\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 /**\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 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\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 { ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from './checkout';\nimport { IEmailDelivery } from './components';\nimport { IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\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 { 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 } from './components';\nimport { IGiftCardBalanceCheckViewProps } from './gift-card-balance-check';\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 { 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 { AddOrderTemplateToCartComponent, ILinesAddedToCartDialogResources } from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductList, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getFallbackImageUrl,\n getProductUrlSync,\n OrderTemplate,\n OrderTemplateLine,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateActionMessageState } from '../order-template-list';\n\nexport interface ISingleOrderTemplateProps extends ProductList {\n orderTemplateState: IOrderTemplateActionMessageState;\n name?: string;\n orderTemplate: OrderTemplate;\n context: ICoreContext;\n imageSettings?: IImageSettings;\n enableImageProductLink?: boolean;\n removeFromOrderTemplateListText: string;\n addToBagText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n handlers: {\n onRemoveOrderTemplate(id: string): void | undefined;\n onDismiss(): void;\n };\n resources: {\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n telemetryContent?: ITelemetryContent;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n}\n\nexport interface ISingleOrderTemplateViewProps {\n key: string;\n orderTemplateImage: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n orderTemplateStatusMessage?: React.ReactNode;\n orderTemplateName?: React.ReactNode;\n orderTemplateAriaLabel?: string;\n orderTemplateHeaderDivider?: React.ReactNode;\n}\n\nconst _removeItemFromOrderTemplateList = (props: ISingleOrderTemplateProps): void => {\n const { onRemoveOrderTemplate } = props.handlers;\n const { itemKey } = props;\n\n onRemoveOrderTemplate && itemKey && onRemoveOrderTemplate(itemKey);\n};\n\nconst OrderTemplateActions = {\n removeOrderTemplate: _removeItemFromOrderTemplateList\n};\n\n/**\n * Remove order template action.\n * @param input -Single order template props.\n * @returns Set remove order template.\n */\nconst removeOrderTemplateActionHandler = (input: ISingleOrderTemplateProps) => () => {\n OrderTemplateActions.removeOrderTemplate(input);\n};\n\nexport const OrderTemplateRender = (input: ISingleOrderTemplateProps): ISingleOrderTemplateViewProps | null => {\n const {\n Id,\n orderTemplate,\n removeFromOrderTemplateListText,\n orderTemplateState,\n handlers,\n name,\n imageSettings,\n context,\n telemetryContent,\n enableImageProductLink\n } = input;\n\n if (!Id) {\n return null;\n }\n\n const _getOrderTemplatePageUrl = (): string => {\n const url = getUrlSync('ordertemplate', context.actionContext) ?? '';\n const separator = url.includes('?') ? '&' : '?';\n if (Id) {\n return `${url}${separator}id=${Id}`;\n }\n return '';\n };\n\n const { onDismiss } = handlers;\n\n return {\n key: `${Id}-template`,\n orderTemplateImage: _renderOrderTemplateImages(context, orderTemplate.orderTemplateLines, imageSettings, enableImageProductLink),\n orderTemplateAriaLabel: _renderAriaLabel(input),\n orderTemplateName: (\n
\n \n
\n {orderTemplate.totalLines}\n {` `}\n line items\n
\n
\n
\n ),\n addToCartButton: (\n
\n \n
\n ),\n removeButton: (\n \n ),\n orderTemplateStatusMessage: orderTemplateState && orderTemplateState.isOpen && orderTemplateState.userMessage && (\n
\n \n {orderTemplateState.userMessage}\n \n
\n )\n };\n};\n\n/**\n * On image click handler.\n * @param productUrl -Product url value.\n * @returns Assign window location.\n */\nconst onClickHandler = (productUrl: string) => () => {\n window.location.assign(productUrl);\n};\n\nconst _renderOrderTemplateImages = (\n context: ICoreContext,\n orderTemplateLines?: OrderTemplateLine[],\n imageSettings?: IImageSettings,\n enableImageProductLink?: boolean\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n lg: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n xl: { q: 'w=140&h=140&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n if (orderTemplateLines) {\n const count = orderTemplateLines.length < 4 ? orderTemplateLines.length : 4;\n\n return (\n
\n {orderTemplateLines?.slice(0, count).map(line => {\n const productUrl = line.fullProduct\n ? _updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line?.productListLine?.CatalogId)\n : '';\n\n return (\n \n );\n })}\n
\n );\n }\n return
;\n};\n\n// This method is used to update the product url with the catalogId\nconst _updateProductUrlCatalog = (productDetails: SimpleProduct, context: ICoreContext, catalogId: number | undefined): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return fullUrl.href;\n }\n return productUrl;\n};\n\nconst _renderAriaLabel = (props: ISingleOrderTemplateProps): string => {\n const { name } = props;\n return `${name}`;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateListStatus } from '../order-template-list';\n\nexport interface IOrderTemplateListStatusMessageProps {\n className?: string;\n errorType: orderTemplateListStatus;\n text?: string;\n}\n\nexport const OrderTemplateListStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * The Create Order Template Button Props.\n */\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n /**\n * The label for create order template.\n */\n createOrderTemplateText: string;\n\n /**\n * The create order template dialog resources.\n */\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n\n /**\n * The delegate to fire when dialog captured any user entry.\n */\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = props => {\n const onCancelHandler = React.useCallback(() => {\n return;\n }, []);\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = React.useCallback(() => {\n setOrderTemplateNameDialogOpen(true);\n }, []);\n\n return (\n <>\n \n {props.createOrderTemplateText}\n \n \n \n );\n};\n\nexport default CreateOrderTemplateButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Spinner from '../order-template/components/add-line/spinner';\nimport {\n ISingleOrderTemplateProps,\n ISingleOrderTemplateViewProps,\n OrderTemplateListStatusMessage,\n OrderTemplateRender\n} from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { HeadingTag, IOrderTemplateListProps, IOrderTemplateListResources } from './order-template-list.props.autogenerated';\n\nexport interface IOrderTemplateActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n headerStatusMessage: string;\n}\n\nexport type orderTemplateListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IOrderTemplateListViewProps extends IOrderTemplateListProps {\n OrderTemplateList: IModuleProps;\n status?: orderTemplateListStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplates?: INodeProps;\n OrderTemplate?: INodeProps;\n orderTemplates?: ISingleOrderTemplateViewProps[];\n createOrderTemplateButton?: React.ReactNode;\n templateHeaderStatusMessage?: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateList component.\n * @extends {React.PureComponent, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps) {\n super(props);\n this.state = {\n itemKey: '',\n userMessage: '',\n headerStatusMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false\n };\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps,\n nextState: IOrderTemplateActionMessageState\n ): 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 { className, heading } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && orderTemplates.result;\n const orderTemplateListHeading = heading?.text ?? this.props.resources.orderTemplateListTitle;\n\n if (orderTemplates.status === 'LOADING') {\n const errorProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: (\n \n )\n };\n return this.props.renderView(errorProps);\n }\n\n if (orderTemplatesData && orderTemplatesData.length === 0) {\n // When no order templates are found for customer\n const emptyViewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n createOrderTemplateButton: (\n \n ),\n heading: (\n \n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: ,\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n
\n \n {this.state.headerStatusMessage}\n \n
\n ),\n OrderTemplates: {\n className: 'ms-order-template__list-item',\n tag: 'ul'\n },\n OrderTemplate: {\n className: 'ms-order-template__tile',\n tag: 'li'\n },\n orderTemplates: orderTemplatesData && this._renderOrderTemplateList(orderTemplatesData)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateListResources): 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 private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private _renderOrderTemplateList(orderTemplates: OrderTemplate[]): ISingleOrderTemplateViewProps[] {\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n return orderTemplates.map((orderTemplate: OrderTemplate, index) => {\n const currentTemplateProps: ISingleOrderTemplateProps = {\n orderTemplateState: this.state,\n Id: orderTemplate.productList.Id,\n name: orderTemplate.productList.Name,\n orderTemplate,\n context,\n imageSettings,\n enableImageProductLink,\n removeFromOrderTemplateListText: 'remove',\n addToBagText: this.props.resources.addToBagButtonText,\n index,\n itemKey: orderTemplate.productList.Id,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n handlers: {\n onRemoveOrderTemplate: this._onRemoveFromOrderTemplateList,\n onDismiss: this._onDismiss\n },\n resources: {\n closeWindowButtonText: this.props.resources.closeWindowButtonText,\n addToCartFailureMessage: this.props.resources.addToCartFailureMessage,\n addToCartSuccessMessage: this.props.resources.addToCartSuccessMessage,\n addToCartProcessMessage: this.props.resources.addToCartProcessMessage,\n orderTemplateErrorMessage: this.props.resources.orderTemplateErrorMessage,\n linesAddedToCartDialogResources: {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n }\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled()\n };\n\n return OrderTemplateRender(currentTemplateProps)!;\n });\n }\n\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _reloadPage = async () => {\n window.location.reload();\n };\n\n private readonly _onRemoveFromOrderTemplateList = (productListId: string): void | undefined => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplates } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplates.result && orderTemplates.result[0] && productListId) {\n const orderTemplate = orderTemplates.result.find(p => p.productList.Id === productListId);\n if (orderTemplate) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: productListId,\n headerStatusMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n })\n .then(this._reloadPage)\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template.');\n }\n }\n };\n}\n\nexport default OrderTemplateList;\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 { ISingleOrderTemplateViewProps } from './components';\nimport { IOrderTemplateListViewProps } from './order-template-list';\n\nexport const OrderTemplateListView: React.FC = props => {\n const {\n OrderTemplateList,\n status,\n statusMessage,\n heading,\n OrderTemplates,\n orderTemplates,\n OrderTemplate,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n \n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n \n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n \n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\nexport default OrderTemplateListView;\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 default (props: { className: string; msg?: string }) => (\n <>\n
\n {props?.msg &&
{props?.msg}
}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n ArrayExtensions,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogs?: ProductCatalog[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectCatalogTitleText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n productCatalogs: ProductCatalog[] | null;\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedCatalogId: number | undefined;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component {\n public state: IAddLineToTemplateState = {\n isOpen: false,\n query: '',\n products: [],\n productCatalogs: [],\n content: CONTENT.Search,\n selectedProduct: null,\n selectedCatalogId: 0\n };\n\n public defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\n }\n\n public componentDidMount(): void {\n this._getCatalogs();\n }\n\n public onComponentDidUpdate(): void {\n this.searchTextInput.current?.focus();\n }\n\n @computed get showBackArrow(): boolean {\n return this.state.content === CONTENT.ProductConfiguration;\n }\n\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): 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 {\n resources: { addLineModalLinkText, backToResultsText }\n } = this.props;\n\n const modalProps = {\n ...this.props,\n className: 'msc-add-line-to-template',\n toggle: this._toggleModalHandler,\n isOpen: this.state.isOpen,\n ariaLabel: addLineModalLinkText\n };\n\n return (\n <>\n \n \n {this.showBackArrow && (\n \n )}\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n {addLineModalLinkText}\n \n \n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\n } = this.props;\n\n return (\n \n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\n <>\n \n \n {this._getCatalogNodes()}\n \n \n )}\n
\n \n
\n \n );\n };\n\n private readonly _onSearchSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n\n const query = get(this, 'searchTextInput.current.value', null);\n\n if (!query) {\n return;\n }\n\n this.setState({\n content: CONTENT.Loading\n });\n\n this._getSearchResults(query)\n .then(result => {\n if (result.length === 0) {\n this.setState({\n products: result,\n content: CONTENT.NotFound\n });\n } else {\n this.setState({\n products: result,\n content: CONTENT.ProductList\n });\n }\n })\n .catch(error => {\n this.setState({\n content: CONTENT.Error\n });\n });\n };\n\n private readonly _onQuantityChangeHandler = (event: React.ChangeEvent) => {\n this.setState({\n selectedQuantity: +event.target.value\n });\n };\n\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise => {\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = this.props.context;\n const varianteInput = new SelectedVariantInput(product.RecordId, channelId, [], undefined, this.props.context.request);\n const productVariant = await getSelectedVariant(varianteInput, actionContext);\n\n if (!productVariant) {\n this.props.context.telemetry.error('Error retrieving product variant');\n return Promise.resolve([]);\n }\n\n const dimensions = await this._getProductDimensions(product as SimpleProduct);\n\n this.setState({\n selectedProductDimensions: dimensions,\n content: CONTENT.ProductConfiguration,\n selectedProduct: productVariant\n });\n\n return dimensions;\n };\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n this.setState({\n query: event.target.value\n });\n };\n\n private readonly _onBackButtonClickHandler = (): void => {\n this.setState({\n content: CONTENT.ProductList\n });\n };\n\n private readonly _highlightSearchTerm = (name: string) => {\n const parsedName = name && unescape(name.replace(new RegExp(this.state.query, 'i'), '$&'));\n\n return (\n \n );\n };\n\n private readonly _resultCountText = (): string => {\n return this.props.resources.searchResultsCountVerbage\n .replace('{count}', this.state.products.length.toString())\n .replace('{subject}', `${this.props.resources.searchResultsCountSubject}${this.state.products.length > 1 ? 's' : ''}`);\n };\n\n private _renderContent(): React.ReactNode | null {\n switch (this.state.content) {\n case CONTENT.ProductConfiguration:\n const { selectedProduct, selectedProductDimensions } = this.state;\n const viewProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n product: selectedProduct!,\n dimensions: selectedProductDimensions!,\n addToTemplateHandler: this._addItemToTemplateHandler,\n onQuantityChangeHandler: this._onQuantityChangeHandler,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm()\n };\n\n return ;\n\n case CONTENT.ProductList:\n const productProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n clickHandler: this._onSelectItem,\n products: this.state.products,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm(),\n renderResultCountText: this._resultCountText\n };\n\n return (\n \n \n \n );\n\n case CONTENT.Loading:\n return (\n \n {this._renderSearchForm()}\n \n \n );\n\n case CONTENT.NotFound:\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\n\n return (\n \n

{this._resultCountText()}

\n {this._renderSearchForm()}\n \n
\n );\n\n case CONTENT.Error:\n return (\n \n {this._renderSearchForm()}\n
\n {this.props.resources.searchErrorMessage}\n
\n
\n );\n\n default:\n return {this._renderSearchForm()};\n }\n }\n\n private readonly _addItemToTemplateHandler = async (config: IProductConfigurationState): Promise => {\n const {\n orderTemplateId,\n context: { actionContext },\n isMultipleCatalogFeatureEnabledInHq\n } = this.props;\n const catalogId = this.state.selectedCatalogId;\n const input = isMultipleCatalogFeatureEnabledInHq\n ? new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea',\n isMultipleCatalogFeatureEnabledInHq,\n catalogId\n )\n : new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea'\n );\n const result = await addItemToOrderTemplate(input, actionContext);\n this.setState({\n isOpen: false,\n reloadPage: true\n });\n // reload when closing\n window.location.reload();\n return result;\n };\n\n /**\n *\n * Get all active product catalogs.\n */\n private _getCatalogs(): void {\n const { isMultipleCatalogFeatureEnabledInHq, catalogs } = this.props;\n\n // if Channel Multiple Catalogs Feature is enabled then show all catalogs.\n const productCatalogs = isMultipleCatalogFeatureEnabledInHq && catalogs ? catalogs : [];\n\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n // set the current catalog id as a default selected catalog id from the url\n this.setState({\n productCatalogs: productCatalogs,\n selectedCatalogId: catalogId\n });\n }\n\n private _getCatalogNodes(): JSX.Element[] | null {\n const { productCatalogs, selectedCatalogId } = this.state;\n if (productCatalogs && ArrayExtensions.hasElements(productCatalogs)) {\n return productCatalogs.map((productCatalog: ProductCatalog) => {\n // initially select default catalog in dropdown\n const isSelected = productCatalog.RecordId === selectedCatalogId;\n return (\n \n );\n });\n }\n return [];\n }\n\n private readonly _onCatalogSelectionChange = (event: React.ChangeEvent) => {\n this.setState({\n selectedCatalogId: Number.parseInt(event.target.value, 10)\n });\n };\n\n private _getSearchResults(searchText: string): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { selectedCatalogId } = this.state;\n const searchCriteriaInput: ProductSearchCriteria = {};\n\n searchCriteriaInput.Context = {\n ChannelId: channelId,\n CatalogId: selectedCatalogId\n };\n searchCriteriaInput.IncludeAttributes = true;\n searchCriteriaInput.SearchCondition = searchText;\n\n return searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n }\n\n private async _getProductDimensions(product: SimpleProduct): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const id = product.MasterProductId ? product.MasterProductId : product.RecordId;\n\n return getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(id, channelId, [], this.props.context.request),\n actionContext\n );\n }\n\n private readonly _toggleModalHandler = () => {\n if (this.state.isOpen) {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'add-item-to-template', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'add-item-to-template');\n this._getCatalogs();\n this.addLineButtonRef.current!.focus();\n }\n\n this.setState({\n isOpen: !this.state.isOpen,\n content: CONTENT.Search\n });\n\n if (this.state.reloadPage) {\n window.location.reload();\n this.setState({\n reloadPage: false\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 { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IDropdownState {\n /**\n * @friendlyName selectedIndex\n * @description Selected index.\n */\n selectedIndex: string;\n}\n\nexport interface IDropdownProps {\n dropdownId: number;\n dropdownName: string;\n dropdownList: IDropdownItemProps[];\n telemetryContent?: ITelemetryContent;\n onChange?(selection: IDropdownOnSelection): void;\n}\n\nexport interface IDropdownItemProps {\n value: string;\n id: number;\n}\n\nexport interface IDropdownOnSelection {\n dropdownId: number;\n selectId: string;\n selectedValue: string;\n}\n\n/**\n *\n * DropDown component.\n * @extends {React.PureComponent}\n */\nexport class Dropdown extends React.PureComponent {\n private readonly selectMenu: React.RefObject = React.createRef();\n\n constructor(props: IDropdownProps, state: IDropdownState) {\n super(props);\n this.state = {\n selectedIndex: ''\n };\n }\n\n public componentDidMount(): void {\n if (this.selectMenu.current) {\n this.selectMenu.current.selectedIndex = 0;\n }\n }\n\n public render(): JSX.Element {\n const { dropdownId, dropdownList, dropdownName } = this.props;\n\n return (\n \n {dropdownList.map(\n (item: IDropdownItemProps) =>\n item && (\n \n {item.value}\n \n )\n )}\n \n );\n }\n\n private readonly _onChanged = (event: React.ChangeEvent): void => {\n this.setState({ selectedIndex: event.target.value });\n\n if (this.props.onChange) {\n this.props.onChange({\n dropdownId: this.props.dropdownId,\n selectId: event.target.value,\n selectedValue: event.target.innerText\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 * as React from 'react';\n\nexport const NotFoundComponent = (props: { error: string; msg: string }) => (\n <>\n
\n
{props.error}
\n
{props.msg}
\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { debounce } from 'lodash';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\ninterface IQuantityProps {\n min?: number;\n max: number;\n currentCount?: number;\n disabled?: boolean;\n incrementGlyphClass?: string;\n decrementGlyphClass?: string;\n decrementButtonAriaLabel?: string;\n incrementButtonAriaLabel?: string;\n inputQuantityAriaLabel?: string;\n id?: string;\n onChange?(newValue: number): void;\n}\n\ninterface IQuantityState {\n currentInput: number;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class OrderTemplateQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n constructor(props: IQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount || 1 };\n this._handleChange = this._handleChange.bind(this);\n\n reaction(\n () => this.props.currentCount,\n () => {\n this.setState({ currentInput: this.props.currentCount || 1 });\n }\n );\n }\n\n public render(): JSX.Element {\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const disabled = this.props.currentCount === this.props.min;\n const incDisabled = this.props.currentCount === this.props.max;\n const currentValue = this.state.currentInput;\n let extraClass = '';\n if (disabled) {\n // The quantity has reached its boundaries (max or min)\n extraClass = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClass = 'transition';\n }\n const getChangeHandler = (amount: number) => () => {\n this._onIncrementalChange(amount);\n };\n\n return (\n
\n \n \n \n \n \n \n \n
\n );\n }\n\n private _onIncrementalChange(amount: number): void {\n const updatedQuantity = this.state.currentInput + amount;\n\n if (updatedQuantity >= 1 && updatedQuantity <= this.props.max) {\n this.props.onChange && this.props.onChange(updatedQuantity);\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt(e.target.value, 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, 200)();\n });\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\n this.props.onChange && this.props.onChange(minValue);\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\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 { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductDimensionValue, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getFallbackImageUrl,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getSelectedVariant,\n IProductInventoryInformation,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent, ModalBody, ModalFooter } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport OrderTemplateQuantity from '../common/order-template-quantity';\nimport { Dropdown, IAddLineToTemplateProps, IAddLineToTemplateResources, IDropdownItemProps, IDropdownOnSelection } from '.';\n\nexport interface IProductCnnfigurationProps extends IAddLineToTemplateProps {\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n imageSettings: IImageSettings;\n telemetryContent?: ITelemetryContent;\n searchForm: React.ReactNode;\n addToTemplateHandler(params: IProductConfigurationState): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n}\n\nexport interface IProductConfigurationState {\n quantity: number;\n unitPrice: number;\n totalPrice: number;\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n selectedDimensions: {};\n productAvailableQuantity?: IProductInventoryInformation;\n buttonDisabled: boolean;\n showAddConfirmation: boolean;\n errorMessage?: string;\n isBusy: boolean;\n errors: { dimension?: string[]; add?: string };\n}\n\n/**\n * Configure selected product for addition to order template.\n */\nexport class ProductConfiguration extends React.Component {\n private selectedDimensions: {} = {};\n\n constructor(props: IProductCnnfigurationProps) {\n super(props);\n\n this.state = {\n quantity: 1,\n unitPrice: props.product.Price,\n totalPrice: props.product.Price,\n product: props.product,\n dimensions: props.dimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n selectedDimensions: {},\n buttonDisabled: false,\n showAddConfirmation: false\n } as IProductConfigurationState;\n }\n\n public shouldComponentUpdate(nextProps: IProductCnnfigurationProps, nextState: IProductConfigurationState): 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 {\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings }\n },\n resources: {\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n totalPriceLabel\n },\n imageSettings,\n highlightSearchTerm\n } = this.props;\n const { buttonDisabled, product, quantity, unitPrice, totalPrice, showAddConfirmation, errors } = this.state;\n const isMultipleCatalogSelect = this.props.isMultipleCatalogFeatureEnabledInHq ? 'isMultipleCatalogSelect' : '';\n return (\n <>\n \n {this.props.searchForm}\n
\n
\n
\n \n
\n
{product?.ItemId}
\n {highlightSearchTerm(product?.Name ?? '')}\n
\n {addLineProductUnitPricePrefix}\n {` `}\n {this._formatPrice(unitPrice)}\n
\n
\n {addLineProductUnitOfMeasurePrefix}\n {` `}\n {product?.DefaultUnitOfMeasure}\n
\n
\n
\n
{this._getDimensionsNodes()}
\n
\n
\n
{quantitySelectLabel}
\n \n
\n
\n
\n {totalPriceLabel}\n {` `}\n {this._formatPrice(totalPrice)}\n
\n
\n \n {showAddConfirmation && (\n \n
\n )}\n {errors?.add && (\n
\n
\n )}\n \n {addItemToTemplateText}\n \n \n \n );\n }\n\n private _getConfirmationMessage(): string {\n const selectedDimensionNames = this.state.dimensions\n .map(dimension => {\n let variant = dimension.DimensionValues?.find(\n value => value.RecordId === this.selectedDimensions[dimension.DimensionTypeValue]\n )?.Value;\n if (dimension.DimensionTypeValue === 3) {\n variant = `size ${variant}`;\n }\n return variant;\n })\n .filter(value => value);\n\n return this.props.resources.addToTemplateConfirmation\n .replace('{count}', this.state.quantity.toString())\n .replace('{productAndDimensions}', `${this.state.product.Name}, ${Object.values(selectedDimensionNames).join(', ')}`);\n }\n\n private _getDimensionsNodes(): React.ReactElement[] {\n const { dimensions } = this.state;\n const { resources } = this.props;\n\n return dimensions?.map((dimension: ProductDimensionFull) => {\n const { DimensionValues, DimensionTypeValue } = dimension;\n const mapDimensions = (value: ProductDimensionValue): IDropdownItemProps => ({\n id: value.RecordId,\n value: value.Value || ''\n });\n const dimensionName = this._getDropdownName(DimensionTypeValue, resources);\n const dropdownList: IDropdownItemProps[] = DimensionValues ? DimensionValues.map(mapDimensions) : [];\n dropdownList.unshift({ id: 0, value: `Choose a ${dimensionName}` });\n\n return (\n
\n
{dimensionName}
\n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n \n \n \n )}\n \n
\n );\n });\n }\n\n private readonly _getDimensionsError = (dimensionName: string) =>\n this.props.resources.dimensionMissingError.replace(/{dimensionName}/g, dimensionName);\n\n private readonly _addToTemplateHandler = async (event: React.MouseEvent) => {\n // Hide confirmation of previous addition when adding multiple items\n this.setState({\n isBusy: true,\n showAddConfirmation: false,\n errors: { ...this.state.errors, add: undefined }\n });\n\n const missingDimensions = this.state.dimensions\n .map(dimension => dimension.DimensionTypeValue.toString())\n .filter(type => !this.selectedDimensions[type]);\n\n this.setState({\n errors: { dimension: missingDimensions }\n });\n if (missingDimensions.length > 0) {\n this.setState({\n isBusy: false\n });\n return;\n }\n\n this.props\n .addToTemplateHandler({ ...this.state })\n .then(status => {\n // Validate against the existance of a ProductListId\n if (status.ProductListId) {\n this.setState({\n isBusy: false,\n showAddConfirmation: true\n });\n }\n })\n .catch(error => {\n const { addToTemplateDuplicateError, addToTemplateGenericError } = this.props.resources;\n let errorMessage;\n\n if (error.error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n errorMessage = addToTemplateDuplicateError;\n } else {\n errorMessage = addToTemplateGenericError;\n }\n\n this.setState({\n isBusy: false,\n errors: { ...this.state.errors, add: errorMessage }\n });\n this.props.context.telemetry.error('Error adding item to order template');\n });\n };\n\n private readonly _onQuantityChange = (newValue: number) => {\n this.setState({\n quantity: newValue,\n totalPrice: newValue * this.props.product.Price\n });\n };\n\n private readonly _updateDimensionValue = (\n productDimensionFull: ProductDimensionFull,\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 // Rehydrate the selected variants price, available dimensions & sizes\n private readonly _onDimensionChanged = async (selection: IDropdownOnSelection): Promise => {\n const { product, dimensions, context } = this.props;\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = context;\n\n // Remaining error notifications for missing dimensions\n const remainingDimensionsErrors = this.state.errors?.dimension?.filter(id => id !== selection.dropdownId.toString());\n\n this.setState({\n isBusy: false,\n showAddConfirmation: false,\n buttonDisabled: true,\n errors: { add: undefined, dimension: remainingDimensionsErrors }\n });\n\n // Update currently selected dimensions\n this.selectedDimensions[selection.dropdownId] = +selection.selectId;\n\n const mappedDimensions = dimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, this.selectedDimensions[dimension.DimensionTypeValue]) ||\n dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension && dimension.DimensionValue;\n });\n\n const variantProduct = await getSelectedVariant(\n new SelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n\n if (!variantProduct) {\n this.props.context.telemetry.error(\n `Error retrieving variant product for product ${product.MasterProductId ? product.MasterProductId : product.RecordId}`\n );\n return;\n }\n\n const dimensionInput = new GetDimensionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n );\n const variantDimensions = await getDimensionsForSelectedVariant(dimensionInput, actionContext);\n\n if (!variantDimensions) {\n this.props.context.telemetry.error('Error retrieving dimensions for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n const availabilityInput = new ProductAvailabilitiesForSelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId\n );\n\n // @TODO sync UX quantity w/ actual availability\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(availabilityInput, actionContext);\n const priceInput = new PriceForSelectedVariantInput(product.RecordId, channelId);\n const productPrice = await getPriceForSelectedVariant(priceInput, actionContext);\n\n if (!productPrice) {\n this.props.context.telemetry.error('Error retrieving price for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n this.setState({\n buttonDisabled: false,\n productAvailableQuantity: (newAvailableQuantity && newAvailableQuantity[0]) || undefined,\n unitPrice: +(productPrice.BasePrice || product.Price),\n dimensions: variantDimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n product: variantProduct\n });\n };\n\n private readonly _getDropdownName = (dimensionType: number, resources: IAddLineToTemplateResources): string => {\n switch (dimensionType) {\n case 1: // Color\n return resources.productDimensionTypeColor;\n case 2: // Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // Size\n return resources.productDimensionTypeSize;\n case 4: // Style\n return resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private _formatPrice(price: number): string {\n const {\n context: {\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n }\n } = this.props;\n\n return formatCurrency(price.toFixed(2), currencyCode);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { IAddLineToTemplateProps } from '.';\n\nexport interface IProductListProps extends IAddLineToTemplateProps {\n products: ProductSearchResult[];\n imageSettings: IImageSettings;\n searchForm: React.ReactNode;\n clickHandler(product: ProductSearchResult): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n renderResultCountText(): string;\n}\n\nexport const ProductList = (props: IProductListProps) => {\n const {\n products,\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings },\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n },\n clickHandler,\n highlightSearchTerm,\n renderResultCountText,\n resources: { selectProductButtonText },\n imageSettings\n } = props;\n\n return (\n <>\n

\n {renderResultCountText()}\n

\n {props.searchForm}\n
\n {products.map((product: ProductSearchResult, index: number) => {\n const { Price, ItemId, Name, PrimaryImageUrl } = product;\n const price = formatCurrency(Price.toFixed(2), currencyCode);\n const primaryImageSource = generateImageUrl(PrimaryImageUrl ?? '', apiSettings) ?? '';\n const fallBackImg = getFallbackImageUrl(ItemId, apiSettings, props.context.request.app?.config?.OmniChannelMedia) ?? '';\n\n return (\n
\n
\n \n
\n
{ItemId}
\n {highlightSearchTerm(Name ?? '')}\n
\n
\n
\n {price}\n \n
\n
\n );\n })}\n
\n \n );\n};\n\ninterface IProductSelectButton {\n product: ProductSearchResult;\n buttonText: string;\n clickHandler(product: ProductSearchResult): Promise;\n}\n\nconst ProductSelectButton = (props: IProductSelectButton) => {\n const [isBusy, setBusy] = useState(false);\n const { product, buttonText, clickHandler } = props;\n const getClickHandler = React.useCallback(async () => {\n setBusy(!isBusy);\n await clickHandler(product);\n setBusy(!isBusy);\n }, [clickHandler, isBusy, product]);\n\n return (\n \n {buttonText}\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 { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport { IOrderTemplateData } from '../order-template.data';\nimport { IOrderTemplateProps } from '../order-template.props.autogenerated';\nimport { AddLineToTemplate } from '.';\n\ninterface IOrderTemplateBulkActionsProps extends IOrderTemplateProps {\n orderTemplateId: string;\n selectedLines: IOrderTemplateLineViewModel[];\n isMinifiedView: boolean;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n telemetryContent?: ITelemetryContent;\n onAddSelectionToBag(): void;\n onRemoveSelection(): void;\n}\n\ninterface IOrderTemplateBulkActionsState {\n isAddDisabled: boolean;\n isRemoveDisabled: boolean;\n}\n\n/**\n * Bulk Order Template line actions.\n */\nexport class OrderTemplateBulkActions extends React.PureComponent {\n public state: IOrderTemplateBulkActionsState = {\n isAddDisabled: true,\n isRemoveDisabled: true\n };\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateBulkActionsProps,\n state: IOrderTemplateBulkActionsState\n ): IOrderTemplateBulkActionsState {\n const selectedLines = props.selectedLines.length;\n let nextState = { ...state };\n nextState = {\n isAddDisabled: selectedLines === 0,\n isRemoveDisabled: selectedLines === 0\n };\n return nextState;\n }\n\n public render(): JSX.Element {\n const {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n addSelectedToBagButtonText,\n removeSelectedToBagButtonText,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n } = this.props.resources;\n\n const addLineProps = {\n context: this.props.context,\n telemetryContent: this.props.telemetryContent,\n resources: {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n },\n imageSettings: this.props.config.imageSettings,\n orderTemplateId: this.props.orderTemplateId,\n isMultipleCatalogFeatureEnabledInHq: this.props.isMultipleCatalogFeatureEnabledInHq,\n catalogs: this.props.data.catalogs?.result\n };\n\n return (\n <>\n \n \n \n {!this.props.isMinifiedView && addSelectedToBagButtonText}\n \n \n \n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\n \n \n );\n }\n\n private readonly addHandler = (event: React.MouseEvent) => {\n this.setState({\n isAddDisabled: true\n });\n\n this.props.onAddSelectionToBag();\n\n this.setState({\n isAddDisabled: false\n });\n };\n\n private readonly removeHandler = (event: React.MouseEvent) => {\n this.setState({\n isRemoveDisabled: true\n });\n\n this.props.onRemoveSelection();\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 AddOrderTemplateToCartComponent,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n RenameOrderTemplateComponent,\n OrderTemplateNameDialog\n} from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\nimport { OrderTemplate, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent, Popover } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nexport interface IOrderTemplateActionsData {\n orderTemplate: OrderTemplate;\n}\n\nexport interface IOrderTemplateActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onRemoveTemplate(orderTemplateId: string): void;\n onRenameTemplate(orderTemplate: ProductList): Promise;\n };\n renameOrderTemplateDialogStrings: IOrderTemplateNameDialogResources;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n resources: {\n addTemplateToBagButtonText: string;\n renameTemplateButtonText: string;\n deleteTemplateButtonText: string;\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n}\n\nexport interface IOrderTemplateActionsViewProps {\n addTemplateToBag: React.ReactNode;\n renameTemplate?: React.ReactNode;\n removeTemplate?: React.ReactNode;\n isMultipleCatalogsFeatureEnabled?: boolean;\n actionsSplitButton?: React.ReactNode;\n}\n\n/**\n * Remove Order Action.\n * @param props -Order template action props.\n * @returns Remove order template.\n */\nconst removeOrderActionHandler = (props: IOrderTemplateActionsProps) => () => {\n _removeOrderTemplate(props);\n};\n\nexport const OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\n const { resources, isMultipleCatalogFeatureEnabledInHq } = props;\n const { deleteTemplateButtonText } = resources;\n\n return {\n addTemplateToBag: _getOrderTemplateAddToCartDialog(props),\n renameTemplate: !isMultipleCatalogFeatureEnabledInHq && _getOrderTemplateRenameControl(props),\n removeTemplate: !isMultipleCatalogFeatureEnabledInHq && (\n \n ),\n actionsSplitButton: isMultipleCatalogFeatureEnabledInHq && \n };\n};\n\nconst _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\n const {\n data: { orderTemplate },\n handlers\n } = props;\n const { onRemoveTemplate } = handlers;\n\n if (onRemoveTemplate) {\n onRemoveTemplate(orderTemplate.productList.Id);\n }\n};\n\nconst _getOrderTemplateAddToCartDialog = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const {\n data: { orderTemplate },\n typeName,\n id,\n context,\n telemetryContent,\n resources,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n const {\n addTemplateToBagButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n } = resources;\n\n const dialogStrings = {\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n };\n\n return (\n \n );\n};\n\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\n return (\n \n );\n};\n\nlet buttonEventReference: HTMLButtonElement | undefined;\nexport const ActionsSplitButton: React.FC = (props: IOrderTemplateActionsProps) => {\n const [isStatementRequestAdminDropdownOpen, setIsStatementRequestAdminDropdownOpen] = useState(false);\n const [renameOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = React.useState(false);\n\n const onOrderTemplateNameCancel = () => {\n context.telemetry.debug('Rename of template was canceled.');\n buttonEventReference?.focus();\n };\n\n const onRenameButtonClick = (event: React.MouseEvent) => {\n buttonEventReference = event.target as HTMLButtonElement;\n setOrderTemplateNameDialogOpen(true);\n event.preventDefault();\n };\n const onToggleDropdown1 = () => {\n setIsStatementRequestAdminDropdownOpen(!isStatementRequestAdminDropdownOpen);\n };\n const {\n data: { orderTemplate },\n resources,\n renameOrderTemplateDialogStrings,\n context\n } = props;\n\n const className = 'ms-order-template-action-bar';\n\n const popoverReference = React.createRef();\n const renderModalPopup = (\n \n );\n const requestStatementDropdownString = `request-statement-dropdown-id-${Random.Guid.generateGuid()}`;\n\n return (\n
\n {renderModalPopup}\n \n {'Options'}\n \n \n \n\n \n {'Delete'}\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 { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport OrderTemplateQuantity from './common/order-template-quantity';\n\nexport interface IOrderTemplateLineProps extends ProductListLine {\n orderTemplateLine: IOrderTemplateLineViewModel;\n productListLine: ProductListLine;\n price?: ProductPrice;\n context: ICoreContext;\n productUrl: string;\n imageSettings?: IImageSettings;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n isQuantityDisabledForUpdate?: boolean;\n handlers: {\n onAddToBag(product: SimpleProduct, quantity: number, itemKey: string, catalogId?: number | undefined): void;\n onRemoveItem(line: IOrderTemplateLineViewModel): void;\n onChangeQuantity(orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps): void;\n onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void;\n };\n resources: {\n selectOneRowText?: string;\n moreButtonText?: string;\n viewProductDetailsText?: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n inputQuantityAriaLabel: string;\n removeFromOrderTemplateLinesText: string;\n addToBagButtonText: string;\n deleteButtonText: string;\n incrementButtonAriaLabel?: string;\n decrementButtonAriaLabel?: string;\n editOrderTemplateLineQuantityError?: string;\n unavailableProductErrorMessage?: string;\n outOfStockProductErrorMessage?: string;\n };\n index: number;\n isMobile: boolean;\n productQuantityView?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n toggleDetailsDisplayed(props: IOrderTemplateLineProps): void;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n catalogs?: ProductCatalog[];\n error?: string;\n shouldDisable?: boolean;\n}\n\nexport interface IOrderTemplateLineViewProps {\n key?: string;\n productImage: React.ReactNode;\n productPrice?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productName?: string;\n productNumber?: React.ReactNode;\n productInfo?: React.ReactNode;\n productLabel?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n productQuantity?: number;\n productQuantityView?: React.ReactNode;\n productListId?: string;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n extraActionsPopup?: JSX.Element | null | undefined;\n isMobile?: boolean;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalog?: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface IEventHandlerFactory {\n getAddToBag(): (event: React.MouseEvent) => void;\n getRemoveItem(): (event: React.MouseEvent) => void;\n}\n\nconst OrderTemplateLineActions = (props: IOrderTemplateLineProps): IEventHandlerFactory => {\n const { orderTemplateLine, productListLine, quantity, handlers } = props;\n const { LineId, CatalogId } = productListLine;\n const { onAddToBag, onRemoveItem } = handlers;\n\n return {\n getAddToBag: () => (event: React.MouseEvent) => {\n LineId &&\n orderTemplateLine.fullProduct &&\n onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId, CatalogId);\n },\n getRemoveItem: () => (event: React.MouseEvent) => LineId && onRemoveItem(props.orderTemplateLine)\n };\n};\n\ninterface IPopupProps extends IOrderTemplateLineProps {\n addButtonClassName: string;\n removeButtonClassName: string;\n}\n\nconst PopUp = (props: IPopupProps): JSX.Element | null => {\n const { addToBagButtonText, removeFromOrderTemplateLinesText, moreButtonText, viewProductDetailsText } = props.resources;\n const [showMobile, setShowMobile] = useState(false);\n const componentClassName = 'ms-table';\n\n const getViewHandler = () => (event: React.MouseEvent) => {\n props.toggleDetailsDisplayed(props);\n };\n\n const toggle = React.useCallback(() => {\n setShowMobile(!showMobile);\n }, [showMobile]);\n\n return (\n
\n \n {showMobile && (\n
\n \n View\n \n {getActionButton(\n props.isMobile,\n props.removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n {getActionButton(\n props.isMobile,\n props.addButtonClassName,\n addToBagButtonText,\n OrderTemplateLineActions(props).getAddToBag()\n )}\n
\n )}\n
\n );\n};\n\nconst getActionButton = (\n isMobile: boolean,\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n\nconst getDesktopActionButton = (\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n/**\n * On Select line function.\n * @param orderTemplateLine -Order template line.\n * @param input -Order template line props.\n * @returns Set on select order template.\n */\nconst onSelectLineHandler = (orderTemplateLine: IOrderTemplateLineViewModel, input: IOrderTemplateLineProps) => (\n event: React.ChangeEvent\n) => {\n orderTemplateLine.isChecked = !orderTemplateLine.isChecked;\n\n input.handlers.onSelect(orderTemplateLine, event.target.checked);\n};\n\nexport const OrderTemplateLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | null => {\n const {\n orderTemplateLine,\n productListLine,\n price,\n context,\n imageSettings,\n quantity,\n resources,\n isMobile,\n isMultipleCatalogFeatureEnabledInHq\n } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n const { removeFromOrderTemplateLinesText, addToBagButtonText, selectOneRowText } = resources;\n if (!product) {\n return null;\n }\n\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const addButtonClassName = input.isMobile ? 'ms-table__row-links-add' : 'ms-order-template-table-line__product-add-button';\n const removeButtonClassName = input.isMobile ? 'ms-table__row-links-delete' : 'ms-order-template-table-line__product-remove-button';\n\n return {\n isMobile,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogFeatureEnabledInHq,\n selectLine: (\n \n ),\n key: LineId!,\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'ms-order-template-table-line__product-image',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: product && (\n <>\n
{ItemId}
\n {input.error !== 'NONE' ? (\n
{_renderProductError(input)}
\n ) : (\n undefined\n )}\n \n ),\n productUnitOfMeasure: price ? (\n
{UnitOfMeasure || price.UnitOfMeasure}
\n ) : (\n undefined\n ),\n productListId: LineId!,\n removeButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(\n input.isMobile,\n removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(input).getRemoveItem()\n ),\n productQuantityView:
{_generateQuantity(input, LineId!)}
,\n productQuantity: quantity,\n addToBagButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(input.isMobile, addButtonClassName, addToBagButtonText, OrderTemplateLineActions(input).getAddToBag()),\n extraActionsPopup:\n !isMobile && isMultipleCatalogFeatureEnabledInHq ? (\n \n ) : (\n undefined\n ),\n popUp: ,\n disabled: input.shouldDisable\n };\n};\n\nconst ExtraActionsPopup = (props: IPopupProps): JSX.Element | null => {\n const [showActions, setShowActions] = useState(false);\n const toggle = React.useCallback(() => {\n setShowActions(!showActions);\n }, [showActions]);\n\n const className = 'ms-order-template-table-line__extra-actions-cell';\n const actionsContainerClassName = `${className}__actions-container`;\n return (\n
\n
\n );\n};\n\nexport const OrderTemplateMobileLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | undefined => {\n const { orderTemplateLine, productListLine, price, context, imageSettings, isMultipleCatalogFeatureEnabledInHq } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n if (!product) {\n return;\n }\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n\n return {\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'thumbnail',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: ItemId,\n productUnitOfMeasure: UnitOfMeasure || price?.UnitOfMeasure,\n productQuantityView: _generateQuantity(input, LineId!)\n };\n};\n\nexport interface IOrderTemplateProductQuantityViewProps {\n ContainerProps: INodeProps;\n input: React.ReactNode;\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: (orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps | undefined) => void,\n itemKey: string,\n props: IOrderTemplateLineProps\n) => (newValue: number) => {\n if (onChangeQuantity) {\n onChangeQuantity(itemKey, newValue, props);\n }\n};\n\nconst _generateQuantity = (props: IOrderTemplateLineProps, itemKey: string): React.ReactNode => {\n const { handlers, resources, quantity } = props;\n const { onChangeQuantity } = handlers;\n return (\n \n );\n};\n\nexport const _renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string,\n imageSettings?: IImageSettings\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n};\n\nexport const renderProductCatalog = (props: IOrderTemplateLineProps) => {\n const catalogId = props.productListLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.catalogs)) {\n return null;\n }\n\n const catalog = props.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
{catalog.Name}
;\n};\n\nconst _renderPrice = (props: IOrderTemplateLineProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IOrderTemplateLineProps): (string | undefined)[] => {\n const { orderTemplateLine } = props;\n\n if (!orderTemplateLine.fullProduct || !orderTemplateLine.fullProduct.ProductDetails.Dimensions) {\n return [];\n }\n\n return orderTemplateLine.fullProduct.ProductDetails.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n return dimension.DimensionValue.Value;\n });\n};\n\nconst _renderProductError = (props: IOrderTemplateLineProps) => {\n const { error, resources } = props;\n\n if (!error) {\n return '';\n }\n\n const errorMessages = {\n OOS: resources.outOfStockProductErrorMessage,\n UNASSORTED: resources.unavailableProductErrorMessage,\n NONE: ''\n };\n\n return errorMessages[error];\n};\n\nexport const renderProductInfo = (props: IOrderTemplateLineProps): React.ReactNode | undefined => {\n const { orderTemplateLine, productUrl } = props;\n const name = orderTemplateLine.fullProduct?.ProductDetails.Name;\n\n const dimensions = _renderProductDimensions(props);\n if (!orderTemplateLine.fullProduct) {\n return [];\n }\n\n const productName = productUrl ? (\n \n {name}\n \n ) : (\n
{name}
\n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n
\n
{productName}
\n
{dimensionsLine}
\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateLinesStatus } from '../order-template';\n\nexport interface IOrderTemplateLinesStatusMessageProps {\n className?: string;\n errorType: orderTemplateLinesStatus;\n text?: string;\n}\n\nexport const OrderTemplateLinesStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\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\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalogName?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n {this.props.productLineCatalogName}\n ) : null}\n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\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 IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n createGetFeatureStateInput,\n getFeatureState,\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(this.className, className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n\n return this.props.renderView(errorProps);\n }\n\n const orderTemplateResult = orderTemplate && orderTemplate.result;\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\n\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\n window.location.href = this._getOrderTemplatePageUrl();\n return null;\n }\n\n const emptyViewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources,\n orderActions:\n orderTemplateResult &&\n this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n }\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'SUCCESS',\n productsStatusMessage: this.state.isOpen && (\n
\n \n {this.state.userMessage}\n \n
\n ),\n heading: heading && ,\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n },\n ProductsTable: {\n className: `${this.className}__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `${this.className}-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\n ProductDetails: {\n className: `${this.className}-table-line__link`,\n tag: 'a'\n },\n orderLines: this._renderProductList(),\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\n orderActions: this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n pagination: this._renderPagination(),\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n isDetailsDisplayed: this.state.isDetailsDisplayed,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n detailedProductView: this.state.detailedProductView,\n isMobile: this.isMobile\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\n line.isChecked = isChecked;\n\n const updated =\n this.state.productSelection.map(product => {\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\n line.isChecked = isChecked;\n }\n return product;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n public onSelectAll(isChecked: boolean): void {\n const updated =\n this.state.productSelection.map(line => {\n line.isChecked = isChecked;\n return line;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n private _renderProductListHeader(resources: IOrderTemplateResources): React.ReactNode {\n const {\n productImage,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productActionsText,\n selectAllRowsText,\n productLineCatalogName\n } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productImage: productImage,\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n selectAllRowsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n productLineCatalogName: productLineCatalogName\n };\n\n return ;\n }\n\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\n return (\n line.isChecked)}\n onAddSelectionToBag={this._onAddSelectionToBag}\n onRemoveSelection={this._onRemoveSelection}\n isMinifiedView={this.isMobile}\n isMultipleCatalogFeatureEnabledInHq={this._isChannelMultipleCatalogsFeatureEnabled()}\n telemetryContent={this.telemetryContent}\n />\n );\n }\n\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n };\n }\n\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\n freePriceText: this.props.resources.freePriceText,\n originalPriceText: this.props.resources.originalPriceText,\n currentPriceText: this.props.resources.currentPriceText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private readonly _onRemoveSelection = (): void => {\n const { context, resources } = this.props;\n const { telemetry } = context;\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n const maxWaitTimeInMilliSeconds: number = 1000;\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(async () => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n this.setState({\n userMessage: removeSelectedFailureMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n });\n }\n };\n\n private readonly _getOrderTemplatePageUrl = (): string => {\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n if (this.props.data.orderTemplate?.result?.productList.Id) {\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\n }\n return '';\n };\n\n private readonly _onAddSelectionToBag = async (): Promise => {\n const lines = this.state.productSelection;\n const selectedLines = lines.filter(line => line.isChecked);\n if (selectedLines.length > 0) {\n for (const productLine of selectedLines) {\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\n const product = productLine.fullProduct?.ProductDetails ?? {\n RecordId: 0,\n ProductTypeValue: 0,\n BasePrice: 0,\n Price: 0,\n AdjustedPrice: 0\n };\n const quantity = productLine.productListLine.Quantity ?? 0;\n if (this._isChannelMultipleCatalogsFeatureEnabled()) {\n const catalogId = productLine.productListLine.CatalogId;\n await this._addItemToBag(product, quantity, itemKey, catalogId);\n } else {\n await this._addItemToBag(product, quantity, itemKey);\n }\n }\n }\n return Promise.resolve(void 0);\n };\n\n private _renderOrderTemplateActions(\n orderTemplate: OrderTemplate,\n isMultipleCatalogFeatureEnabledInHq: boolean\n ): IOrderTemplateActionsViewProps {\n const { id, typeName, context, resources } = this.props;\n const {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage\n } = resources;\n\n const orderTemplateActions: IOrderTemplateActionsProps = {\n data: { orderTemplate },\n id,\n typeName,\n context,\n telemetryContent: this.telemetryContent,\n handlers: {\n onRenameTemplate: this._renameTemplate,\n onRemoveTemplate: this._removeTemplate\n },\n isMultipleCatalogFeatureEnabledInHq,\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\n }\n };\n\n return OrderTemplateActionsView(orderTemplateActions);\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\n orderTemplateDescription: '',\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\n };\n }\n\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n return new URL(reqContext.url.requestUrl.href);\n };\n\n /**\n * On close handler.\n */\n private readonly onCloseHandler = () => {\n this.setState({\n itemKey: this.state.itemKey,\n userMessage: this.state.userMessage,\n statusCssString: this.state.statusCssString,\n messageGlyph: this.state.messageGlyph,\n isOpen: this.state.isOpen,\n isItemAddedToOrderTemplateOpen: false\n });\n };\n\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n const isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState?.result?.find(feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature')\n ?.IsEnabled || false;\n\n return (\n \n );\n };\n\n private _isFirstPage(): boolean {\n return this._getCurrentPageNumber() === 0;\n }\n\n private _getCurrentPageNumber(): number {\n const itemsPerPage = this.props.config.itemsPerPage || 50;\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\n }\n\n private readonly _renderPagination = (): React.ReactNode | null => {\n const { config, context, data, resources } = this.props;\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\n if (!orderTemplate) {\n return null;\n }\n\n const fullUrl = this._getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 50;\n const currentPageNumber = this._getCurrentPageNumber();\n const skipCount = currentPageNumber * itemsPerPage;\n const totalItems = orderTemplate && orderTemplate.totalLines;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n } = this.props.resources;\n\n const { context, telemetry, data } = this.props;\n const { catalogs } = data;\n const { imageSettings } = this.props.config;\n\n return this.state.productSelection.map((line, index) => {\n const currentProductProps: IOrderTemplateLineProps = {\n orderTemplateLine: line,\n productListLine: line.productListLine,\n price: line.fullProduct?.ProductPrice,\n error: line.error,\n shouldDisable: line.shouldDisable,\n context,\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\n productUrl: line.fullProduct\n ? this._updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line.productListLine.CatalogId)\n : '',\n imageSettings,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n quantity: line.productListLine.Quantity!,\n handlers: {\n onAddToBag: this._addItemToBag,\n onRemoveItem: this._removeItemFromOrderTemplateLines,\n onChangeQuantity: this._changeQuantity,\n onSelect: this.onSelect.bind(this)\n },\n resources: {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogs: catalogs && catalogs.result\n };\n\n return OrderTemplateLineView(currentProductProps)!;\n });\n }\n\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\n let state = {\n isDetailsDisplayed: !this.state.isDetailsDisplayed\n };\n if (props) {\n state = {\n ...state,\n ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n }\n };\n }\n this.setState(state);\n };\n\n // This method is used to update the product url with the catalogId\n private readonly _updateProductUrlCatalog = (\n productDetails: SimpleProduct,\n context: ICoreContext,\n catalogId: number | undefined\n ): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const absoluteUrl = new URL(productUrl, window.location.href);\n absoluteUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return absoluteUrl.href;\n }\n\n return productUrl;\n };\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _changeQuantity = async (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate?.result) {\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex(\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return;\n }\n const prevQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n // Update mobile modal\n if (props) {\n props.quantity = quantity;\n this.setState({\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n }\n\n this.setState({\n isQuantityDisabledForUpdate: true\n });\n\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\n line.productListLine\n ])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isQuantityDisabledForUpdate: false,\n isOpen: false\n });\n if (list) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...orderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\n updatedOrderTemplate\n );\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = resources.editOrderTemplateLineQuantityError;\n if (props) {\n props && (props.productListLine.Quantity = prevQuantity);\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true,\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n } else {\n newProductListLine.productListLine.Quantity = prevQuantity;\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = async (\n product: SimpleProduct,\n quantity: number,\n itemKey: string,\n catalogId?: number | undefined\n ): Promise => {\n const { context, data, resources, telemetry } = this.props;\n const { cart } = data;\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\n\n if (context) {\n if (cart.result) {\n const addProductToCartInput = {\n product,\n count: quantity,\n catalogId\n };\n\n await cart.result\n .addProductToCart(addProductToCartInput)\n .then((result: ICartActionResult) => {\n if (result.status === 'SUCCESS') {\n return getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n product.RecordId,\n this.props.context.actionContext.requestContext.apiSettings.channelId,\n product\n ),\n this.props.context.actionContext\n ).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: !isMiniCart,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else if (result.substatus === 'MAXQUANTITY') {\n if (context.app.config.maxQuantityForCartLineItem) {\n const cartLineQuantity: number | undefined =\n cart.result?.cart.CartLines &&\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\n this.setState({\n itemKey,\n userMessage:\n cartLineQuantity !== undefined\n ? maxQuantityLimitText\n .replace('{curQuantity}', cartLineQuantity.toString())\n .replace('{maxQuantity}', context.app.config.maxQuantityForCartLineItem.toString()) ||\n defaultMessage\n : defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n } else {\n const defaultMessage = `Max quantity for cart line item is undefined. Please define in configuration settings.`;\n this.setState({\n itemKey,\n userMessage: defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n }\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n })\n .catch((error: Error) => {\n telemetry.warning(error.message);\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n }\n }\n };\n\n private readonly _removeItemFromOrderTemplateLines = async (line: IOrderTemplateLineViewModel) => {\n const { context, data, telemetry } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const maxWaitTimeInMilliSeconds: number = 1000;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate?.result && line) {\n const featureStates = await getFeatureState(createGetFeatureStateInput(context.actionContext), context.actionContext);\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (ArrayExtensions.hasElements(featureStates)) {\n isMultipleCatalogFeatureEnabledInHq =\n featureStates.find(\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n const catalogId = getCatalogId(context.actionContext.requestContext);\n if (isMultipleCatalogFeatureEnabledInHq) {\n line.productListLine.CatalogId = catalogId;\n }\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\n line.productListLine\n ])\n .then(async () => {\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\n );\n }\n }\n };\n\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\n window.location.reload();\n return Promise.resolve();\n };\n\n private readonly _removeTemplate = () => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate && orderTemplate.result) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: orderTemplate.result?.productList.Id || '',\n userMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\n if (newLink) {\n window.location.assign(newLink);\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template.');\n }\n };\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n }\n\n private readonly _getViewport = (): GridSize => {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
\n
\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
\n {paginationNextText}\n
\n );\n };\n}\n\nexport default OrderTemplateLines;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: {\n cancelBtnLabel,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productLineCatalogName\n }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n
    \n
  • {detailedProductView?.productImage}
  • \n
  • \n {productText}:\n {detailedProductView?.productInfo}\n
  • \n
  • \n {productLineCatalogName}:\n {detailedProductView?.productLineCatalog}\n
  • \n
  • \n {productNumberText}:\n {detailedProductView?.productNumber}\n
  • \n
  • \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n
  • \n
  • \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n
  • \n
  • \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n
  • \n {productsStatusMessage &&
  • {productsStatusMessage}
  • }\n
\n
\n \n \n \n \n
\n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productLineCatalog,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile,\n extraActionsPopup,\n isMultipleCatalogFeatureEnabledInHq,\n disabled\n } = product;\n\n const lineVisibility = disabled\n ? {\n pointerEvents: 'none',\n opacity: 0.5\n }\n : {\n pointerEvents: 'auto',\n opacity: 1\n };\n\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\n\n return (\n \n {selectLine}\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\n {productImage}\n {isMobile ? (\n \n
{productNumber}
\n
\n {quantityLabel}:{` `}\n {productQuantity}\n
\n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n {extraActionsPopup}\n
\n );\n};\n\nexport default OrderTemplateLinesView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * Types of product refiner values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerValueDataTypeValue {\n /**\n * Range slider is used for selections like price.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Range = 1,\n\n /**\n * Range input is a different way to specify ranges and can be expressed with input boxes\n * as well as a set of discrete single-select type values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n RangeInput = 4,\n\n /**\n * This is a discrete list item, either multi-select or single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n List = 5,\n\n /**\n * Boolean types allows only single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Boolean = 6\n}\n\n/**\n * Types of product refiners.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerTypeValue {\n /**\n * Refiner values are single-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Single = 0,\n\n /**\n * Refiner values are multi-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Multi = 1\n}\n\n/**\n * ProductRefinerSource enum type.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerSource {\n /**\n * The None member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n None = 0,\n\n /**\n * The Attribute member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Attribute = 1,\n\n /**\n * The Category member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Category = 2,\n\n /**\n * The Price member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Price = 3,\n\n /**\n * The Rating member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Rating = 4\n}\n\n/**\n * Checks if the data type value corresponds to a slider.\n * @param dataTypeValue\n */\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n */\nexport function findMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue | undefined {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n * @param refinementCriterion\n */\nexport function isMatchingRefinementCriterion(productRefinerValue: ProductRefinerValue, refinementCriterion: ProductRefinerValue): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n (isRangeType(refinementCriterion.DataTypeValue) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (isMatchingRefinementCriterion(itemToggleNotification.productRefinerValue, selectedCriterion)) {\n toggledItemFound = true;\n if (itemToggleNotification.isSelecting) {\n const next = {\n ...selectedCriterion,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n selectedCriterion.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n selectedCriterion.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n } // Else the item is being de-selected, so omit it from the refinement criteria\n } else {\n // Keep existing criterion because it is not in the item toggle notification\n updatedRefinementCriteria.push(selectedCriterion);\n }\n });\n\n if (!toggledItemFound) {\n const next = {\n ...itemToggleNotification.productRefinerValue,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n itemToggleNotification.productRefinerValue.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n\n // If single select, then deselect any others in the parent refiner group\n if (\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\n ) {\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\n // Do nothing\n } else {\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(child, criterion)\n );\n if (matchingIndex > -1) {\n updatedRefinementCriteria.splice(matchingIndex, 1);\n }\n }\n });\n }\n }\n\n return updatedRefinementCriteria;\n}\n\nexport function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string | undefined,\n telemetry: ITelemetry\n): string {\n if (!amount || !currency) {\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\n return amount || '';\n }\n const priceAmount = (amount && Number(amount)) || 0;\n let result: string;\n\n try {\n result = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0\n }).format(priceAmount);\n } catch (error) {\n result = `${priceAmount} ${currency}`;\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ProductListInventoryFilteringOptions } from '../actions';\nimport { IChoiceSummaryProps } from './choice-summary.props';\nimport { isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent {\n private readonly closeButtonGlyph: string = 'msi-close-btn';\n\n private readonly payLoad: IPayLoad;\n\n @computed get selectedRefinersMap(): IRefinerMap[] {\n let { selectedChoices } = this.props;\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n selectedChoices = selectedChoices.filter(choice => {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\n );\n return parent && parent.RecordId !== channelInventoryConfigurationId;\n });\n }\n return selectedChoices.map((selectedRefiner: ProductRefinerValue, index) => {\n return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\n const items = this.selectedRefinersMap;\n this.payLoad.contentAction.etext = clearAllText;\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
\n {items.length > 0 && label && {label}}\n
    \n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
  • \n \n {item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString ||\n item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString}\n \n \n
  • \n );\n })}\n
\n {items.length > 0 && clearAllText && (\n \n {clearAllText}\n \n )}\n
\n );\n }\n\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue, index: string): string {\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\n const overallFormat = choiceFormat || '{1}';\n const rangeFormat = choiceRangeValueFormat;\n let refinerName = '';\n if (refinerHierarchy && refinerHierarchy.find) {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\n );\n\n if (!parent) {\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\n } else {\n refinerName = parent.KeyName || '';\n }\n }\n\n let refinerValueName: string;\n if (isRangeType(productRefinerValue.DataTypeValue)) {\n refinerValueName = rangeFormat\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\n } else if (productRefinerValue.RefinerRecordId === 0) {\n const filterValue = refinerValues?.Values.find(\n refiner => refiner.LeftValueBoundString === productRefinerValue.LeftValueBoundString\n );\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\n } else {\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n }\n\n if (refinerName === 'Rating' || refinerName === 'Price') {\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n }\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}_${index}`);\n }\n\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\n if (!amount || !currency) {\n this.props.telemetry.trace('[choice-summary] could not format price');\n return amount || '';\n }\n let result = amount;\n\n try {\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\n } catch (error) {\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLElement;\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\n\n if (this.props.onChoiceClicked) {\n this.props.onChoiceClicked({\n clearAll,\n itemClicked: target,\n choiceClicked: selectedRefiner,\n nextItemToFocus: target.nextSibling as HTMLElement\n });\n }\n };\n\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\n return (result && result.value) || 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 * as React from 'react';\n\ninterface IErrorMessage {\n text?: string;\n}\n\nexport const ErrorMessage: React.FC = ({ text }) => {\n return (\n \n
\n {` `}\n {text}\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 { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\n\ninterface IFeatureSearchResultItem {\n product: SimpleProduct | null;\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n recommendation?: string;\n}\n\nexport const FeatureSearchResultItem: React.FC = ({\n product,\n context,\n imageSettings,\n resources,\n telemetryContent,\n recommendation\n}) => {\n if (product === null) {\n return null;\n }\n\n const productName = product.Name;\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\n const fallbackImage = getFallbackImageUrl(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const heading =\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n
\n \n
\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n
\n \n
\n

{heading}

\n {renderProductTitle(product?.Name)}\n
\n
\n );\n};\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string,\n fallbackImage?: string,\n context?: IRequestContext\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings,\n fallBackSrc: fallbackImage\n };\n return ;\n}\n\nfunction renderProductTitle(title?: string): JSX.Element | null {\n return

{title}

;\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 ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\n \n {' '}\n {text}{' '}\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, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ISearchResultModalViewProps {\n modal: React.ReactElement;\n modalHeader: React.ReactElement;\n modalFooter: React.ReactElement;\n modalBody: React.ReactElement;\n}\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n onClick(): void;\n}\n\nexport interface ISearchResultModalResources {\n modalTitle: string;\n modalCloseButtonText: string;\n}\n\nexport interface ISearchResultModalProps {\n resources: ISearchResultModalResources;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, id } = props;\n return (\n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\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 { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\ninterface IProductSearchResultItems {\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities\n}) => {\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return (\n
    \n {products.map((product: ProductSearchResult, index: number) => (\n
  • \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\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 { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n
\n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n
\n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component {\n private readonly anchorType: React.RefObject;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \n \n
  • \n );\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n \n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n \n \n \n \n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n \n \n \n );\n }\n return 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 { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { DisplayTemplate, ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeType } from './utilities';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n const isExpanded = this.props.isExpandedOnInitialLoad;\n\n // If (this.props.productRefinerHierarchy.DataTypeValue === ProductRefinerValueDataTypeValue.Range) {\n // isExpanded = true;\n // }\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n
    \n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n
    \n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (isRangeType(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n
  • \n \n
  • \n );\n });\n return
      {listItems}
    ;\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\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 ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\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 * as React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC = ({ text, className }) => (\n \n {` `}\n {text}\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 CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport {\n ChannelInventoryConfiguration,\n format,\n ProductPrice,\n ProductRefinerValue,\n SortColumn,\n StoreOperationsDataActions,\n TextValueTranslation\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n IFullProductsSearchResultsWithCount,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n private _isMounted: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n channelInventoryConfiguration: undefined\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n this._isMounted = true;\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: this.props.context.actionContext\n });\n if (this._isMounted) {\n this.setState({ channelInventoryConfiguration });\n }\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n await this._updateVariantAvailability();\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n await this._updateVariantAvailability();\n }\n\n public componentWillUnmount(): void {\n this._isMounted = false;\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n /**\n * Get products variants dimension availabilities.\n * @returns Void.\n */\n private readonly _updateVariantAvailability = async (): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n await this._getProductsDimensionsAvailabilities();\n }\n };\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\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 * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n }\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n\n const dropdown = (\n <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\n />\n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = listPageState?.currentPageNumber\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\n />\n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n const { channelInventoryConfiguration } = this.state;\n const isInventorySortableAttribute =\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\n\n const isInventoryProductAttribute =\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\n\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n isInventorySortableAttribute ||\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n isInventoryProductAttribute)\n );\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const { channelInventoryConfiguration } = this.state;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\n return (\n <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\n refinerValues={refinerValueName}\n />\n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation }\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n return (\n <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\n />\n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\n !actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { SearchSuggestion, SearchSuggestionCriteria } from '@msdyn365-commerce/retail-proxy';\nimport { getSearchSuggestionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nexport enum SuggestionType {\n Category = 'ScopedCategory',\n Keyword = 'Keyword',\n Product = 'Product',\n None = 'None'\n}\n\n/**\n * Input class for auto suggest search input.\n */\nexport class AutoSuggestInput implements IActionInput {\n public searchQuery?: string;\n\n public topResultsCount?: number;\n\n public suggestionType?: string;\n\n public hitPrefix?: string;\n\n public hitSuffix?: string;\n\n public constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\n this.searchQuery = searchText;\n this.topResultsCount = top;\n this.suggestionType = suggestionType;\n this.hitPrefix = hitPrefix;\n this.hitSuffix = hitSuffix;\n }\n\n public getCacheKey = () => 'AutoSuggestSearchSuggestions';\n\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new AutoSuggestInput();\n};\n\n/**\n * Calls the Retail API and returns a auto-suggest suggestions.\n * @param input\n * @param ctx\n */\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise<Autosuggestions | null> {\n // If no input is provided fail out\n if (!input || !input.searchQuery) {\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\n }\n\n const autosuggest: Autosuggestions = {};\n\n const autoSuggestPromises = [_getAutoSuggest(input, autosuggest, ctx)];\n return Promise.all(autoSuggestPromises).then(() => {\n return autosuggest;\n });\n}\n\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise<void> {\n const catalogId = getCatalogId(ctx.requestContext);\n const searchCriteria: SearchSuggestionCriteria = {\n ProductSearchCriteria: {\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n },\n HitPrefix: input.hitPrefix,\n HitSuffix: input.hitSuffix,\n SuggestionType: input.suggestionType\n };\n\n const searchSuggestions = await getSearchSuggestionsAsync(\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\n searchCriteria\n );\n\n if (searchSuggestions && searchSuggestions.length > 0) {\n // Generate image url\n searchSuggestions.map(\n (item: SearchSuggestion) =>\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\n );\n\n autosuggest.AllSearchResults = searchSuggestions;\n } else {\n ctx.telemetry.error(\n `[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`\n );\n }\n}\n\nexport const getSearchSuggestionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\n action: <IAction<Autosuggestions>>getSearchSuggestionsAction,\n input: createInput\n});\n\nexport default getSearchSuggestionsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchCategorySuggestProps {\n searchCategorySuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n searchRefiners: ProductRefiner[] | undefined;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n shouldShowFullPath?: boolean;\n}\n\nexport interface ISearchCategoryViewProps {\n title: React.ReactNode;\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * CategorySuggestionsComponent.\n * @param props\n */\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\n const {\n suggestions,\n searchText,\n autoSuggestProps: {\n resources: { categorySuggestionHeading }\n }\n } = props;\n\n const reactNodes: React.ReactNode[] = [];\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, props));\n });\n\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\n\n return { title: titleNode, text: reactNodes };\n};\n\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\n const categoryAutoSuggestionHeading = categorySuggestionHeading\n ? format(categorySuggestionHeading, searchText)\n : `Search \"${searchText}\" in categories`;\n\n return <li className='msc-autoSuggest__categoryResults-title'>{categoryAutoSuggestionHeading}</li>;\n};\n\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\n const { searchText, hitPrefix, hitSuffix, shouldShowFullPath } = props;\n\n const splitValue = shouldShowFullPath ? item.Value : item.Value && item.Value.split('|').pop();\n const ariaLabel = splitValue\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = item.Value;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n <li className='msc-autoSuggest__categoryResults-item' key={item.Id}>\n <a aria-label={ariaLabel} href={_generateLink(item, searchText, props)} {...attribute}>\n {_generateLink(item, searchText, props) && _getHighlightedText(splitValue ? splitValue : '', hitPrefix, hitSuffix)}\n </a>\n </li>\n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\n};\n\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\n const { searchPageURL, searchQsp, searchRefiners } = props;\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n\n if (searchQsp && searchText) {\n queryUrl.searchParams.set(searchQsp, searchText);\n }\n\n const categoryRefiners = searchRefiners?.find(refiners => {\n return refiners.SourceValue === ProductRefinerSource.Category;\n });\n const refiner = categoryRefiners?.Values?.find(item => {\n return item.RefinerRecordId === Number.parseInt(id, 10);\n });\n\n const encodedRefiner = refiner && JSON.stringify(compressRefiners([refiner]));\n if (encodedRefiner) {\n queryUrl.searchParams.set('refiners', encodedRefiner);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n // eslint-disable-next-line react/no-danger\n return <span dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />;\n};\n\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\n// or move this code to a common place\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchFormProps {\n hideSearchLabel: boolean | undefined;\n isSearchFormExpanded?: boolean | undefined;\n disableSubmitSearch: boolean | undefined;\n searchTextInput: React.RefObject<HTMLInputElement>;\n maxChars: number;\n searchQsp: string;\n searchPlaceholder: string;\n query: string;\n ariaLabelCancel: string;\n ariaLabelSearch: string;\n ariaLabelSubmit: string;\n handleCancelSearchChange(): void;\n handleInputChange(query: string): void;\n}\n\nexport interface ISearchFormViewProps {\n input: React.ReactNode;\n submitBtn: React.ReactNode;\n cancelBtn: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Set updated input value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent<HTMLInputElement>) => {\n handleInputChange(event.target.value || '');\n};\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\n const {\n searchQsp,\n searchPlaceholder,\n hideSearchLabel,\n searchTextInput,\n handleInputChange,\n maxChars,\n disableSubmitSearch,\n handleCancelSearchChange,\n query,\n ariaLabelCancel,\n ariaLabelSearch,\n ariaLabelSubmit\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const inputNode = !hideSearchLabel ? (\n <input\n className='ms-search__form-control'\n type='text'\n aria-label={ariaLabelSearch}\n name={searchQsp}\n placeholder={searchPlaceholder}\n ref={searchTextInput}\n onChange={onInputChange}\n maxLength={maxChars}\n value={query}\n />\n ) : (\n <input\n className='ms-search__form-control'\n type='text'\n aria-label={ariaLabelSearch}\n name={searchQsp}\n placeholder={searchPlaceholder}\n ref={searchTextInput}\n onChange={onInputChange}\n value={query}\n />\n );\n\n const submitBtnNode = !disableSubmitSearch && <Button className='ms-search__form-submitSearch' aria-label={ariaLabelSubmit} />;\n\n const cancelBtNoden = (\n <Button\n className={!disableSubmitSearch ? 'ms-search__form-cancelSearch' : 'ms-search__form-cancelSearchNoSumbit'}\n aria-label={ariaLabelCancel}\n onClick={handleCancelSearchChange}\n type='button'\n />\n );\n\n return { input: inputNode, cancelBtn: cancelBtNoden, submitBtn: submitBtnNode };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchKeywordSuggestProps {\n searchKeywordSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface ISearchKeywordViewProps {\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * KeywordSuggestionsComponent.\n * @param props\n */\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\n const { suggestions, hitPrefix, hitSuffix } = props;\n\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n const reactNodes: React.ReactNode[] = [];\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\n });\n\n return { text: reactNodes };\n};\n\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = ariaLabel;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n <li className='msc-autoSuggest__keywordResults-item' key={item.Id}>\n <a aria-label={ariaLabel} href={_generateLink(item, hitPrefix, hitSuffix, props)} {...attribute}>\n {_generateLink(item, hitPrefix, hitSuffix, props) &&\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\n </a>\n </li>\n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\n const { searchPageURL, searchQsp } = props;\n\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n if (searchQsp && formattedLink) {\n queryUrl.searchParams.set(searchQsp, formattedLink);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n // eslint-disable-next-line react/no-danger\n return <span dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchLabelProps {\n isSearchFormExpanded: boolean;\n searchLabelClass: string;\n searchLabelArialLabel: string;\n searchtext: string;\n searchCollapsedLabel: React.RefObject<HTMLButtonElement>;\n hideSearchLabel?: boolean;\n telemetryContent: ITelemetryContent;\n handleCancelSearchChange(): void;\n}\n\nexport const LabelComponent = (props: ISearchLabelProps) => {\n const {\n searchLabelClass,\n searchLabelArialLabel,\n isSearchFormExpanded,\n searchtext,\n searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange,\n telemetryContent\n } = props;\n const payLoad = getPayloadObject('click', telemetryContent, searchtext, '');\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n\n return (\n <div className={searchLabelClass}>\n <Button\n className='ms-search__icon'\n aria-expanded={isSearchFormExpanded}\n aria-label={searchLabelArialLabel}\n onClick={handleCancelSearchChange}\n innerRef={searchCollapsedLabel}\n {...attributes}\n >\n {!hideSearchLabel && (\n <span className='ms-search__icon-text' aria-hidden>\n {searchtext}\n </span>\n )}\n </Button>\n </div>\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 { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\n/**\n * Search product suggest resources.\n */\nexport interface ISearchProductSuggestResources {\n freePriceText: string;\n}\n\nexport interface ISearchProductSuggestProps {\n searchProductSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetry: ITelemetry;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n resources?: ISearchProductSuggestResources;\n}\n\nexport interface ISearchProductViewProps {\n title: React.ReactNode;\n items: ISearchProductItemViewProps[];\n}\n\nexport interface ISearchProductItemViewProps {\n text: React.ReactNode;\n thumbnail: React.ReactNode;\n price: React.ReactNode;\n LiProduct: INodeProps;\n AProduct: INodeProps;\n id: string | undefined;\n}\n\nlet payLoad: IPayLoad;\nlet telemetryContent: ITelemetryContent | undefined;\n\n/**\n * ProductSuggestionsComponent.\n * @param props\n */\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\n const {\n suggestions,\n hitSuffix,\n hitPrefix,\n autoSuggestProps: {\n context: { actionContext },\n resources: { productSuggestionHeading }\n },\n moduleType,\n moduleId\n } = props;\n const reactNodes: ISearchProductItemViewProps[] = [];\n telemetryContent = props.telemetryContent;\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\n });\n\n const titleNode = _renderTitle(productSuggestionHeading);\n\n return { title: titleNode, items: reactNodes };\n};\n\nconst _renderTitle = (productSuggestionHeading: string) => {\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\n\n return <li className='msc-autoSuggest__productResults-title'>{productAutoSuggestionHeading}</li>;\n};\n\nconst _assembleNode = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps,\n moduleType: string,\n moduleId: string\n): ISearchProductItemViewProps => {\n const altText =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n const price = item.Value3?.Value?.DecimalValue;\n return {\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\n price: !ObjectExtensions.isNullOrUndefined(price) && _renderPrice(price, price, moduleId, moduleType, props),\n LiProduct: _getLiWrapper(),\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext, props),\n id: item.Id\n };\n};\n\nconst _getLiWrapper = () => {\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'li' as NodeTag\n };\n};\n\nconst _getAWrapper = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps\n) => {\n const {\n autoSuggestProps: { context }\n } = props;\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n payLoad.contentAction.recid = item.Id;\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPrice = context.cultureFormatter.formatCurrency(item.Value3!.Value!.DecimalValue!);\n\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'a' as NodeTag,\n 'aria-label': `${ariaLabel!} ${productPrice}`,\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\n ...attribute\n };\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n return suggestion.Value && suggestion.Id\n ? getProductPageUrlSync(formattedLink, (suggestion.Id as unknown) as number, actionContext, undefined)\n : '';\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n return (\n // eslint-disable-next-line react/no-danger\n <span className='msc-price msc-autoSuggest__productResults-item-text' dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />\n );\n};\n\nconst _renderPrice = (\n adjustedPrice: number,\n basePrice: number,\n moduleId: string,\n moduleType: string,\n props: ISearchProductSuggestProps\n): JSX.Element | null => {\n const {\n autoSuggestProps: { context }\n } = props;\n\n return (\n <PriceComponent\n id={moduleId}\n typeName={moduleType}\n context={context}\n data={{\n price: {\n CustomerContextualPrice: adjustedPrice,\n BasePrice: basePrice\n }\n }}\n className='msc-autoSuggest__productResults-item-price'\n freePriceText={props.resources?.freePriceText}\n />\n );\n};\n\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\n const {\n autoSuggestProps: {\n context: {\n request: { gridSettings }\n },\n config: { imageSettings }\n }\n } = props;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (!suggestion || !suggestion.ImageUrl) {\n props.telemetry.error('Search suggestion content is empty, module wont render.');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=40&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n <Image\n requestContext={props.autoSuggestProps.context.actionContext.requestContext}\n altText={altText}\n className='msc-autoSuggest__productResults-item-img'\n src={suggestion.ImageUrl}\n gridSettings={gridSettings!}\n imageSettings={imageSettings ? imageSettings : defaultImageSettings}\n loadFailureBehavior='empty'\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 { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, getUrlSync } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport * as React from 'react';\n\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\nimport {\n CategorySuggestionsComponent,\n FormComponent,\n ISearchCategoryViewProps,\n ISearchKeywordViewProps,\n ISearchProductViewProps,\n KeywordSuggestionsComponent,\n LabelComponent,\n ProductSuggestionsComponent\n} from './components';\nimport { ISearchData } from './search.data';\nimport { ISearchProps, ISuggestionTypeCriterionData, SuggestionTypeCriterionSuggestionType } from './search.props.autogenerated';\n\nexport interface ISearchState {\n isSearchFormExpanded: boolean;\n searchText: string;\n searchKeywordSuggestClass: string;\n searchProductSuggestClass: string;\n searchCategorySuggestClass: string;\n suggestions: Autosuggestions | undefined;\n searchRefiners?: ProductRefiner[] | undefined;\n autoSuggestAriaLabel: string;\n isInitialState: boolean;\n isLoadingAutoSuggest?: boolean;\n}\n\nexport interface ISearchViewProps extends ISearchProps<ISearchData> {\n Search: IModuleProps;\n AutoSuggestAriaLabel: INodeProps;\n AutoSuggestAriaLabelText: string;\n searchText: string;\n AutoSuggest: INodeProps;\n KeywordSuggest: INodeProps;\n ProductSuggest: INodeProps;\n CategorySuggest: INodeProps;\n SearchForm: INodeProps;\n FormWrapper: INodeProps;\n UlKeyword: INodeProps;\n UlProduct: INodeProps;\n UlCategory: INodeProps;\n label: React.ReactNode;\n form: React.ReactNode;\n autosuggestKeyword?: ISearchKeywordViewProps;\n autosuggestProduct?: ISearchProductViewProps;\n autosuggestCategory?: ISearchCategoryViewProps;\n callbacks: {\n handleCancelSearchChange(): void;\n handleCancelSearchFocused?(): void;\n };\n isSearchFormExpanded: boolean;\n isLoadingAutoSuggest?: boolean;\n isLoadingNode?: React.ReactNode;\n}\n\n/**\n *\n * Search module.\n * @extends {React.Component<ISearchProps<ISearchData>, ISearchState>}\n */\nclass Search extends React.Component<ISearchProps<ISearchData>, ISearchState> {\n private readonly searchTextInput: React.RefObject<HTMLInputElement>;\n\n private readonly searchCollapsedLabel: React.RefObject<HTMLButtonElement>;\n\n private readonly formReference: React.RefObject<HTMLButtonElement>;\n\n private readonly maxChars: number;\n\n private readonly topResultsCount?: number;\n\n private readonly hitPrefix: string = '{';\n\n private readonly hitSuffix: string = '}';\n\n private readonly waitTime: number = 500;\n\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject<HTMLDivElement>;\n\n private readonly autoSuggestResultDiv: React.RefObject<HTMLDivElement>;\n\n private readonly searchFormClass: string;\n\n private readonly searchLabelClass: string;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private loadSuggestionsRequestId?: string;\n\n private inputSuggestionType: ISuggestionTypeCriterionData[];\n\n // @ts-expect-error\n private cancellabelDebounce: debounce;\n\n public constructor(props: ISearchProps<ISearchData>) {\n super(props);\n this.searchTextInput = React.createRef();\n this.searchCollapsedLabel = React.createRef();\n this.autoSuggestResultScreenReaderDiv = React.createRef();\n this.autoSuggestResultDiv = React.createRef();\n this.formReference = React.createRef();\n this.state = {\n isSearchFormExpanded: false,\n searchText: '',\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\n suggestions: undefined,\n searchRefiners: undefined,\n autoSuggestAriaLabel: '',\n isInitialState: true,\n isLoadingAutoSuggest: false\n };\n this.maxChars =\n (this.props.context &&\n this.props.context.app &&\n this.props.context.app.config &&\n this.props.context.app.config.searchInputMaxLength) ||\n 50;\n\n this.inputSuggestionType = [];\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\n this.searchFormClass = 'ms-search__form';\n this.searchLabelClass = 'ms-search__label';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this._initSuggestionTypes();\n }\n\n public async componentDidMount(): Promise<void> {\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\n window && window.addEventListener('keyup', this._keyup);\n }\n\n public componentWillUnmount(): void {\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\n window && window.removeEventListener('keyup', this._keyup, false);\n }\n\n public componentDidUpdate(): void {\n const {\n config: { hideSearchLabel }\n } = this.props;\n const { isSearchFormExpanded, isInitialState } = this.state;\n\n if (!this.props.context.request.params.isEditor) {\n if (!hideSearchLabel && isSearchFormExpanded) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else if (!isInitialState) {\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: ISearchProps<ISearchData>, nextState: ISearchState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- ignore complexity.\n public render(): JSX.Element {\n const {\n context,\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, shouldShowFullCategoryPath, className = '' }\n } = this.props;\n\n const {\n isSearchFormExpanded,\n searchText,\n searchKeywordSuggestClass,\n searchProductSuggestClass,\n searchCategorySuggestClass,\n suggestions,\n searchRefiners,\n isLoadingAutoSuggest\n } = this.state;\n\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\n\n const keywordSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Keyword || suggestion.SuggestionType === SuggestionType.None\n );\n const productSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Product\n );\n const categoryRefiners = searchRefiners?.find(refiner => {\n return refiner.SourceValue === ProductRefinerSource.Category;\n });\n const categorySuggestions = suggestions?.AllSearchResults?.filter(suggestion => {\n if (suggestion.SuggestionType !== SuggestionType.Category) {\n return false;\n }\n const refiner = categoryRefiners?.Values?.find(item => {\n return `${item.RefinerRecordId ?? 0}` === suggestion.Id;\n });\n\n return !ObjectExtensions.isNullOrUndefined(refiner);\n });\n\n const viewProps: ISearchViewProps = {\n ...(this.props as ISearchProps<ISearchData>),\n\n Search: {\n moduleProps: this.props,\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\n },\n AutoSuggestAriaLabel: {\n tag: 'div',\n className: 'msc-autoSuggest__screen-reader',\n 'aria-live': 'assertive',\n ref: this.autoSuggestResultScreenReaderDiv\n },\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\n searchText: this.state.searchText,\n AutoSuggest: {\n ref: this.autoSuggestResultDiv,\n className: 'ms-search__autoSuggest'\n },\n KeywordSuggest: {\n className: searchKeywordSuggestClass\n },\n ProductSuggest: {\n className: searchProductSuggestClass\n },\n CategorySuggest: {\n className: searchCategorySuggestClass\n },\n SearchForm: {\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\n },\n FormWrapper: {\n tag: 'form',\n ref: this.formReference,\n className: 'ms-search__searchForm',\n 'aria-label': 'Search',\n name: 'searchForm',\n role: 'search',\n action: searchURL,\n autoComplete: 'off',\n onSubmit: this._handleSubmit\n },\n UlKeyword: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__keywordResults-items', className)\n },\n UlProduct: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__productResults-items', className)\n },\n UlCategory: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__categoryResults-items', className)\n },\n label: LabelComponent({\n isSearchFormExpanded,\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\n searchtext,\n searchLabelArialLabel,\n searchCollapsedLabel: this.searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange: this._handleCancelSearchChange,\n telemetryContent: this.telemetryContent\n }),\n form: FormComponent({\n ariaLabelCancel: cancelBtnAriaLabel,\n ariaLabelSearch: searchBtnAriaLabel,\n ariaLabelSubmit: submitBtnAriaLabel,\n hideSearchLabel,\n searchTextInput: this.searchTextInput,\n disableSubmitSearch,\n handleInputChange: this._handleInputChange,\n handleCancelSearchChange: this._handleCancelSearchChange,\n maxChars: this.maxChars,\n searchQsp,\n searchPlaceholder,\n query: searchText\n }),\n autosuggestKeyword:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (keywordSuggestions && ArrayExtensions.hasElements(keywordSuggestions)))\n ? KeywordSuggestionsComponent({\n searchKeywordSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: keywordSuggestions,\n telemetryContent: this.telemetryContent\n })\n : undefined,\n autosuggestProduct:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (productSuggestions && ArrayExtensions.hasElements(productSuggestions)))\n ? ProductSuggestionsComponent({\n searchProductSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: productSuggestions,\n telemetry: this.props.telemetry,\n moduleType: this.props.typeName,\n moduleId: this.props.id,\n telemetryContent: this.telemetryContent,\n resources: this.props.resources\n })\n : undefined,\n autosuggestCategory:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (categorySuggestions && ArrayExtensions.hasElements(categorySuggestions)))\n ? CategorySuggestionsComponent({\n searchCategorySuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: categorySuggestions,\n searchRefiners,\n telemetryContent: this.telemetryContent,\n shouldShowFullPath: shouldShowFullCategoryPath\n })\n : undefined,\n callbacks: {\n handleCancelSearchChange: this._handleCancelSearchChange,\n handleCancelSearchFocused: this._handleCancelSearchFocused\n },\n isSearchFormExpanded: this.state.isSearchFormExpanded,\n isLoadingAutoSuggest,\n isLoadingNode: this._isLoadingNode()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initSuggestionTypes() {\n const suggestionTypes = this.props.config.suggestionTypeCriterion;\n\n const suggestions = ArrayExtensions.unique(ArrayExtensions.validValues(suggestionTypes));\n if (!ArrayExtensions.hasElements(suggestions)) {\n this.inputSuggestionType = [\n { SuggestionType: SuggestionTypeCriterionSuggestionType.keyword },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.product },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.scopedCategory }\n ];\n return;\n }\n\n const validSuggestions = suggestions.filter(suggestion => suggestion.SuggestionType);\n if (ArrayExtensions.hasElements(validSuggestions)) {\n this.inputSuggestionType = validSuggestions;\n return;\n }\n\n this.inputSuggestionType = [];\n }\n\n /**\n * Function to create the ReactNode for loading Autosuggest result.\n * @returns ReachNode for loading Autosuggest result.\n */\n private readonly _isLoadingNode = (): React.ReactNode => {\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\n return <Spinner className='msc-autoSuggest__loadingResult' label={loadingText} size={SpinnerSize.medium} labelPosition='right' />;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _focusOutTarget = (e: any): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.target.closest('.ms-search') === null) {\n this._clearAutoSuggestState();\n }\n };\n\n private readonly _keyup = (e: KeyboardEvent): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\n this._clearAutoSuggestState();\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n\n if (\n !(\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\n )\n ) {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n };\n\n private readonly _clearAutoSuggestState = (): void => {\n const {\n context: { actionContext },\n data: { searchState }\n } = this.props;\n\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\n searchState.searchText = '';\n searchState.defaultBasicSearchUrl = '';\n searchState.searchQueryStringParameter = '';\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\n this.searchTextInput.current.value = '';\n }\n\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\n };\n\n private async _getSearchSuggestions(loadSuggestionsRequestId: string, query: string) {\n try {\n const searchSuggestions = await getSearchSuggestionsAction(\n new AutoSuggestInput(query, this.topResultsCount, this._getSuggestionType(), this.hitPrefix, this.hitSuffix),\n this.props.context.actionContext\n );\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n return searchSuggestions;\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n this.setState({ suggestions: undefined, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get auto suggest results');\n return undefined;\n }\n }\n\n private async _updateSearchRefiners(loadSuggestionsRequestId: string, query: string, suggestions: Autosuggestions | undefined) {\n try {\n const refiners = await this._getSearchRefiners(query);\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({\n suggestions,\n searchRefiners: refiners,\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions),\n isLoadingAutoSuggest: false\n });\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({ suggestions, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions) });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get refiners results');\n }\n }\n\n private _loadSuggestions(query: string) {\n this.cancellabelDebounce = debounce(async () => {\n this.setState({ isLoadingAutoSuggest: true });\n const loadSuggestionsRequestId = Random.Guid.generateGuid();\n this.loadSuggestionsRequestId = loadSuggestionsRequestId;\n const searchSuggestions = await this._getSearchSuggestions(loadSuggestionsRequestId, query);\n await this._updateSearchRefiners(loadSuggestionsRequestId, query, searchSuggestions);\n }, this.waitTime);\n\n setTimeout(() => {\n this.cancellabelDebounce();\n }, 0);\n }\n\n private readonly _handleInputChange = (query: string): void => {\n if (!query || query.length <= this.maxChars) {\n this.setState({ searchText: query });\n }\n\n if (this.cancellabelDebounce) {\n this.cancellabelDebounce.cancel();\n }\n\n const {\n context,\n data: { searchState }\n } = this.props;\n\n if (context) {\n if (query && query.length > 0) {\n if (query.length > this.maxChars) {\n return;\n }\n\n if (ArrayExtensions.hasElements(this.inputSuggestionType)) {\n this._loadSuggestions(query);\n }\n\n searchState.searchText = query;\n } else {\n this.setState({ suggestions: undefined, searchRefiners: undefined });\n searchState.searchText = '';\n }\n context.actionContext.update(createSearchStateInput(searchState), searchState);\n }\n };\n\n private _getSuggestionType(): string {\n const distinctSuggestionTypes: string[] = this.inputSuggestionType.map(\n suggestionTypeItem => suggestionTypeItem.SuggestionType!.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType!.slice(1)\n );\n return distinctSuggestionTypes.join(',');\n }\n\n private async _getSearchRefiners(searchText: string): Promise<ProductRefiner[]> {\n const { actionContext: ctx } = this.props.context;\n const catalogId = getCatalogId(ctx.requestContext);\n validateCatalogId(catalogId);\n return ProductsDataActions.getProductSearchRefinersAsync(\n { callerContext: ctx },\n {\n SearchCondition: searchText,\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n }\n );\n }\n\n private readonly _handleSubmit = (\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement> | React.FormEvent<HTMLFormElement>\n ): void => {\n const {\n config: { disableSubmitSearch },\n context: {\n actionContext,\n app: {\n config: { searchQueryStringParameter }\n }\n }\n } = this.props;\n\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\n e.preventDefault();\n\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else {\n const searchQsp = searchQueryStringParameter || 'q';\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\n document.location.href = searchURL;\n }\n };\n\n private readonly _handleCancelSearchChange = (): void => {\n const { isSearchFormExpanded, suggestions } = this.state;\n\n if (!isSearchFormExpanded) {\n this.setState({\n isSearchFormExpanded: true,\n searchText: '',\n isInitialState: false\n });\n } else {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _handleCancelSearchFocused = (): void => {\n const { suggestions } = this.state;\n if (!(suggestions && suggestions.AllSearchResults)) {\n this._clearAutoSuggestState();\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(route, window.location.href);\n if (qsp && query) {\n queryUrl.searchParams.set(qsp, query);\n }\n\n return queryUrl.href;\n };\n\n private readonly _setAutoSuggestResultCount = (result?: Autosuggestions) => {\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\n ariaLiveRegion.innerText =\n result && result.AllSearchResults && result.AllSearchResults.length > 0 ? suggestResultString : emptyResultString;\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\n return ariaLiveRegion.innerText;\n }\n return '';\n };\n}\n\nexport default Search;\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 { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\nimport { ISearchViewProps } from './search';\n\nconst SearchView: React.FC<ISearchViewProps> = props => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n CategorySuggest,\n UlKeyword,\n UlProduct,\n UlCategory,\n form,\n autosuggestCategory,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n isLoadingAutoSuggest,\n isLoadingNode\n } = props;\n\n return (\n <Module {...Search}>\n {label}\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\n <Node {...AutoSuggest}>\n {searchText && searchText.length > 0 ? <Node {...AutoSuggestAriaLabel}>{AutoSuggestAriaLabelText}</Node> : ''}\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword, isLoadingAutoSuggest, isLoadingNode)}\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct, isLoadingAutoSuggest, isLoadingNode)}\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory, isLoadingAutoSuggest, isLoadingNode)}\n </Node>\n </Module>\n );\n};\n\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\n return (\n <Node {...SearchForm}>\n <Node {...FormWrapper}>\n {form.input}\n {form.cancelBtn}\n {form.submitBtn}\n </Node>\n </Node>\n );\n};\n\nconst _renderKeywordSuggestions = (\n KeywordSuggest: INodeProps,\n UlKeyword: INodeProps,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n keywordSuggestions && (\n <Node {...KeywordSuggest}>\n <Node {...UlKeyword}>\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n </Node>\n </Node>\n )\n );\n};\n\nconst _renderProductSuggestions = (\n ProductSuggest: INodeProps,\n UlProduct: INodeProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n productSuggestions && (\n <Node {...ProductSuggest}>\n <Node {...UlProduct}>\n {productSuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n <Node {...item.LiProduct} key={item.id || index}>\n <Node {...item.AProduct}>\n {item.thumbnail}\n {item.text}\n {item.price}\n </Node>\n </Node>\n );\n })}\n </Node>\n </Node>\n )\n );\n};\n\nconst _renderCategorySuggestions = (\n CategorySuggest: INodeProps,\n UlCategory: INodeProps,\n categorySuggestions?: ISearchCategoryViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n categorySuggestions && (\n <Node {...CategorySuggest}>\n <Node {...UlCategory}>\n {categorySuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n categorySuggestions.text.map(text => {\n return text;\n })}\n </Node>\n </Node>\n )\n );\n};\n\nexport default SearchView;\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, {\n IComponentProps,\n IGridSettings,\n IImageSettings,\n Image,\n isChannelTypeB2B,\n msdyn365Commerce\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DiscountLine,\n DiscountLineType,\n ProductCatalog,\n ProductDimensionType,\n SalesLine,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions, 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 /**\n * Price Editor Charges Text.\n */\n priceEditorResources?: ICartLinePriceEditorResources;\n\n /**\n * Sales agreement price prompt text.\n */\n salesAgreementPricePrompt?: string;\n\n /**\n * Shipping text.\n */\n shippingText?: string;\n\n /**\n * Confirmed Ship Date Label.\n */\n confirmedShipDateLabel?: string;\n}\n\n/**\n * Represents cart line data interface.\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<ICartLineData> {\n /**\n * The flag to change the quantity component from interactible 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 delivery location.\n */\n deliveryLocation?: string;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\n priceCurrency?: string;\n\n /**\n * Sales line confirmed ship date.\n */\n confirmedShipDate?: string;\n}\n\n/**\n * Represents dimensions strings.\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<ICartLineProps> = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!isChannelTypeB2B(props.context.actionContext.requestContext) || !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 <div className='msc-cart-line__catalog-label'>{catalog.Name}</div>;\n};\n\nconst cartLineItemFunctions = {\n /**\n * Render product dimensions.\n * @param product - Product data.\n * @param dimensionStrings - Dimension strings interface.\n * @returns JSX Element.\n */\n renderProductDimensions: (product: SimpleProduct, dimensionStrings: IDimensionStrings) => {\n if (!product.Dimensions) {\n return [];\n }\n\n return product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === ProductDimensionType.Color) {\n return (\n <div key={`${product.RecordId}ProductDimensions1`} className='msc-cart-line__product-variant-item'>\n <span className='msc-cart-line__product-variant-color'>\n {dimensionStrings.colorString}\n {': '}\n <span className='name'>{productDimension.DimensionValue?.Value}</span>\n </span>\n </div>\n );\n }\n\n if (productDimension.DimensionTypeValue === ProductDimensionType.Configuration) {\n return (\n <div key={`${product.RecordId}ProductDimensions2`} className='msc-cart-line__product-variant-item'>\n <span className='msc-cart-line__product-configuration'>\n {dimensionStrings.configString}\n {': '}\n <span className='name'>{productDimension.DimensionValue?.Value}</span>\n </span>\n </div>\n );\n }\n\n if (productDimension.DimensionTypeValue === ProductDimensionType.Size) {\n return (\n <div key={`${product.RecordId}ProductDimensions3`} className='msc-cart-line__product-variant-item'>\n <span className='msc-cart-line__product-variant-size'>\n {dimensionStrings.sizeString}\n {': '}\n <span className='name'>{productDimension.DimensionValue?.Value}</span>\n </span>\n </div>\n );\n }\n\n if (productDimension.DimensionTypeValue === ProductDimensionType.Style) {\n return (\n <div key={`${product.RecordId}ProductDimensions4`} className='msc-cart-line__product-variant-item'>\n <span className='msc-cart-line__product-variant-style'>\n {product.IsGiftCard ? dimensionStrings.amountString : dimensionStrings.styleString}\n {': '}\n <span className='name'>{productDimension.DimensionValue?.Value}</span>\n </span>\n </div>\n );\n }\n return null;\n });\n },\n\n /**\n * Gets the react node for product unit of price display.\n * @param props - The cart line props.\n * @returns The node representing markup for unit of measure component.\n */\n renderProductUnitPrice: (props: ICartLineProps) => {\n if (!props.data.cartLine.Price) {\n return null;\n }\n const zeroQuantity: number = 0;\n return (\n <div className='msc-cart-line__product-unit-price'>\n <span>\n <PriceComponent\n data={\n props.data.cartLine.Quantity && props.data.cartLine.Quantity > zeroQuantity\n ? {\n price: {\n CustomerContextualPrice: props.data.cartLine.Price\n }\n }\n : {\n price: {\n CustomerContextualPrice: props.data.cartLine.Price\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n currencyCode={props.priceCurrency}\n />\n </span>\n </div>\n );\n },\n\n /**\n * Render discount lines.\n * @param props - The cart line props.\n * @returns JSX element.\n */\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || !ArrayExtensions.hasElements(props.data.cartLine.DiscountLines)) {\n return null;\n }\n\n /**\n * Get the updated discount percentage.\n * @param discountLine - The discount line.\n * @param cartLine - The cart line.\n * @returns The updated discount percentage.\n */\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\n const numberZero = 0;\n const decimalPrecision = 2;\n const fullPercentage = 100;\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\n\n if (\n (discountLine.Percentage === numberZero ||\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\n cartLine.Price &&\n cartLine.Price > numberZero &&\n cartLine.Quantity &&\n cartLine.Quantity !== numberZero\n ) {\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\n updatedPercent = Number(\n ((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision)\n );\n }\n\n return updatedPercent;\n };\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n <div key={discountLine.OfferId ?? index} className='msc-cart-line__product-discount'>\n <span>{discountLine.OfferName ? discountLine.OfferName : ''}</span>\n <span className='msc-cart-line-item-product-discount-price'>\n <PriceComponent\n data={\n props.isSalesLine\n ? {\n price: {\n // @ts-expect-error -- Auto suppressed.\n CustomerContextualPrice: props.data.cartLine.PeriodicDiscount\n }\n }\n : {\n price: {\n CustomerContextualPrice: discountLine.EffectiveAmount,\n BasePrice: discountLine.EffectiveAmount\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n currencyCode={props.priceCurrency}\n />\n </span>\n <span className='msc-cart-line__product-discount-percentage'>\n {` (${discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''}%)`}\n </span>\n </div>\n );\n });\n },\n\n /**\n * Render inventory label.\n * @param props - The cart line props.\n * @returns JSX element.\n */\n renderInventoryLabel: (props: ICartLineProps) => {\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n\n return <p className={inventoryCssName}>{props.inventoryInformationLabel}</p>;\n },\n\n /**\n * Render shipping label.\n * @param props - The cart line props.\n * @returns JSX element.\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 (!ArrayExtensions.hasElements(shippingChargeLines)) {\n return undefined;\n }\n\n const defaultCharge: number = 0;\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount ?? defaultCharge);\n }, defaultCharge);\n\n const priceComponent = (\n <PriceComponent\n data={{\n price: {\n CustomerContextualPrice: freightFee\n }\n }}\n freePriceText='Free'\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__freight-actual'\n currencyCode={props.priceCurrency}\n />\n );\n return (\n <>\n <label className='msc-cart-line__freight-label'>{`${props.resources.shippingChargesText}:`}</label>\n <span className='shipping-value'>{priceComponent}</span>\n </>\n );\n },\n\n /**\n * Render other charges.\n * @param props - The cart line props.\n * @returns JSX element.\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?.map((otherCharge, index) => {\n const itemIndex = index;\n return otherCharge.CalculatedAmount ? (\n <div className='msc-cart-line__other-charges' key={itemIndex}>\n <label className='msc-cart-line__other-charges-label'>{`${String(otherCharge.Description)}:`}</label>\n <span className='other-charge-value'>\n <PriceComponent\n data={{\n price: {\n CustomerContextualPrice: otherCharge.CalculatedAmount\n }\n }}\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__other-charges-actual'\n currencyCode={props.priceCurrency}\n />\n </span>\n </div>\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 // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- We use 0 to indicate no sales agreement applied on the cart line.\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return <div className='msc-cart-line__sales-agreement-prompt'>{props.resources.salesAgreementPricePrompt}</div>;\n },\n\n renderConfirmedShipDate: (props: ICartLineProps) => {\n if (!props.isSalesLine || props.confirmedShipDate === undefined || StringExtensions.isNullOrEmpty(props.confirmedShipDate)) {\n return null;\n }\n return (\n <div className='msc-cart-line__confirmed-ship-date'>\n <span className='msc-cart-line__confirmed-ship-date-label'>{props.resources.confirmedShipDateLabel}</span>\n <span className='msc-cart-line__confirmed-ship-date-value'>{props.confirmedShipDate}</span>\n </div>\n );\n }\n};\n\n/**\n * Render cartline component.\n * @param props - The cart line props.\n * @returns JSX element.\n */\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC<ICartLineProps> = (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 renderProductUnitPrice = cartLineItemFunctions.renderProductUnitPrice(props);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDiscountLines = cartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = cartLineItemFunctions.renderInventoryLabel(props);\n const renderShippingLabel = cartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = cartLineItemFunctions.renderOtherCharges(props);\n const renderConfirmedShipDate = cartLineItemFunctions.renderConfirmedShipDate(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 const cartLineContentClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-content' : 'msc-cart-line__content';\n\n /**\n * Render other charges.\n * @param newValue - The cart line props.\n * @returns Boolean.\n */\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue);\n }\n return true;\n };\n\n /**\n * Generate error message.\n * @returns JSX element.\n */\n const generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n <div className='msc-alert__header'>\n <span className='msi-exclamation-triangle' />\n <span>{props.errorMessage}</span>\n </div>\n );\n }\n\n return null;\n };\n\n /**\n * Render Saving component.\n * @returns JSX element.\n */\n const renderSaving = (): JSX.Element | null => {\n if (!props.data.cartLine.DiscountAmount) {\n return null;\n }\n const discountAmountZero: number = 0;\n\n if (props.data.cartLine.DiscountAmount > discountAmountZero) {\n return (\n <>\n <span className='msc-cart-line__product-savings-label'>{`${props.resources.discountStringText || 'Discount'}`}</span>\n <PriceComponent\n data={\n props.isSalesLine\n ? {\n price: {\n // @ts-expect-error -- Auto suppressed.\n CustomerContextualPrice: props.data.cartLine.PeriodicDiscount\n }\n }\n : {\n price: {\n CustomerContextualPrice: props.data.cartLine.DiscountAmount,\n BasePrice: props.data.cartLine.DiscountAmount\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__product-savings-text'\n currencyCode={props.priceCurrency}\n />\n </>\n );\n }\n return null;\n };\n\n /**\n * Gets the react node for product unit of measure display.\n * @returns The node representing markup for unit of measure component.\n */\n const renderUnitOfMeasure = () => {\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 if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n <div className='msc-cart-line__product-unit-of-measure'>\n <span>{product.DefaultUnitOfMeasure}</span>\n </div>\n );\n };\n\n /**\n * Generate quantity and price component.\n * @returns JSX element.\n */\n const generateQuantityAndPrice = (): JSX.Element[] | null => {\n const nodes = [];\n const defaultMaxQuantity: number = 10;\n const singleQuantity: number = 1;\n const unitOfMeasure = renderUnitOfMeasure();\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 <div className='msc-cart-line__product-quantity'>\n <div className='msc-cart-line__product-quantity-label'>{resources.quantityDisplayString}</div>\n\n {generateErrorMessage()}\n\n <IncrementalQuantity\n id={`msc-cart-line__quantity_${props.data.product.RecordId}-\n ${String(props.data.cartLine.DeliveryMode)}-${String(props.data.cartLine.LineId)}`}\n max={props.maxQuantity ?? defaultMaxQuantity}\n currentCount={props.currentQuantity}\n onChange={onChange}\n inputQuantityAriaLabel={resources.inputQuantityAriaLabel}\n decrementButtonAriaLabel={resources.decrementButtonAriaLabel}\n incrementButtonAriaLabel={resources.incrementButtonAriaLabel}\n key={props.data.cartLine.LineId}\n disabled={!props.isCartStateReady}\n isGiftCard={props.data.product.IsGiftCard ?? props.isOutOfStock}\n telemetryContent={props.telemetryContent}\n />\n {unitOfMeasure}\n </div>\n );\n } else {\n nodes.push(\n <div\n className={classNames('msc-cart-line__quantity', {\n 'single-quantity': props.data.cartLine.Quantity === singleQuantity\n })}\n >\n {unitOfMeasure}\n <label className='quantity-label' htmlFor='quantity'>\n {resources.quantityDisplayString}\n {': '}\n </label>\n\n {generateErrorMessage()}\n\n <span className='quantity-value'>{props.data.cartLine.Quantity}</span>\n </div>\n );\n }\n }\n\n nodes.push(\n <div className='msc-cart-line__product-savings'>\n <PriceComponent\n data={\n isSalesLine\n ? {\n price: {\n CustomerContextualPrice: (props.data.cartLine as SalesLine).NetAmountWithAllInclusiveTax,\n BasePrice: (props.data.cartLine as SalesLine).GrossAmount\n }\n }\n : {\n price: {\n CustomerContextualPrice: (props.data.cartLine as CartLine).ExtendedPrice,\n BasePrice: props.data.cartLine.NetPrice\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__product-savings-actual'\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n currencyCode={props.priceCurrency}\n />\n {renderSaving()}\n {props.isOutOfStock ? renderInventoryLabel : null}\n </div>\n );\n\n return nodes;\n };\n\n const _renderStoreLocation = (): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n return (\n <div className='msc-cart-line__content__bopis-method'>\n <span className='pick-up'>{props.deliveryLocation}</span>\n </div>\n );\n } else {\n return (\n <div className='msc-cart-line__content__bopis-method'>\n <span className='shipping'>{props.deliveryLocation}</span>\n </div>\n );\n }\n };\n\n return (\n <div className='msc-cart-line'>\n {MsDyn365.isBrowser ? (\n <a className={imgeClassName} href={productUrl} aria-label={productName} role='link'>\n <Image\n requestContext={props.context.actionContext.requestContext}\n aria-hidden='true'\n src={props.primaryImageUrl ?? 'empty'}\n fallBackSrc={fallbackImageUrl}\n altText={productName}\n gridSettings={props.gridSettings}\n imageSettings={imageSettings}\n loadFailureBehavior='empty'\n />\n </a>\n ) : null}\n <div className={cartLineContentClassName}>\n <div className='msc-cart-line__product'>\n <CatalogLabelComponent {...props} />\n {MsDyn365.isBrowser ? (\n <a className='msc-cart-line__product-title' href={productUrl} {...productAttribute}>\n {productName}\n </a>\n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n <div className='msc-cart-line__product-variants'>{productDimensions}</div>\n ) : (\n ''\n )}\n <div className='msc-cart-line__product-price'>\n <PriceComponent\n data={\n isSalesLine\n ? {\n price: {\n CustomerContextualPrice: (props.data.cartLine as SalesLine).NetAmountWithAllInclusiveTax,\n BasePrice: (props.data.cartLine as SalesLine).GrossAmount\n }\n }\n : {\n price: {\n CustomerContextualPrice: (props.data.cartLine as CartLine).ExtendedPrice,\n BasePrice: props.data.cartLine.NetPrice\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__product-discount-value'\n currencyCode={props.priceCurrency}\n />\n {renderConfirmedShipDate}\n {renderUnitOfMeasure()}\n </div>\n {renderProductUnitPrice}\n {renderInventoryLabel}\n {renderDiscountLines}\n {props.showShippingChargesForLineItems && <div className='msc-cart-line__freight'>{renderShippingLabel}</div>}\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n </div>\n {generateQuantityAndPrice()}\n {renderSalesAgreementPrompt}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n <CartLinePriceEditor\n className='msc-cart-line__price-editor-container'\n context={props.context}\n resources={props.resources.priceEditorResources}\n cartState={props.data.cartState}\n cartLine={props.data.cartLine}\n />\n )}\n {_renderStoreLocation()}\n </div>\n </div>\n );\n};\n\n// @ts-expect-error\nexport const CartLineItemComponent: React.FunctionComponent<ICartLineProps> = msdyn365Commerce.createComponentOverride<ICartline>(\n 'CartLineItem',\n {\n component: CartLine,\n ...cartLineItemFunctions\n }\n);\n\nexport default CartLineItemComponent;\n"],"names":["filterDeliveryModeOption","useDefaultDeliveryOption","HeadingTag","_ref","description","React","className","message","title","isChecked","value","ariaSetSize","ariaPosInSet","ariaLabel","telemetryContent","onChange","payLoad","getPayloadObject","TelemetryConstant","DeliveryOptions","attributes","getTelemetryAttributes","Object","assign","checked","type","contentAction","etext","name","createRegexExcludedPatterns","excludedValuesString","regexString","split","map","element","trim","replace","s","toLowerCase","join","RegExp","validateAddressString","addressFieldString","regexExcludedStrings","lowerCaseAddressField","test","CheckoutDeliveryOptions","constructor","props","super","selectedItemId","deliveryOptions","isLoading","retailMultiplePickUpOptionEnabled","checkoutErrorRef","init","async","this","moduleState","onEdit","isSelectDefaultOptionEnabled","undefined","onCancel","onSubmit","status","config","notDisplaySelectedDeliveryOption","canShip","cartDeliveryMode","getSavedDeliveryOption","loadDeliveryOptions","_this$props$data$chec","data","checkout","result","checkoutCart","hasInvoiceLine","getCartLinesForShipping","length","isDeliveryModeExists","deliveryMode","find","deliveryOption","Code","getDeliveryOptionSelected","selectedItem","context","telemetry","error","id","typeName","priceFree","resources","price","get","DeliveryOption","DescriptionComponent","Description","PriceComponent","CustomerContextualPrice","freePriceText","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","tag","role","ErrorTitleComponent","ErrorMessageComponent","errorMessage","getDeliveryOptionList","count","index","code","radioButton","RadioButtonComponent","onDeliveryOptionChange","getSaveButton","saveBtnLabel","Button","color","disabled","onClick","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","_this$props$data$chec2","information","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","_this$props$data$chec3","updateCartDeliverySpecification","savedDeliveryOption","_this$props$data$chec4","onReady","cartLinesForShipping","DeliveryMode","deliveryModeId","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","channelDeliveryOptionConfig","onPending","then","response","_response$errorDetail","errorDetails","LocalizedMessage","StringExtensions","isNullOrEmpty","genericErrorMessage","setIsCancellable","catch","request","pickupDeliveryModeCode","channel","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","cart","CartLines","filter","cartLine","_this$channelDelivery","PickupDeliveryModeCodes","getDeliveryOptions","_this$props$data$chec5","cartState","cartId","Id","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","deliveryOptionFilter","none","FilterDeliveryModeOption","None","filterOutNonCarrierDeliveryMode","FilterOutNonCarrierDeliveryMode","enableAddressFilter","isAddressValid","_config$excludedAddre","deliveryNameExcludedValuesRegExp","Name","deliveryCityExcludedValuesRegExp","City","deliveryStreetExcludedValuesRegExp","Street","excludedAddressErrorMessage","getDeliveryOptionsAsync","callerContext","actionContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","sortedDeliveryOptions","sort","a","b","ShippingChargeAmount","_unused","deliveryOptionsNotFound","_this$props$data$chec6","_this$props$data$chec7","updateHasCartDeliveryMode","newHasCartDeliveryMode","isPaymentVerificationRedirection","_this$props$data$chec8","getStoredDeliveryOptions","_this$props$data$chec9","_this$props$data$chec10","_this$props$data$chec11","_this$props$data$chec12","_this$props$data$chec13","_this$props$data$chec14","isExpressCheckoutApplied","isExpressPaymentAppliedInCartPage","event","currentTarget","getTelemetryObject","telemetryPageName","friendlyName","nameExcludedStrings","cityExcludedStrings","streetExcludedStrings","_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$chec19","when","isDataReady","reaction","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec20","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec21","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","shouldComponentUpdate","nextProps","nextState","state","render","_this$props$data$chan","_this$props$data$feat","featureState","feature","IsEnabled","isReady","isUpdating","hasError","isError","isShowList","isShowSelected","deliveryOptionAriaLabel","viewProps","_objectSpread","deliveryOptionsData","alert","ErrorComponent","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","moduleProps","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","Waiting","saveButton","editButton","cancelButton","renderView","__decorate","observable","computed","action","withModuleState","observer","DeliveryOptionList","Node","key","DeliveryOptionSelected","_ref2","extraTextField","paragraph","extraText","RichTextComponent","text","Module","ref","channelConfig","currencyCode","Currency","CheckoutExpressPaymentContainer","moduleClassName","_getItems","slots","primary","_handleCheckoutExpressContainerHeadingChange","checkoutExpressPaymentContainerHeading","target","shouldHideExpressPaymentContainer","shippingAddressFromExpressCheckout","componentDidMount","isExpressPaymentModulesReady","items","item","includes","extensionPropertyKey","paymentTenderType","isModuleReady","BooleanValue","setState","_checkout$result","_checkout$result2","checkoutExpressPaymentSectionLoadingMessage","user","isOBORequest","EnabledPaymentsForOBO","ExpressPayment","shouldHideExpressPaymentContainerClassName","checkoutPlainContainerProps","WaitingComponent","_renderMsdyn365Text","headerProps","Msdyn365","editProps","requestContext","ContainerItemsComponent","isLoadingClassName","SupportedGiftCardType","CheckoutGiftCard","_this","isFetchingGiftCard","giftCardNumber","giftCardPin","giftCardExp","inputRef","inputPinRef","inputExpRef","isRequired","isEnabled","giftCards","giftCardExtends","onSkip","couldPaidByGiftCard","TotalAmount","isAuthenticated","app","giftCardSupported","External","shouldBeEnabledForGuest","handleCancelOrSubmit","hasSelectedItem","getFormattedPrice","arguments","cultureFormatter","formatCurrency","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","debug","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","giftCard","getGiftCard","addGiftCard","additionalProperties","Pin","ExpirationDate","TenderTypeId","Promise","resolve","input","current","focus","findGiftcardTenderTypes","tenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","tenderType","OperationId","ConnectorId","Error","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","getTenderTypesAsync","internalGiftcardTenderTypes","OPERATIONS","PayGiftCertificate","externalGiftcardTenderTypes","Both","month","Number","parseInt","year","getGiftCardAsync","activeGiftCard","Balance","emptyInputError","duplicatedCodeError","invalidCodeError","some","card","resolveCardTypesAsync","CardType","GiftCard","loyaltyAmount","customerAccountAmount","reduce","getLoyaltyAmount","getGiftCardTotalAmount","getCustomerAccountAmount","showAdditionalFields","additionalFields","shouldPayGiftCard","supportExternalGiftCard","checkoutGiftCardProps","showGiftCard","TitleCompoent","giftCardFormLabel","getList","canRemove","onRemoveGiftCard","form","getForm","onEnterGiftCardNumber","onEnterGiftCardPin","onEnterGiftCardExp","onApplyGiftCard","disableAddGiftCard","From","formProps","label","inputPinLabel","inputExpLabel","inputProps","inputNumProps","inputPinProps","inputExpProps","inputNumber","inputPin","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","alertFieldLabel","SelectedGiftCard","itemProps","selectedGiftCard","removeButton","GiftCardList","_ref3","listProps","_ref4","_objectWithoutProperties","_excluded","AddResource","_ref5","ShowResource","_ref6","onApplyHandler","preventDefault","onChangeNumberHandler","onChangePinHandler","onChangeExpHandler","options","applyGiftCardButton","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","classnames","Alert","assertive","fade","includeAlertClass","isOpen","placeholder","onRemoveHandler","_giftCard$Id","getItem","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","CardCurrencyCode","giftCardLast4Digit","substr","CheckoutLoyalty","_defaultLoyaltyPoints","loyaltyCard","CardNumber","LoyaltyCardId","updateLoyaltyCardId","loyaltyCardNumber","warning","shouldPayLoyalty","_setErrorMessage","_clearError","_dialogToggleRef","_applyLoyaltyPoints","bind","_removeLoyaltyPoints","_onInputChange","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","Loyalty","isShowLoyalty","isShowAddLoyalty","checkoutLoyalty","showLoyalty","heading","Heading","headingTag","loyaltyHeadingText","coveredAmountText","TextComponent","loyaltyCoveredAmountText","amount","addLoyalty","drawer","Drawer","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","cardNumber","rewardPoints","RewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","LabelComponent","payWithLoyaltyAmountLabel","htmlFor","loyaltyAmountInput","InputComponent","onBlur","step","min","max","ariaValueMax","ariaValueMin","ariaValueNow","loyaltyAmountApplyButton","applyCheckoutLoyaltyPaymentText","isNaN","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","removeCheckoutLoyaltyPaymentText","innerRef","point","RewardPointId","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","ActivePoints","toString","expiringPointsText","expiringPoints","PointsExpiringSoon","updateLoyaltyAmount","newAmount","parseFloat","num","toFixed","document","getElementById","isDisabled","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","bypassCache","callActionOrExecute","_points$MaxCurrencyVa","update","GetLoyaltyTransactionEstimationInput","apiSettings","newMaxPoints","exception","AddCheckoutLoyalty","rewardPoint","ShowCheckoutLoyalty","paymentInstrumentModuleId","CheckoutPlainContainer","getItems","getActiveChildModuleStates","childIds","getModule","hasModuleState","forEach","isPaymentSectionContainer","ArrayExtensions","hasElements","childId","shouldEnableSinglePaymentAuthorizationCheckout","amountDue","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","isSkipped","onContainerReady","isCollapse","_checkoutResult$check","_cart$TotalAmount","shouldSubmitContainer","shouldCollapsePaymentSection","shouldTriggerPaymentWithPlaceOrder","updateIsPaymentSectionContainerHasError","newIsPaymentSectionContainerHasError","isCheckoutCallFailed","updateIsCheckoutCallFailed","newIsCheckoutCallFailed","componentDidUpdate","enableControl","width","hasInitialized","container","hidden","loading","LoadingComponent","initialized","skipped","ready","updating","pending","isPending","ItemComponent","Loading","getInvoicePaymentSummary","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","lines","InvoiceSummary","orderTotalLabel","Checkout","isValidationPassed","isPlaceOrderLoading","isPlaceOrderClicked","handleCheckoutHeadingChange","checkoutHeading","cartStatus","isEmptyCart","getSlotItems","triggerPaymentWithPlaceOrder","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","onPlaceOrder","checkoutOutOfStockErrorMessage","enableStockCheck","orderConfirmation","products","isOverMaxQuantity","hasOrderConfirmation","updatedCartVersion","updateCartLineEmailAddress","guestCheckoutEmail","placeOrder","handleCheckoutError","_this$props$context$r","emailDeliveryCartLines","lineDeliverySpecifications","line","LineId","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","updatedCart","Version","_this$props$context$r2","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","cartline","_cartlineProduct$Beha","cartlineProduct","product","RecordId","ProductId","isStockedItem","Behavior","IsStockedProduct","isEmailDelivery","foundProductAvailability","productInventory","_productInventory$Pro","ProductAvailableQuantity","push","cartLinesInventoryValidation","validateCartLinesInventory","isValid","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","window","location","validateForCheckout","_this$props$data$feat2","_this$props$context","retry","isOrderQuantityLimitsFeatureEnabledInHq","isEcommerceQuantityLimitsFeatureEnabledInHq","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","customerInformation","isB2BSite","isChannelTypeB2B","isOrderQuantityLimitsFeatureEnabledInSiteSettings","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","refreshCart","refreshError","_saveShippingAndBillingAddress","tokenizedPaymentCard","Zip","address","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","TwoLetterISORegionName","Country","NameOnCard","Address1","StreetNumber","Address2","State","ZipCode","Phone","invalidCartVersionErrorMessage","missingRequiredCartTenderLinesErrorMessage","timeoutErrorMessage","checkoutResult","apiError","statusCode","errorCode","setCheckoutErrors","_error$data","AdditionalContext","isEditorialMode","isEmpty","params","isEditor","isTermsAndConditionAccepted","disableForOBO","isPaidOffByCustomerAccount","_this$props$data$chec22","_this$props$data$chec23","asyncResultStatus","AsyncResultStatusCode","LOADING","_this$props$data$chec24","_this$props$data$chec27","email","tenderLine","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","_this$props$data$chec25","_this$props$data$chec26","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newTenderLine","newTokenizedPaymentCard","newPaymentTenderType","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","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","canPlaceOrder","_this$props$data$chec38","_this$props$data$chec39","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","_this$props$data$chec40","_this$props$data$chec41","checkoutErrorLocation","checkoutPaymentErrorLocation","ErrorCode","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","CheckoutPaymentInstrument","_this$props$data$chec42","_this$props$data$chec43","shouldFocusOnCheckoutError","_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","disableGuidedCheckoutFlow","backToShopping","placeOrderText","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","allCheckoutInformation","checkoutInformation","info","checkoutExpressPaymentContainer","isConsentGiven","cookies","isMobile","device","Type","backToShoppingUrl","termsAndConditions","BackToShopping","backToShoppingAttributes","checkoutBtnText","hasShippingAddress","hasCartDeliveryMode","hasGuestCheckoutEmail","hasExpressPaymentContainer","getElementsByClassName","style","display","hasSalesOrder","salesOrder","checkoutProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","renderMsdyn365Text","AlertComponent","_this$props$data$chec59","_this$props$data$chec60","canShow","guidedForm","GuidedFormComponent","resource","orderSummary","getOrderSummary","invoicePaymentSummary","lineItems","getLineItems","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","href","values","every","SUCCESS","FAILED","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","EmailDelivery","LineItemComponent","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","LineItemDeliveryGroup","LineItemList","lineItem","LineItemGroupComponentWithMultiplePickUp","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","OrderSummaryComponent","_ref9","subtotal","shipping","otherCharge","tax","totalDiscounts","loyalty","customerAccount","orderTotal","PaymentSummaryComponent","_ref10","invoices","_featureState$result","_getDeliveryLocation","orgUnitLocations","FulfillmentStoreId","locationMatch","OrgUnitNumber","OrgUnitName","_getLineItemComponent","_input$data$catalogs","productId","_product","imageSettings","showShippingChargesForLineItems","quantityDisplayString","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","productDimensionTypeAmount","configString","inputQuantityAriaLabel","discountStringText","shippingCharges","gridSettings","catalogs","productUrl","getProductUrlSync","MsDyn365","isBrowser","_cartLine$CatalogId","fullUrl","URL","searchParams","set","CatalogId","CartLineItemComponent","sizeString","colorString","styleString","amountString","originalPriceText","currentPriceText","shippingChargesText","salesAgreementPricePrompt","isQuantityEditable","primaryImageUrl","PrimaryImageUrl","priceCurrency","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","_getEmailDeliveryComponents","emailDeliveryText","_getLineItemsComponents","isPickUp","_getCartPickDeliveryMode","cartLineItem","_channelDeliveryOptio","isNullOrWhitespace","_countItems","Quantity","_filterItemsByDiliveryType","_channelDeliveryOptio2","_getLineItemsByDeliveryType","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","productDeliveryOptions","_productDeliveryOptio","suffix","handleLineItemHeadingChange","lineItemsHeading","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","cartLinesGrp","entries","groupByDeliveryType","keys","cartLines","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","groupTitle","iconClass","_getLineItems","editCartText","EditCart","attribute","groupClass","orderSummaryHeading","subTotalLabel","shippingLabel","taxLabel","loyaltyLabel","giftcardLabel","totalDiscountsLabel","freeText","toBeCalculatedText","otherCharges","customerAccountLabel","showLineItems","channelConfiguration","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","orderSummaryProps","OrderSummary","otherChargeLabel","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","isCancelAllowed","hasControlGroup","saveAndContinueBtnLabel","canSubmit","canCancel","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","focusOnFirstFocusableElement","node","child","querySelector","focusOnEditButton","scrollToTitle","formCard","scrollIntoView","getTitle","Tag","_getModules","_getId","prevProps","isActive","onNext","shouldFocus","children","childrenModules","childModule","childState","setCheckoutErrorFocus","isExpanded","changeBtnLabel","CheckoutChange","changeBtnAttributes","canEdit","active","expanded","closed","visted","CheckoutGuidedForm","currentStep","getEnabledModules","_enableAfterModule","Boolean","i","nextChildId","_isPaymentSectionContainer","moduleId","_sectionState$childId","sectionState","currentId","getStep","indexOf","getId","getHeading","moduleChildId","_state$childIds","shouldCollapseAfterRedirect","hasMissingInfo","hasOrderError","previousModuleHasError","_this$props$requestCo","GuidedCard","buttonsStates","onPlaceOrderHandler","isBusy","buttonSetState","setIsBusy","useState","payload","TelemetryEvent","Purchase","PayCard","PayLoyalty","PayCustomerAccount","ctx","orderedProducts","redirect","PlaceOrder","balanceCheckButton","GiftCardBalanceCheck","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","Form","Item","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","IsInvoiceLine","reactNodes","invoiceLine","InvoiceAmount","format","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","Math","totalAmountAfterGiftCard","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","OrderTemplateActions","onRemoveOrderTemplate","handlers","itemKey","removeOrderTemplateActionHandler","OrderTemplateRender","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","onDismiss","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","_getOrderTemplatePageUrl","_getUrlSync","url","getUrlSync","separator","totalLines","addToCartButton","AddOrderTemplateToCartComponent","moduleTypeName","addToCartText","addToBagText","dialogStrings","isMultipleCatalogFeatureEnabledInHq","orderTemplateStatusMessage","userMessage","statusCssString","toggle","onClickHandler","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","slice","_line$productListLine","_line$fullProduct$Pro","_line$fullProduct","_line$fullProduct2","_line$fullProduct$Pro2","_line$fullProduct3","_getFallbackImageUrl","_line$fullProduct4","_context$request$app","fullProduct","_updateProductUrlCatalog","ProductDetails","productListLine","Image","altText","src","fallBackSrc","getFallbackImageUrl","ItemId","OmniChannelMedia","loadFailureBehavior","productDetails","catalogId","OrderTemplateListStatusMessage","errorType","modalCloseButtonReference","onCancelHandler","isCreateOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","onCreateButtonClick","createOrderTemplateText","OrderTemplateNameDialog","modalOpen","isUpdateDialog","setModalOpen","createOrderTemplateDialogResources","onSuccess","onOrderTemplateCreated","parentElementRef","OrderTemplateList","_isChannelMultipleCatalogsFeatureEnabled","_onDismiss","_reloadPage","reload","_onRemoveFromOrderTemplateList","productListId","orderTemplates","token","p","productList","deleteAsync","headerStatusMessage","deleteOrderTemplateFailedText","messageGlyph","_heading$text","_heading$tag3","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","orderTemplateListHeading","orderTemplateListTitle","_heading$tag","errorProps","statusMessage","Spinner","msg","progressNotificationText","_heading$tag2","emptyViewProps","createOrderTemplateButton","CreateNewTemplateButtonComponent","_generateOrderTemplateNameDialogResources","templateHeaderStatusMessage","OrderTemplates","OrderTemplate","_renderOrderTemplateList","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","currentTemplateProps","addToBagButtonText","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","linesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","OrderTemplateListView","_renderOrderTemplate","CONTENT","AddLineToTemplate","query","productCatalogs","content","Search","selectedProduct","selectedCatalogId","searchTextInput","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","autoComplete","_onSearchSubmit","_onCatalogSelectionChange","_getCatalogNodes","autoFocus","maxLength","_get","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","channelId","varianteInput","SelectedVariantInput","productVariant","getSelectedVariant","dimensions","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","orderTemplateId","AddItemToOrderTemplateInput","quantity","DefaultUnitOfMeasure","addItemToOrderTemplate","reloadPage","_toggleModalHandler","onTelemetryClick","_getCatalogs","onComponentDidMount","_this$searchTextInput","onComponentDidUpdate","_this$searchTextInput2","addLineModalLinkText","backToResultsText","modalProps","Modal","ModalHeader","showBackArrow","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","clickHandler","renderResultCountText","ModalBody","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","getCatalogId","validateCatalogId","productCatalog","isSelected","selected","searchText","searchCriteriaInput","Context","ChannelId","IncludeAttributes","SearchCondition","searchByCriteriaAsync","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","innerText","dropdownList","dropdownName","OrderTemplateQuantity","_validateMin","minValue","currentInput","currentCount","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","incDisabled","currentValue","extraClass","getChangeHandler","_onIncrementalChange","decrementButtonAriaLabel","tabIndex","pattern","incrementButtonAriaLabel","updatedQuantity","e","inputElement","HTMLInputElement","_debounce","setAttribute","defaultProps","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","showAddConfirmation","errors","add","missingDimensions","dimension","DimensionTypeValue","ProductListId","addToTemplateDuplicateError","addToTemplateGenericError","_onQuantityChange","newValue","totalPrice","Price","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_onDimensionChanged","_this$state$errors","remainingDimensionsErrors","selection","buttonDisabled","mappedDimensions","DimensionValue","variantProduct","dimensionInput","variantDimensions","availabilityInput","ProductAvailabilitiesForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","priceInput","PriceForSelectedVariantInput","productPrice","getPriceForSelectedVariant","productAvailableQuantity","unitPrice","BasePrice","_getDropdownName","dimensionType","productDimensionTypeConfiguration","_product$Name","_product$PrimaryImage","_product$Name2","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","_formatPrice","_getDimensionsNodes","ModalFooter","_getConfirmationMessage","selectedDimensionNames","_dimension$DimensionV","variant","addToTemplateConfirmation","_this$state$errors2","unshift","selectProductButtonText","_generateImageUrl","_props$context$reques","primaryImageSource","generateImageUrl","fallBackImg","ProductSelectButton","buttonText","setBusy","getClickHandler","OrderTemplateBulkActions","isAddDisabled","isRemoveDisabled","addHandler","onAddSelectionToBag","removeHandler","onRemoveSelection","selectedLines","_this$props$data$cata","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","isMinifiedView","removeOrderActionHandler","_removeOrderTemplate","onRemoveTemplate","_getOrderTemplateAddToCartDialog","addTemplateToBagButtonText","_getOrderTemplateRenameControl","renameOrderTemplateDialogStrings","RenameOrderTemplateComponent","onRenameTemplate","renameOrderTemplateButtonText","renameTemplateButtonText","buttonEventReference","ActionsSplitButton","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","existingOrderTemplate","onOrderTemplateNameCancel","_buttonEventReference","requestStatementDropdownString","Random","Guid","generateGuid","Popover","placement","OrderTemplateLineActions","orderTemplateLine","onAddToBag","onRemoveItem","getAddToBag","getRemoveItem","PopUp","removeFromOrderTemplateLinesText","moreButtonText","viewProductDetailsText","showMobile","setShowMobile","toggleDetailsDisplayed","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","onSelect","ExtraActionsPopup","showActions","setShowActions","actionsContainerClassName","OrderTemplateMobileLineView","_context$request$app2","UnitOfMeasure","fallbackImage","productLineCatalog","renderProductCatalog","productImage","_renderProductImage","productInfo","renderProductInfo","_renderPrice","productNumber","productUnitOfMeasure","productQuantityView","_generateQuantity","onChangeHandler","onChangeQuantity","isQuantityDisabledForUpdate","image","_context$actionContex","_context$request","isB2b","catalog","_renderProductError","OOS","outOfStockProductErrorMessage","UNASSORTED","unavailableProductErrorMessage","NONE","_orderTemplateLine$fu","Dimensions","_renderProductDimensions","productName","dimensionsLine","OrderTemplateLinesStatusMessage","OrderTemplateTableHeading","componentClassName","getOnChange","checkedLines","scope","selectAllRowsText","productLineCatalogName","productUnitPrice","productUOM","productQuantity","productActions","OrderTemplateLines","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","maxWaitTimeInMilliSeconds","removeProductListLinesAsync","setTimeout","_this$props$data$orde","_onAddSelectionToBag","productLine","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","ProductTypeValue","AdjustedPrice","_addItemToBag","_getCurrentUrl","reqContext","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","itemAddedToCartDialogData","ItemAddedToCartDialog","_generateItemAddedToCartDialogResources","onClose","_renderPagination","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","absoluteUrl","_changeQuantity","orderTemplateLinesData","orderLineIndex","findIndex","newProductListLine","prevQuantity","updateProductListLinesAsync","newLine","updatedLines","updatedOrderTemplate","ProductListLines","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","maxQuantityLimitText","addedToCartFailureMessage","addProductToCartInput","addProductToCart","priceResult","AsyncResult","reject","isMiniCart","addToCartBehavior","substatus","maxQuantityForCartLineItem","_cart$result","_cart$result2","cartLineQuantity","defaultMessage","_removeItemFromOrderTemplateLines","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","_renameTemplate","_removeTemplate","_orderTemplate$result","newLink","_getViewport","innerWidth","sm","md","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","signInUrl","addEventListener","componentWillUnmount","removeEventListener","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","ObjectExtensions","isNullOrUndefined","orderTemplateResult","_isFirstPage","orderActions","_renderOrderTemplateActions","bulkOrderLineActions","_getOrderTemplateLineActions","productsStatusMessage","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","callbacks","updateQuantity","debounce","pagination","itemAddedToCartDialog","updated","_product$fullProduct","onSelectAll","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","headers","_generateLinesAddedToCartDialogResources","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","deleteTemplateButtonText","addTemplateToBag","renameTemplate","removeTemplate","actionsSplitButton","OrderTemplateActionsView","renameOrderTemplateTitleText","skip","selectOneRowText","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","selectLine","addToBagButton","extraActionsPopup","popUp","shouldDisable","OrderTemplateLineView","ProductPrice","_renderItem","quantityLabel","disableElement","pointerEvents","opacity","toggleDetails","wrapClassName","applicationNode","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Decimal","Integer","findMatchingRefinementCriterion","productRefinerValue","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","RefinerRecordId","RefinerSourceValue","DataTypeValue","LeftValueBoundString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","selectedCriterion","isSelecting","next","rangeStart","RightValueBoundString","rangeEnd","Text","TrueFalse","parentProductRefinerHierarchy","RefinerTypeValue","RefinerType","SingleSelect","Values","matchingIndex","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","stopPropagation","clearAll","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","parent","hierarchy","_getKeyForRefinerValue","clearAllText","classNames","choiceAriaLabel","closeAriaLabel","selectedRefinersMap","clearAllAttributes","urlBuilder","LeftValueBoundLocalizedString","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","KeyName","UnitText","filterValue","refiner","currency","trace","ErrorMessage","FeatureSearchResultItem","recommendation","productRecordId","getProductPageUrlSync","featureSimilarDescriptionTitle","featureSimilarLooksTitle","imageUrl","img","imageProps","renderProductPlacementImage","Link","ModalToggle","modalNode","returnFocusRef","returnRef","onModalToggle","zIndex","modalHeaderNode","modalTitle","modalFooterNode","modalCloseButtonText","getInventoryLabel","AttributeValues","inventoryAttribute","TextValue","ProductSearchResultItems","moduleType","allowBackNavigation","quickviewSlot","productComparisonButton","isPriceMinMaxEnabled","productsDimensionAvailabilities","priceResources","priceRangeSeparator","ProductComponent","ratingAriaLabel","allowBack","quickViewButton","inventoryLabel","swatchItemAriaLabel","dimensionAvailabilities","dimensionAvailability","masterProductId","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","selectedRefinementCriterion","initialMin","initialMax","String","maxValue","labels","sliderKeyString","sliderThumbs","validationErrorMin","validationErrorMax","touchedMin","touchedMax","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_this$props$selectedR5","_this$props$selectedR6","_this$props$selectedR7","_this$props$selectedR8","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onFocus","maxLabel","placeholderTextMax","ariaAttributes","Slider","inForm","orientation","showLabels","showTooltip","onChangeEnd","handleTooltipText","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","onToggle","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","touched","validationError","validationErrorRange","inputAsNum","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","_this$props","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","attrs","stringify","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productCount","Count","refineMenuItemAriaLabel","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","itemId","colorHexCode","SwatchComponent","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","isMobileView","RatingComponent","avgRating","ratingCount","hideCount","readOnly","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpandedOnInitialLoad","productRefinerHierarchy","hideRating","Collapse","timeout","_renderChildItems","_renderRange","_renderSingleMultiSelect","refinerValuesList","listItems","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","SliderWithBars","onUpdateRefiners","prevState","Separator","Title","SearchResultContainer","SearchResultContainer_1","sortByDropdownOptions","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","_isMounted","_updateVariantAvailability","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","DimensionTypes","includeAttributes","_getProductsDimensionsAvailabilities","_updateListPageState","listPageState","_this$props$config$it","_this$props$config$it2","querySorting","sorting","decodeURIComponent","currentPageNumber","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","featureProduct","_this$props$data$list","_this$props$data$list2","productsList","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","_getActivePrice","_this$props$data$list3","_this$props$data$list4","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","SearchResultModal","modalIsOpen","_modalToggleRef","_toggleModal","_getCollectionTitle","collectionTitle","_this$props$context$r3","category","getFriendlyName","locale","NameTranslations","productCountNumber","productCountText","numberOfProducts","oneProduct","TitleContainer","titlePrefix","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabel","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","refiners","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandRefinersCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","_this$props$data$prod","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","channelInventoryConfiguration","isInventorySortableAttribute","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","isInventoryProductAttribute","InventoryProductAttributeRecordId","_getChoiceSummary","_this$props$data$refi","selectedRefiners","rating","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$prod5","shouldAllowBackNavigation","breadCrumbType","breadcrumbType","shouldAllowBack","quickview","isPriceMinMaxFeatureState","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","option","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","validValues","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list6","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","productPrices","validationErrorNotNumber","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","_this$props$context$a2","StoreOperationsDataActions","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r4","_this$props$context$r5","_this$props$context$r6","_this$props$context$a","newListPageState","GetFullProductsByCollectionInput","Paging","Top","Skip","Sorting","recordId","Recommendation","productResults","getCollectionProducts","enableAffiliationBasedPricing","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r7","_this$props$context$r8","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","_listPageState$result","_listPageState$result2","_this$props$context$r9","_this$props$data$list7","_this$props$data$list8","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","sortByOptions","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","FeatureSearchContainer","similarLookProduct","VariantType","Browser","Viewport","createSearchResultModal","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","_props$context$action","SearchState","SuggestionType","AutoSuggestInput","top","suggestionType","hitPrefix","hitSuffix","getCacheKey","getCacheObjectType","dataCacheType","searchQuery","topResultsCount","_getAutoSuggest","autosuggest","searchCriteria","ProductSearchCriteria","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","ImageUrl","AllSearchResults","createObservableDataAction","autoSuggestPromises","all","inputData","CategorySuggestionsComponent","suggestions","autoSuggestProps","categorySuggestionHeading","_assembleNode","_renderTitle","categoryAutoSuggestionHeading","shouldShowFullPath","splitValue","pop","_generateLink","_getHighlightedText","suggestion","_getCategoryLink","_categoryRefiners$Val","searchPageURL","searchQsp","searchRefiners","queryUrl","categoryRefiners","Category","encodedRefiner","compressRefiners","formattedText","getRichTextHtml","compressedRefinerKeys","compressedRefiners","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","handleInputChange","maxChars","disableSubmitSearch","handleCancelSearchChange","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","onInputChange","onInputChangeFunction","inputNode","submitBtnNode","cancelBtn","submitBtn","KeywordSuggestionsComponent","formattedLink","searchLabelClass","searchLabelArialLabel","isSearchFormExpanded","searchtext","searchCollapsedLabel","ProductSuggestionsComponent","productSuggestionHeading","productAutoSuggestionHeading","_item$Value","Value3","DecimalValue","thumbnail","_renderThumbnail","LiProduct","_getLiWrapper","AProduct","_getAWrapper","recid","adjustedPrice","basePrice","_props$resources","cropFocalRegion","waitTime","_isLoadingNode","loadingText","autoSuggestResultLoadingMessage","size","SpinnerSize","medium","labelPosition","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","keyCode","KeyCodes","Escape","formReference","contains","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","createSearchStateInput","_handleInputChange","cancellabelDebounce","cancel","inputSuggestionType","_loadSuggestions","_handleSubmit","searchURL","_appendQueryParams","_handleCancelSearchChange","isInitialState","_handleCancelSearchFocused","route","_setAutoSuggestResultCount","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","autoSuggestAriaLabel","isLoadingAutoSuggest","searchInputMaxLength","searchFormClass","_initSuggestionTypes","body","_suggestions$AllSearc","_suggestions$AllSearc2","_suggestions$AllSearc3","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","shouldShowFullCategoryPath","keywordSuggestions","Keyword","productSuggestions","Product","categorySuggestions","_item$RefinerRecordId","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","FormWrapper","UlKeyword","UlProduct","UlCategory","autosuggestKeyword","autosuggestProduct","autosuggestCategory","handleCancelSearchFocused","isLoadingNode","suggestionTypes","suggestionTypeCriterion","unique","validSuggestions","loadSuggestionsRequestId","getSearchSuggestionsAction","_getSuggestionType","_getSearchRefiners","_getSearchSuggestions","_updateSearchRefiners","suggestionTypeItem","charAt","toUpperCase","ProductsDataActions","_renderForm","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","CatalogLabelComponent","cartLineItemFunctions","renderProductDimensions","dimensionStrings","productDimension","_productDimension$Dim","_productDimension$Dim2","_productDimension$Dim3","_productDimension$Dim4","ProductDimensionType","Color","Configuration","Size","Style","IsGiftCard","renderProductUnitPrice","renderDiscountLines","DiscountLines","discountLine","_discountLine$OfferId","OfferId","OfferName","isSalesLine","PeriodicDiscount","EffectiveAmount","Percentage","discountPercent","_discountLine$Percent","updatedPercent","DiscountLineTypeValue","DiscountLineType","TenderTypeDiscount","_discountLine$Effecti","effectiveAmount","renderInventoryLabel","inventoryCssName","inventoryLabelClassName","inventoryInformationLabel","renderShippingLabel","_cartline$ChargeLines","shippingChargeLines","ChargeLines","chargeLine","IsShipping","chargeTotal","_chargeLine$Calculate","CalculatedAmount","priceComponent","renderOtherCharges","_cartline$ChargeLines2","_otherCharges$map","chargeline","itemIndex","renderSalesAgreementPrompt","SalesAgreementLineRecordId","renderConfirmedShipDate","confirmedShipDate","confirmedShipDateLabel","msdyn365Commerce","createComponentOverride","component","_props$context$reques2","_props$primaryImageUr","destructDimensionStrings","fallbackImageUrl","productDimensions","productAttribute","imgeClassName","cartLineContentClassName","quantityOnChange","generateErrorMessage","renderUnitOfMeasure","unitOfMeasureDisplayType","NetAmountWithAllInclusiveTax","GrossAmount","ExtendedPrice","NetPrice","generateQuantityAndPrice","nodes","unitOfMeasure","_props$maxQuantity","_props$data$product$I","IncrementalQuantity","maxQuantity","currentQuantity","isCartStateReady","isGiftCard","isOutOfStock","priceEditorResources","CartLinePriceEditor","deliveryLocation"],"sourceRoot":""}