{"version":3,"file":"static/js/18.dd9eb782d8c2510be419.chunk.js","mappings":"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","sources":["webpack://nile.commerce.online/./src/modules/checkout-billing-address/checkout-billing-address.tsx?2aa0","webpack://nile.commerce.online/./src/modules/checkout-shipping-address/components/checkout-shipping-cartlines-images.tsx?c635","webpack://nile.commerce.online/./src/modules/checkout-shipping-address/checkout-shipping-address.tsx?de3a","webpack://nile.commerce.online/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://nile.commerce.online/./src/modules/checkout-billing-address/checkout-billing-address.view.tsx?b194","webpack://nile.commerce.online/./src/modules/checkout-shipping-address/checkout-shipping-address.view.tsx?3386","webpack://nile.commerce.online/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://nile.commerce.online/./src/modules/adventureworks/views/components/product-v2.component.tsx?d155","webpack://nile.commerce.online/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://nile.commerce.online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://nile.commerce.online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://nile.commerce.online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://nile.commerce.online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://nile.commerce.online/./src/modules/cart/cart.tsx?d4e4","webpack://nile.commerce.online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://nile.commerce.online/./src/modules/product-collection/product-collection.tsx?4008","webpack://nile.commerce.online/./src/modules/quick-order/components/quick-order-drawer.tsx?f8b4","webpack://nile.commerce.online/./src/modules/quick-order/components/quick-order-form.tsx?eb54","webpack://nile.commerce.online/./src/modules/quick-order/components/quick-order-product.ts?7702","webpack://nile.commerce.online/./src/modules/quick-order/components/quick-order-table/components/quick-order-table-header-component.tsx?49e7","webpack://nile.commerce.online/./src/modules/quick-order/components/quick-order-table/components/quick-order-table-row-component.tsx?e487","webpack://nile.commerce.online/./src/modules/quick-order/components/quick-order-table/quick-order-table-component.tsx?46c1","webpack://nile.commerce.online/./src/modules/quick-order/quick-order.tsx?ef21","webpack://nile.commerce.online/./src/search-state.ts?dd10","webpack://nile.commerce.online/./src/modules/search/actions/get-auto-suggest-suggestions.ts?4735","webpack://nile.commerce.online/./src/modules/search/components/search.categorysuggest.tsx?c65d","webpack://nile.commerce.online/./src/modules/search/components/search.form.tsx?25a5","webpack://nile.commerce.online/./src/modules/search/components/search.keywordsuggest.tsx?297c","webpack://nile.commerce.online/./src/modules/search/components/search.label.tsx?0c17","webpack://nile.commerce.online/./src/modules/search/components/search.productsuggest.tsx?2af9","webpack://nile.commerce.online/./src/modules/search/search.tsx?72fb","webpack://nile.commerce.online/./src/modules/search-result-container/components/utilities.ts?8569","webpack://nile.commerce.online/./src/modules/search-result-container/components/choice-summary.tsx?3f71","webpack://nile.commerce.online/./src/modules/search-result-container/components/error-message.tsx?6302","webpack://nile.commerce.online/./src/modules/search-result-container/components/feature-search-result-item.tsx?71fa","webpack://nile.commerce.online/./src/modules/search-result-container/components/link.tsx?52c2","webpack://nile.commerce.online/./src/modules/search-result-container/components/modal.tsx?d78e","webpack://nile.commerce.online/./src/modules/search-result-container/components/product-search-result-items.tsx?5174","webpack://nile.commerce.online/./src/modules/search-result-container/components/range-refine-item.tsx?6288","webpack://nile.commerce.online/./src/modules/search-result-container/components/refine-item.tsx?a594","webpack://nile.commerce.online/./src/modules/search-result-container/components/range-refine-item-input.tsx?09aa","webpack://nile.commerce.online/./src/modules/search-result-container/components/refine-submenu.tsx?1292","webpack://nile.commerce.online/./src/modules/search-result-container/components/separator.tsx?4ea6","webpack://nile.commerce.online/./src/modules/search-result-container/components/title.tsx?c269","webpack://nile.commerce.online/./src/modules/search-result-container/search-result-container.tsx?7500","webpack://nile.commerce.online/./src/modules/eve-account-management-address/eve-account-management-address.tsx?fd00","webpack://nile.commerce.online/./src/modules/eve-checkout-shipping-address/components/checkout-shipping-cartlines-images.tsx?bf60","webpack://nile.commerce.online/./src/modules/eve-checkout-shipping-address/eve-checkout-shipping-address.tsx?fa80","webpack://nile.commerce.online/./src/modules/eve-account-management-address/eve-account-management-address.view.tsx?a610","webpack://nile.commerce.online/./src/modules/eve-checkout-shipping-address/eve-checkout-shipping-address.view.tsx?21bf","webpack://nile.commerce.online/./src/themes/nile-theme/views/checkout.view.tsx?68cd","webpack://nile.commerce.online/./src/modules/cart/cart.view.tsx?d8c2","webpack://nile.commerce.online/./src/modules/product-collection/product-collection.view.tsx?5d36","webpack://nile.commerce.online/./src/modules/quick-order/quick-order.view.tsx?a96d","webpack://nile.commerce.online/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://nile.commerce.online/./src/modules/search/search.view.tsx?1505","webpack://nile.commerce.online/./src/modules/adventureworks/views/media-gallery.view.tsx?7624","webpack://nile.commerce.online/./src/modules/adventureworks/views/search-result-container-v2.view.tsx?6eaa","webpack://nile.commerce.online/./src/modules/media-gallery/utils/helper.ts?b895","webpack://nile.commerce.online/./src/validate-cart.ts?cd50","webpack://nile.commerce.online/./src/invoice-summary-lineitem.tsx?5f61","webpack://nile.commerce.online/./src/order-summary-lineitem.tsx?8a98","webpack://nile.commerce.online/./src/Common/get-product.ts?0a21","webpack://nile.commerce.online/./src/common/components/address-error-alert.tsx?bcde","webpack://nile.commerce.online/./src/common/components/address-select.tsx?c1df","webpack://nile.commerce.online/./src/checkout-errors/checkout-errors.ts?a9e0","webpack://nile.commerce.online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/isObject.js?6616","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_root.js?1a49","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_Symbol.js?900a","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/isObject.js?a414","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/_root.js?6b7e","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/_Symbol.js?c496","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/isObject.js?beaf","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/_root.js?4743","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/_Symbol.js?1ff3","webpack://nile.commerce.online/./src/utilities/CheckoutContext.ts?6138","webpack://nile.commerce.online/./src/common/components/address-billing-checkbox.tsx?4008","webpack://nile.commerce.online/./src/common/components/address-billing-heading.tsx?7bbd","webpack://nile.commerce.online/./src/common/components/address-ship-multiple.tsx?136d","webpack://nile.commerce.online/./src/common/components/address-ship-multiple-heading.tsx?5d65","webpack://nile.commerce.online/./src/common/components/address-ship-multiple-lines.tsx?ce68","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/debounce.js?9c44","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/now.js?5c8e","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_freeGlobal.js?f887","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/toNumber.js?1a64","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_baseTrim.js?2c53","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_trimmedEndIndex.js?cc7b","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/isSymbol.js?45f8","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_baseGetTag.js?3ad8","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_getRawTag.js?8f9c","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_objectToString.js?b774","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/isObjectLike.js?c958","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/debounce.js?379f","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/now.js?05c7","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/_freeGlobal.js?fb09","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/toNumber.js?bd21","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/_baseTrim.js?f1dc","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/_trimmedEndIndex.js?1457","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/isSymbol.js?352e","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/_baseGetTag.js?b488","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/_getRawTag.js?78f5","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/_objectToString.js?5e80","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/isObjectLike.js?d2e8","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/debounce.js?3a03","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/now.js?0c88","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/_freeGlobal.js?8be1","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/toNumber.js?2d98","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/_baseTrim.js?5468","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/_trimmedEndIndex.js?3bf3","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/isSymbol.js?e7b6","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/_baseGetTag.js?c5ad","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/_getRawTag.js?3a4f","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/_objectToString.js?d517","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/isObjectLike.js?fec8","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search-result-container/node_modules/lodash/isUndefined.js?b9d8","webpack://nile.commerce.online/./src/utilities/DefaultAddressTypeMap.ts?8495"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, set } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { AutoSuggest } from '../../common/address-autosuggest';\nimport { IAutoSuggestOptions } from '../../common/address-autosuggest.data';\nimport { AddressCommon } from '../../common/address-common';\nimport { AddressFormat } from '../../common/address-format';\nimport { AddressItemType } from '../../common/address-format.data';\nimport { AddressMetaData } from '../../common/address-meta-data';\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { AddressBillingCheckbox } from '../../common/components/address-billing-checkbox';\nimport { AddressBillingHeading } from '../../common/components/address-billing-heading';\nimport { AddressShow, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutBillingAddressData } from './checkout-billing-address.data';\nimport { ICheckoutBillingAddressProps } from './checkout-billing-address.props.autogenerated';\nimport { ErrorComponent } from '../../common';\nimport { focusOnCheckoutError } from '../../checkout-errors/checkout-errors';\n\n/**\n * Props interface.\n */\nexport interface IProps extends ICheckoutBillingAddressProps, IModuleStateProps {}\n\n/**\n * Checkout billing address view state interface.\n */\nexport interface ICheckoutBillingAddressViewState {\n isShowAddress: boolean;\n isShowAddOrUpdateAddress: boolean;\n isShowSameAsShippingCheckbox: boolean;\n errorMessage?: string;\n}\n\n/**\n * Checkout billing address view props interface.\n */\nexport interface ICheckoutBillingAddressViewProps extends IProps {\n className: string;\n currentOperation: AddressOperation;\n selectedAddress?: Address;\n addUpdateAddress: Address;\n countryRegionId: string;\n stateProvinceInfo?: StateProvinceInfo[];\n validationError: object;\n addressActionResponse?: IAddressResponse;\n viewState: ICheckoutBillingAddressViewState;\n CheckoutBillingAddress: IModuleProps;\n sameAsShippingCheckbox: React.ReactNode;\n heading: React.ReactNode;\n showAddress: IAddressShowProps;\n showAddOrUpdateAddress: IAddressAddUpdateProps;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n *\n * CheckoutBillingAddress component.\n * @extends {React.PureComponent>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutBillingAddress extends React.Component {\n @observable private currentOperation: AddressOperation;\n\n @observable private isBillingAddressSameAsShipping: boolean;\n\n @observable private selectedAddress?: Address;\n\n @observable private addUpdateAddress: Address;\n\n @observable private countryRegionId: string = 'USA';\n\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n\n @observable private validationError: object;\n\n @observable private readonly addressActionResponse?: IAddressResponse;\n\n private readonly addressCommon: AddressCommon;\n\n private addressFormat: AddressFormat;\n\n private countryRegions: CountryRegionInfo[] = [];\n\n private addressPurposes: AddressPurpose[] = [];\n\n private readonly resources: IAddressResource;\n\n private readonly defaultAddressType: number = 6; // Default to Home\n\n // private addRenderRef: React.RefObject;\n private readonly telemetryContent?: ITelemetryContent;\n\n private autoSuggest?: AutoSuggest;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public constructor(props: IProps) {\n super(props);\n const { context, data, resources, telemetry } = this.props;\n\n this.addUpdateAddress = {};\n this.validationError = {};\n this.isBillingAddressSameAsShipping = false;\n this.resources = resources;\n this.currentOperation = AddressOperation.List;\n this.addressPurposes = data.addressPurposes.result || [];\n this.countryRegions = data.countryRegions.result || [];\n this.stateProvinceInfo = data.countryStates.result || [];\n this.addressCommon = new AddressCommon(context, resources, telemetry);\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\n this.addressPurposes\n );\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this.state = {\n isShowAddress: false,\n isShowAddOrUpdateAddress: false,\n isShowSameAsShippingCheckbox: false,\n errorMessage: ''\n };\n\n // This.addRenderRef = React.createRef();\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled, autoSuggestOptions }\n } = this.props;\n\n // Initializing data props\n this._dataInitialize(this.props);\n\n this.props.data.checkout.then(() => {\n this._setDefaultCountryRegionId();\n this._initModuleState();\n });\n\n reaction(\n () => this.countryRegionId,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.currentOperation,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress,\n shippingAddress => {\n if (this.props.moduleState.isUpdating) {\n if (shippingAddress && this.isBillingAddressSameAsShipping) {\n this.isBillingAddressSameAsShipping = true;\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\n } else if (shippingAddress && this.isBillingAddressSameAsShipping) {\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\n }\n }\n }\n );\n\n reaction(\n () => this.isBillingAddressRequried,\n isBillingAddressRequried => {\n if (isBillingAddressRequried) {\n if (this.props.moduleState.isDisabled) {\n this.onEdit();\n }\n } else {\n this.props.data.checkout.result?.removeBillingAddress({});\n this.props.moduleState.onDisable();\n }\n }\n );\n\n if (autoSuggestionEnabled) {\n if (channel && !channel.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n return;\n }\n\n if (channel && !channel.BingMapsEnabled) {\n telemetry.error('Map is disabled from HQ.');\n return;\n }\n\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\n this.autoSuggest = new AutoSuggest(\n telemetry,\n options,\n channel?.BingMapsApiKey,\n channel?.ChannelCountryRegionISOCode,\n channel?.DefaultLanguageId\n );\n\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\n if (\n this.props.data.storeSelectorStateManager.result &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n await this.autoSuggest._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n\n reaction(\n () =>\n this.props.data.storeSelectorStateManager.result?.loadMapApi &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\n async () => {\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\n async () => {\n await this._attachMapAutoSuggest();\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.CheckoutBillingAddress &&\n checkoutError.errorMessage\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutBillingAddress) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public async componentDidUpdate(): Promise {\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\n await this._attachMapAutoSuggest();\n }\n } else {\n this.autoSuggest?.disposeAutoSuggest();\n }\n }\n\n public shouldComponentUpdate(\n nextProps: ICheckoutBillingAddressProps,\n nextState: ICheckoutBillingAddressViewState\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 if (!this.isBillingAddressRequried || this._shouldHideBillingAddressForOBO) {\n return null;\n }\n\n const {\n resources,\n moduleState: { hasError }\n } = this.props;\n\n const { renderView, config } = this.props;\n\n const errorMessage = this.state.errorMessage;\n\n const viewProps = {\n ...this.props,\n currentOperation: this.currentOperation,\n selectedAddress: this.selectedAddress,\n addUpdateAddress: this.addUpdateAddress,\n countryRegionId: this.countryRegionId,\n stateProvinceInfo: this.stateProvinceInfo,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n className: config.className,\n viewState: {\n isShowAddress: this.selectedAddress && this.currentOperation === AddressOperation.Show,\n isShowAddOrUpdateAddress: this.currentOperation !== AddressOperation.Show,\n isShowSameAsShippingCheckbox: this.isCartContainsItemsForShipping && this.props.moduleState.isUpdating\n },\n CheckoutBillingAddress: {\n moduleProps: this.props,\n className: classnames('ms-checkout-billing-address', config.className)\n },\n heading: ,\n alert: hasError && errorMessage && ,\n checkoutErrorRef: this.checkoutErrorRef,\n\n sameAsShippingCheckbox: (\n \n ),\n showAddress: this._renderShowAddress(),\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * On suggestion selected.\n * @param result - The suggestion result.\n */\n @action\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n this._clearAddressFields();\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\n set(this.addUpdateAddress, { Street: '' });\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\n set(this.addUpdateAddress, { CountyName: address.CountyName });\n set(this.addUpdateAddress, { City: address.City });\n set(this.addUpdateAddress, { State: address.State });\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\n\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\n setTimeout(() => {\n set(this.addUpdateAddress, { Street: address.Street });\n }, 0);\n };\n\n /**\n * Clear address fields.\n */\n @action\n private readonly _clearAddressFields = (): void => {\n const addressFormatItem = this.addressFormat.getAddressFormat(\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n );\n addressFormatItem.forEach(format => {\n if (this.addUpdateAddress[format.name] !== undefined && !this.autoSuggest?.excludedAddressFields.includes(format.name)) {\n this.addressFormat[format.name] = '';\n }\n });\n this._clearValidation();\n };\n\n /**\n * Clear validation.\n */\n @action\n private readonly _clearValidation = (): void => {\n this.validationError = {};\n };\n\n /**\n * On address update.\n * @param name - Name.\n * @param value - Value.\n */\n private readonly onAddressAddUpdate = (name: string, value: string) => {\n set(this.addUpdateAddress, { [name]: value });\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\n };\n\n /**\n * Method data initialization.\n * @param props -The checkout address properties.\n */\n private readonly _dataInitialize = (props: IProps): void => {\n const { data } = props;\n\n reaction(\n () => data.countryRegions.result,\n () => {\n this.countryRegions = data.countryRegions.result ?? [];\n }\n );\n\n reaction(\n () => data.addressPurposes.result,\n () => {\n this.addressPurposes = data.addressPurposes.result ?? [];\n }\n );\n\n reaction(\n () => data.countryStates.result,\n () => {\n this.stateProvinceInfo = data.countryStates.result ?? [];\n }\n );\n };\n\n /**\n * Render add or update address function.\n * @returns - Address add update props.\n */\n private readonly _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\n return AddressAddUpdate({\n resources: this.resources,\n addressType: AddressType.Billing,\n addressFormat: this.addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName ?? this.countryRegionId),\n defaultCountryRegionId: this.countryRegionId,\n defaultAddressType: this.defaultAddressType,\n selectedAddress: this.addUpdateAddress,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(\n this.resources.addressStateDefaultSelectionText,\n this.stateProvinceInfo\n ),\n telemetryContent: this.telemetryContent,\n onInputChange: this._onAddressAddUpdateInputChange,\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\n onSave: this._onSubmitAddress,\n onCancel: this._resetView\n });\n };\n\n private _renderShowAddress(): IAddressShowProps | null {\n if (this.selectedAddress) {\n return AddressShow({\n address: this.selectedAddress,\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName ?? ''),\n addressPurposes: this.addressPurposes\n });\n }\n\n return null;\n }\n\n /**\n * On country region change function.\n * @param countryRegionId - Country region Id.\n */\n private readonly _onCountryChange = (countryRegionId: string) => {\n this.countryRegionId = countryRegionId;\n const twoLetterIsoRegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\n set(this.addUpdateAddress, { TwoLetterISORegionName: twoLetterIsoRegionName });\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterIsoRegionName);\n this._clearAddressFields();\n };\n\n /**\n * Gets address format for exclude list.\n * @returns - Address item type.\n */\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\n const { config } = this.props;\n const addressFormatExcludeList: AddressItemType[] = [];\n\n if (!config.showAddressType) {\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\n }\n\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\n\n return addressFormatExcludeList;\n };\n\n /**\n * Attach map auto suggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded) {\n this.autoSuggest?.attachAutoSuggest('#billing_addressstreet', '#billing_addressstreet_container', this._onSuggestionSelected);\n }\n };\n\n /**\n * On address add update input change.\n * @param event - The event.\n */\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n this.onAddressAddUpdate(event.target.name, value);\n };\n\n /**\n * On address add update dropdown change.\n * @param event - The event.\n */\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent): void => {\n this.onAddressAddUpdate(event.target.name, event.target.value);\n\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\n this._onCountryChange(event.target.value);\n }\n };\n\n /**\n * Gets state provinces.\n */\n private readonly _getStateProvinces = (): void => {\n if (\n !this.countryRegionId ||\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n return;\n }\n\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\n\n // Reset state if selected state not found in the list.\n if (!stateInfo) {\n set(this.addUpdateAddress, { State: '' });\n }\n this.stateProvinceInfo = result;\n });\n };\n\n /**\n * Initialize module state.\n */\n private readonly _initModuleState = (): void => {\n this.props.moduleState.init({\n status: this.isBillingAddressRequried ? 'updating' : 'disabled',\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit\n });\n\n const { billingAddress, isBillingAddressSameAsShippingAddress } = this.props.data.checkout.result ?? {};\n\n if (this.isBillingAddressRequried) {\n if (billingAddress) {\n this.isBillingAddressSameAsShipping = isBillingAddressSameAsShippingAddress ?? false;\n this._updateCurrentOperation(AddressOperation.Show, billingAddress);\n this._updateModuleState();\n } else if (this.isCartContainsItemsForShipping) {\n this.isBillingAddressSameAsShipping = true;\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n } else {\n this.isBillingAddressSameAsShipping = false;\n this._updateCurrentOperation(AddressOperation.Add);\n }\n }\n };\n\n /**\n * Sets default country region Id.\n */\n private _setDefaultCountryRegionId(): void {\n const { request } = this.props.context;\n const market = request.channel?.ChannelCountryRegionISOCode;\n\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\n }\n\n /**\n * On change - Billing address same as shipping.\n * @param event - The event.\n */\n private readonly _onBillingAddressSameAsShippingChange = (event: React.ChangeEvent) => {\n this.isBillingAddressSameAsShipping = event.currentTarget.checked;\n\n if (this.isBillingAddressSameAsShipping && this.shippingAddress) {\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n } else {\n this._updateCurrentOperation(AddressOperation.Add, this.billingAddress);\n }\n };\n\n @computed private get isCartContainsItemsForShipping(): boolean {\n const { request } = this.props.context;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props.data;\n const retailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const pickupDeliveryModeCode = request.channel?.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request.channel?.EmailDeliveryModeCode;\n\n // If hasInvoiceLine is true, there are only invoices no items in cart and return false here\n return this.props.data.checkout.result?.checkoutCart.hasInvoiceLine\n ? false\n : retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).some(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n channelDeliveryOptionConfig.result?.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) || []).some(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n }\n\n @computed private get billingAddress(): Address | undefined {\n return this.props.data.checkout.result?.billingAddress;\n }\n\n @computed private get shippingAddress(): Address | undefined {\n return this.props.data.checkout.result?.shippingAddress;\n }\n\n @computed private get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState?.loyaltyAmount ? checkoutState.loyaltyAmount : 0;\n }\n\n @computed private 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 return count + (giftCard.Balance || 0);\n }, 0);\n }\n\n @computed private get getCustomerAccountAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n const defaultAmount = 0;\n\n return checkoutState?.customerAccountAmount ?? defaultAmount;\n }\n\n @computed private get shouldPaidByCard(): boolean {\n const {\n data: { checkout },\n config\n } = this.props;\n if (!checkout.result) {\n return false;\n }\n\n const checkoutResult = checkout.result;\n const cart = checkoutResult.checkoutCart.cart;\n if (!cart || !cart.CartLines || cart.CartLines.length === 0) {\n return false;\n }\n\n const { paymentTenderType, tokenizedPaymentCard } = checkoutResult;\n const isPaidByOtherPaymentSource = config.paymenTenderType !== paymentTenderType && tokenizedPaymentCard;\n\n // Use payment card when it is not free or gift card balance + Loyalty amount can not cover the total amount\n const amountDue = (cart.TotalAmount || 0) - this.getGiftCardTotalAmount - this.getLoyaltyAmount - this.getCustomerAccountAmount;\n\n return amountDue > 0 && !isPaidByOtherPaymentSource;\n }\n\n @computed private get isBillingAddressRequried(): boolean {\n return (\n this.shouldPaidByCard &&\n (!this.props.data.checkout?.result?.isPaymentVerificationRedirection ||\n !!this.props.data.checkout?.result?.isCheckoutCallFailed)\n );\n }\n\n @computed private get _shouldHideBillingAddressForOBO(): boolean {\n return Msdyn365.isOboRequest(this.props.context.request) && EnabledPaymentsForOBO.PaymentInstrument === 0;\n }\n\n /**\n * On submit address.\n */\n private readonly _onSubmitAddress = (): void => {\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\n this.props.moduleState.setHasError(true);\n\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n this.props.data.checkout.result?.isPaymentSectionContainerHasError\n ) {\n this.props.data.checkout.result.updateIsBillingAddressHasError({ newIsBillingAddressHasError: true });\n }\n\n return;\n }\n\n this._setBillingAddress(this.addUpdateAddress);\n this._updateCurrentOperation(AddressOperation.Show, this.addUpdateAddress);\n this._updateModuleState();\n };\n\n /**\n * On submit.\n */\n private readonly onSubmit = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this.props.telemetry.information('Billing address submit for Add or Update operation.');\n this._onSubmitAddress();\n break;\n case AddressOperation.Show:\n this.props.telemetry.information('Billing address submit for Show operation.');\n if (this.selectedAddress) {\n this._setBillingAddress(this.selectedAddress);\n this._updateCurrentOperation(AddressOperation.Show, this.selectedAddress);\n this._updateModuleState();\n }\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n /**\n * On cancel.\n */\n private readonly onCancel = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this.props.telemetry.information('Billing address cancel for Add or Update operation.');\n this._resetView();\n this._clearAddressFields();\n break;\n case AddressOperation.Show:\n this.props.telemetry.information('Billing address cancel for Show operation.');\n this._resetView();\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n /**\n * On edit.\n */\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Billing address onEdit is called.');\n\n if (this.isBillingAddressSameAsShipping && this.shippingAddress && this.isCartContainsItemsForShipping) {\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n } else {\n this._updateCurrentOperation(AddressOperation.Add, this.billingAddress);\n }\n this.props.moduleState.onUpdating();\n };\n\n /**\n * Sets billing address.\n * @param address - The address.\n */\n private readonly _setBillingAddress = (address: Address): void => {\n if (this.props.data.checkout.result) {\n const newBillingAddress = { ...address };\n\n if (address.ThreeLetterISORegionName && !newBillingAddress.TwoLetterISORegionName) {\n newBillingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(address.ThreeLetterISORegionName);\n }\n\n this.props.data.checkout.result.updateBillingAddress({\n newBillingAddress,\n additionalProperties: {\n isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShipping\n }\n });\n }\n };\n\n /**\n * Reset view.\n */\n private readonly _resetView = () => {\n this._updateCurrentOperation(AddressOperation.Show, this.billingAddress);\n this._updateModuleState();\n };\n\n /**\n * Update current operation.\n * @param operation - Address operation\n * @param selectedAddress - The selected address.\n */\n private readonly _updateCurrentOperation = (operation: AddressOperation, selectedAddress?: Address) => {\n this.currentOperation = operation;\n this.selectedAddress = selectedAddress;\n\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n this.addUpdateAddress = { ...this.selectedAddress } || {};\n set(this.addUpdateAddress, {\n ThreeLetterISORegionName: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n });\n set(this.addUpdateAddress, { AddressTypeValue: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType });\n }\n };\n\n /**\n * Updates the module state.\n */\n private readonly _updateModuleState = () => {\n if (this.currentOperation === AddressOperation.Show) {\n this.props.moduleState.onReady();\n } else {\n this.props.moduleState.onUpdating();\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\nexport default CheckoutBillingAddress;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageProps, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICheckoutShippingAddressResources } from '../checkout-shipping-address.props.autogenerated';\n\n/**\n * The cartline product interface.\n */\nexport interface ICartLineWithProduct {\n cartLine: CartLine;\n product?: SimpleProduct;\n}\n\n/**\n * The checkout shipping cartline interface.\n */\nexport interface ICheckoutShippingCartLineInfo {\n lineId: string;\n imageProps: IImageProps;\n quantity: number;\n shippingAddressId?: number;\n}\n\n/**\n * The checkout shipping cartline props.\n */\nexport interface ICheckoutShippingCartLinesProps {\n moduleClassName: string;\n cartLines: ICheckoutShippingCartLineInfo[];\n title: string;\n itemTitle: string;\n resources: ICheckoutShippingAddressResources;\n isMultipleAddressShippingEnabled?: boolean;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Following as per module\nexport const CheckoutPickupCartLines: React.FC = ({\n moduleClassName,\n cartLines,\n title,\n itemTitle,\n resources,\n isMultipleAddressShippingEnabled = false\n}) => {\n const context = ({\n gridSettings: {\n xs: { w: 767 },\n sm: { w: 991 },\n md: { w: 1199 },\n lg: { w: 1599 },\n xl: { w: 1600 }\n }\n } as unknown) as IRequestContext;\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\n const isMobileView = isMobileCheck === 'xs' || isMobileCheck === 'sm';\n\n if (!ArrayExtensions.hasElements(cartLines)) {\n return null;\n }\n\n const renderShipMultiAddressView = isMultipleAddressShippingEnabled;\n const quantity = 1;\n return renderShipMultiAddressView ? (\n
{resources.headingAfterMultiSelectAddressSelect}
\n ) : (\n
\n
\n
{title}
\n
{itemTitle}
\n
\n
\n {cartLines.map((cartLine: ICheckoutShippingCartLineInfo) => {\n const isShowQty = cartLine.quantity > quantity;\n let className = `${moduleClassName}__group-images-lines-product`;\n const role = 'text';\n if (isShowQty) {\n className = classnames(className, ' product-image-wide');\n }\n return (\n
\n \n {isMobileView\n ? isShowQty && (\n \n {cartLine.quantity}\n
\n )\n : isShowQty && (\n
\n )}\n {!isMobileView && isShowQty && (\n \n {format(resources.productQuantityInfo, cartLine.quantity, cartLine.imageProps.altText)}\n \n )}\n
\n );\n })}\n \n \n );\n};\n\n/**\n * The checkout shipping cartline image settings.\n */\nexport const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\n },\n lazyload: true,\n quality: 80\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport {\n Address,\n AddressPurpose,\n CartLine,\n CountryRegionInfo,\n SimpleProduct,\n StateProvinceInfo,\n TenderLine,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions,\n getFallbackImageUrl,\n getSimpleProducts,\n ObjectExtensions,\n ProductInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, set } from 'mobx';\nimport { observer } from 'mobx-react';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { CheckoutModule, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport { AutoSuggest } from '../../common/address-autosuggest';\nimport { IAutoSuggestOptions } from '../../common/address-autosuggest.data';\nimport { AddressCommon } from '../../common/address-common';\nimport { AddressFormat } from '../../common/address-format';\nimport { AddressItemType } from '../../common/address-format.data';\nimport { AddressMetaData } from '../../common/address-meta-data';\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { AddressSelect, IAddressSelectProps } from '../../common/components/address-select';\nimport { AddressShow, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutShippingAddressData } from './checkout-shipping-address.data';\nimport { ICheckoutShippingAddressProps } from './checkout-shipping-address.props.autogenerated';\nimport {\n CheckoutPickupCartLines,\n defaultImageSettings,\n ICartLineWithProduct,\n ICheckoutShippingCartLineInfo,\n ICheckoutShippingCartLinesProps\n} from './components/checkout-shipping-cartlines-images';\nimport { ErrorComponent } from '../../common/components/address-error-alert';\nimport { focusOnCheckoutError } from '../../checkout-errors/checkout-errors';\nimport { AddressShipMultiple, IShipMultipleAddressesViewProps } from '../../common/components/address-ship-multiple';\nimport { IShipMultipleAddressesLineViewProps } from '../../common/components/address-ship-multiple-lines';\n\n/**\n * The checkout address props interface.\n */\nexport interface ICheckoutAddressProps extends ICheckoutShippingAddressProps, IModuleStateProps {}\n\n/**\n * The checkout shipping address view state.\n */\nexport interface ICheckoutShippingAddressViewState {\n isShowAddress: boolean;\n isShowAddresList: boolean;\n isShowAddOrUpdateAddress: boolean;\n isShowShipMultipleAddress?: boolean;\n}\n\n/**\n * The checkout shipping address state.\n */\nexport interface ICheckoutAddresState {\n shippingGroups: ICartLineWithProduct[];\n shippingGroupsBuffer: ICartLineWithProduct[];\n selectedShippingLines: IShipMultipleAddressesLineViewModel[];\n errorMessage?: string;\n}\n\n/**\n * The checkout shipping address view props.\n */\nexport interface ICheckoutShippingAddressViewProps extends ICheckoutAddressProps {\n className: string;\n currentOperation: AddressOperation;\n selectedAddress?: Address;\n addUpdateAddress: Address;\n addressListSelectedAddress: Address;\n countryRegionId: string;\n stateProvinceInfo?: StateProvinceInfo[];\n customerAddresses: Address[];\n validationError: object;\n addressActionResponse?: IAddressResponse;\n viewState: ICheckoutShippingAddressViewState;\n CheckoutShippingAddress: IModuleProps;\n isUpdating: boolean;\n hasError: boolean;\n showAddress: IAddressShowProps;\n showAddOrUpdateAddress: IAddressAddUpdateProps;\n cartLineImages?: React.ReactNode;\n showAddressSelect: IAddressSelectProps;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n showShipMultipleAddresses?: IShipMultipleAddressesViewProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n orderLines?: IShipMultipleAddressesLineViewProps[];\n showAddOrUpdateAddressHandler?(onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps;\n showAddressSelectHandler?(\n onShipMultipleAddressesHandler?: () => void,\n onAddAddressHandler?: () => void,\n onSaveHandler?: () => void,\n onCancelHandler?: () => void\n ): IAddressSelectProps;\n}\n\nexport interface IShipMultipleAddressesLineViewModel {\n isChecked: boolean;\n cartLine: CartLine;\n}\n\n/**\n * IExpressPaymentDetail interface.\n */\ninterface IExpressPaymentDetails {\n email?: string;\n tenderLine?: TenderLine;\n tokenizedPaymentCard?: TokenizedPaymentCard;\n paymentTenderType?: string;\n address?: Address;\n isExpressCheckoutAppliedInCartPage: boolean;\n isExpressAddressAppliedInCartPage?: boolean;\n}\n\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n *\n * Address component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutShippingAddress extends React.Component {\n @observable private currentOperation: AddressOperation;\n\n @observable private selectedAddress?: Address;\n\n @observable private addUpdateAddress: Address;\n\n @observable private countryRegionId: string = 'USA';\n\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n\n @observable private customerAddresses: Address[] = [];\n\n @observable private validationError: object;\n\n @observable private addressActionResponse?: IAddressResponse;\n\n @observable private isUpdating?: boolean;\n\n @observable private hasError?: boolean;\n\n @observable private addressListSelectedAddress: Address = {};\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly addressCommon: AddressCommon;\n\n private addressFormat!: AddressFormat;\n\n private countryRegions: CountryRegionInfo[] = [];\n\n private addressPurposes: AddressPurpose[] = [];\n\n private readonly resources: IAddressResource;\n\n private readonly defaultAddressType: number = 6; // Default to Home\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private autoSuggest?: AutoSuggest;\n\n private readonly multiplePickupStoreSwitchName: string = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public constructor(props: ICheckoutAddressProps) {\n super(props);\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 this.state = { shippingGroups: [], shippingGroupsBuffer: [], selectedShippingLines: [] };\n const { context, data, resources, telemetry } = this.props;\n\n this.addUpdateAddress = {};\n this.resources = resources;\n this.currentOperation = AddressOperation.List;\n this.countryRegions = data.countryRegions.result || [];\n this.addressPurposes = data.addressPurposes.result || [];\n this.customerAddresses = data.address.result || [];\n this.stateProvinceInfo = data.countryStates.result || [];\n this.addressCommon = new AddressCommon(context, resources, telemetry);\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\n this.addressPurposes\n );\n this.validationError = {};\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\n feature => feature.Name === this.multiplePickupStoreSwitchName\n )?.IsEnabled;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled, autoSuggestOptions },\n resources\n } = this.props;\n\n // Initializing data props\n this._dataInitialize(this.props);\n\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\n this.addressPurposes\n );\n\n this.props.data.checkout.then(() => {\n this._setDefaultCountryRegionId();\n this._initModuleState();\n });\n\n reaction(\n () => this.countryRegionId,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.currentOperation,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddressFromExpressCheckout,\n () => {\n if (!this.expressPaymentDetailsFromCartPage && this._canShip()) {\n let address = this.props.data.checkout.result?.shippingAddressFromExpressCheckout;\n\n if (address?.TwoLetterISORegionName) {\n const threeLetterIsoRegionName = this.getThreeLetterIsoRegionName(address.TwoLetterISORegionName);\n\n address = { ...address, ThreeLetterISORegionName: threeLetterIsoRegionName };\n\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\n this._onCountryChange(threeLetterIsoRegionName);\n }\n }\n\n this._updateCurrentOperation(AddressOperation.Add, address);\n this._onAddressAddUpdateSubmit();\n }\n }\n );\n\n if (autoSuggestionEnabled) {\n if (channel && !channel.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n return;\n }\n\n if (channel && !channel.BingMapsEnabled) {\n telemetry.error('Map is disabled from HQ.');\n return;\n }\n\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\n this.autoSuggest = new AutoSuggest(\n telemetry,\n options,\n channel?.BingMapsApiKey,\n channel?.ChannelCountryRegionISOCode,\n channel?.DefaultLanguageId\n );\n\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\n if (\n this.props.data.storeSelectorStateManager.result &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n await this.autoSuggest._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n\n reaction(\n () =>\n this.props.data.storeSelectorStateManager.result?.loadMapApi &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\n async () => {\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\n async () => {\n await this._attachMapAutoSuggest();\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.CheckoutShippingAddress &&\n checkoutError.errorMessage\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutShippingAddress) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n await this._initPickupGroup();\n }\n\n public async componentDidUpdate(): Promise {\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\n await this._attachMapAutoSuggest();\n }\n } else {\n this.autoSuggest?.disposeAutoSuggest();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutAddressProps, nextState: ICheckoutAddresState): 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 if (!this._canShip()) {\n return null;\n }\n\n const {\n config,\n context,\n renderView,\n resources,\n moduleState: { hasError }\n } = this.props;\n const { headingImages, itemsText, singleItemText, errorMessageTitle } = resources;\n const { imageSettings } = config;\n\n // Line images\n const cartLines: ICheckoutShippingCartLineInfo[] = this.state.shippingGroups\n .filter(x => !ObjectExtensions.isNullOrUndefined(x.product))\n .map(line => ({\n lineId: line.cartLine.LineId ?? '',\n imageProps: {\n requestContext: context.actionContext.requestContext,\n className: 'ms-checkout-shipping-address__group-images-lines-line-image',\n altText: line.product?.Name,\n src: line.product?.PrimaryImageUrl ?? '',\n fallBackSrc: getFallbackImageUrl(\n line.product?.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n ),\n gridSettings: context.request.gridSettings!,\n imageSettings: imageSettings ?? defaultImageSettings,\n loadFailureBehavior: 'empty'\n },\n quantity: line.cartLine.Quantity ?? 0,\n shippingAddressId: line.cartLine.ShippingAddress?.RecordId ?? 0\n }));\n\n const numberOfCartLines = this._countItems(cartLines);\n const itemText = numberOfCartLines > 1 ? itemsText : singleItemText;\n const itemTitle = `(${format(itemText, numberOfCartLines)})`;\n\n const lineImageProps: ICheckoutShippingCartLinesProps = {\n moduleClassName: 'ms-checkout-shipping-address',\n cartLines: cartLines.filter(x => !ObjectExtensions.isNullOrUndefined(x)),\n itemTitle: itemTitle,\n title: headingImages,\n resources: this.props.resources,\n isMultipleAddressShippingEnabled: config.multipleAddressShippingEnabled\n };\n\n const cartLineImages: React.ReactNode = ;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { featureState } = this.props.data;\n const isRetailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const errorMessage = this.state.errorMessage;\n\n const viewProps = {\n ...this.props,\n currentOperation: this.currentOperation,\n selectedAddress: this.selectedAddress,\n addUpdateAddress: this.addUpdateAddress,\n addressListSelectedAddress: this.addressListSelectedAddress,\n countryRegionId: this.countryRegionId,\n stateProvinceInfo: this.stateProvinceInfo,\n customerAddresses: this.customerAddresses,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n isUpdating: this.isUpdating,\n hasError: this.hasError,\n className: config.className,\n viewState: {\n isShowAddress: this.currentOperation === AddressOperation.Show && this.selectedAddress,\n isShowAddresList: this.currentOperation === AddressOperation.List && this.customerAddresses.length > 0,\n isShowAddOrUpdateAddress:\n this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update,\n isShowShipMultipleAddress: this.currentOperation === AddressOperation.Multiple\n },\n CheckoutShippingAddress: {\n moduleProps: this.props,\n className: classnames('ms-checkout-shipping-address', config.className)\n },\n showAddress: this._renderShowAddress(),\n alert: hasError && errorMessage && ,\n checkoutErrorRef: this.checkoutErrorRef,\n\n /**\n * Show address select.\n * @param onShipMultipleAddressesHandler - On ship to multiple addresses click function.\n * @param onAddAddressHandler - On add address click function.\n * @param onSaveHandler - On save click function.\n * @param onCancelHandler - On cancel click function.\n * @returns - Renders select address.\n */\n showAddressSelectHandler: (\n onShipMultipleAddressesHandler?: () => void,\n onAddAddressHandler?: () => void,\n onSaveHandler?: () => void,\n onCancelHandler?: () => void\n ) => this._renderSelectAddress(onShipMultipleAddressesHandler, onAddAddressHandler, onSaveHandler, onCancelHandler),\n\n /**\n * Show ship multiple addresses.\n * @param onSaveHandler - On save click function.\n * @param onCancelHandler - On cancel click function.\n * @returns - Renders ship multiple addresses.\n */\n showShipMultipleAddressesHandler: (onSaveHandler?: () => void, onCancelHandler?: () => void) =>\n this._renderShipMultipleAddresses(onSaveHandler, onCancelHandler),\n showShipMultipleAddresses: this._renderShipMultipleAddresses(),\n\n /**\n * Show add/update address.\n * @param onSaveHandler - On save click function.\n * @param onCancelHandler - On cancel click function.\n * @returns - Renders add/update address.\n */\n showAddOrUpdateAddressHandler: (onSaveHandler?: () => void, onCancelHandler?: () => void) =>\n this._renderAddOrUpdateAddress(onSaveHandler, onCancelHandler),\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\n cartLineImages: isRetailMultiplePickUpOptionEnabled ? cartLineImages : undefined,\n showAddressSelect: this._renderSelectAddress()\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect = (line: IShipMultipleAddressesLineViewModel, isChecked: boolean): void => {\n line.isChecked = isChecked;\n\n if (this.state.selectedShippingLines) {\n const updated =\n this.state.selectedShippingLines.map(shippingLine => {\n // @ts-ignore\n if (shippingLine.cartLine?.cartLine?.LineId === line.cartLine.LineId) {\n shippingLine.isChecked = isChecked;\n }\n return shippingLine;\n }) || [];\n\n this.setState({\n selectedShippingLines: updated\n });\n } else {\n console.error(`Shipping lines are invalid.`);\n }\n };\n\n public onSelectAll(isChecked: boolean): void {\n if (this.state.selectedShippingLines) {\n const updated =\n this.state.selectedShippingLines.map(shippingLine => {\n shippingLine.isChecked = isChecked;\n return shippingLine;\n }) || [];\n\n this.setState({\n selectedShippingLines: updated\n });\n } else {\n console.error(`Shipping lines are undefined.`);\n }\n }\n\n public onShippingAddressChange = (shippingLine: CartLine, event: React.ChangeEvent): void => {\n const addressRecordId = event.currentTarget.value;\n const selectedAddress = this.customerAddresses.find(address => (address.RecordId || '').toString() === addressRecordId);\n if (this.state.shippingGroups) {\n const updated = this.state.shippingGroups.map(line => {\n if (line.cartLine.LineId === shippingLine.LineId) {\n const updatedCartLine = {\n ...line.cartLine,\n ShippingAddress: selectedAddress\n };\n return {\n ...line,\n cartLine: updatedCartLine\n };\n }\n return line;\n });\n\n this.setState({\n shippingGroups: updated\n });\n }\n };\n\n public updateIndividualAddresses = (shippingLine: CartLine, event: React.ChangeEvent): void => {\n const addressRecordId = event.currentTarget.value;\n const selectedAddress = this.customerAddresses.find(address => (address.RecordId || '').toString() === addressRecordId);\n if (this.state.shippingGroups) {\n this.setState(prevState => {\n const updated = prevState.shippingGroups.map(line => {\n if (line.cartLine.LineId === shippingLine.LineId) {\n const updatedCartLine = {\n ...line.cartLine,\n ShippingAddress: selectedAddress\n };\n return {\n ...line,\n cartLine: updatedCartLine\n };\n }\n return line;\n });\n\n return {\n shippingGroups: updated\n };\n });\n }\n };\n\n public onBulkShippingAddressChange = (event: React.ChangeEvent): void => {\n if (this.state.selectedShippingLines && this.state.shippingGroups) {\n this.state.selectedShippingLines.forEach((shippingLine, index) => {\n if (shippingLine.isChecked) {\n const cartline = this.state.shippingGroups.find(\n // @ts-ignore\n line => line.cartLine.LineId === shippingLine.cartLine?.cartLine?.LineId\n );\n\n if (cartline) {\n this.updateIndividualAddresses(cartline.cartLine, event);\n }\n }\n });\n } else {\n console.error(`Shipping lines are undefined.`);\n }\n };\n\n /**\n * Initialize pickup group.\n */\n @action\n private readonly _initPickupGroup = async (): Promise => {\n const pickupCartLines: CartLine[] = this._getCartLinesforDelivery();\n const cartLines: ICartLineWithProduct[] = [];\n\n try {\n const products = await this._getProductsByCartLines(\n this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0,\n pickupCartLines\n );\n for (const line of pickupCartLines) {\n const product: SimpleProduct | undefined = products.find(x => x.RecordId === line.ProductId);\n cartLines.push({ cartLine: line, product });\n }\n this.setState({ shippingGroups: cartLines });\n this.setState({ shippingGroupsBuffer: cartLines });\n\n const initialShippingLineSelection = cartLines.map(cartLine => ({\n isChecked: false,\n cartLine: cartLine as CartLine\n }));\n this.setState({ selectedShippingLines: initialShippingLineSelection });\n } catch (error) {\n // @ts-ignore\n this.props.telemetry.error(error);\n this.setState({ shippingGroups: [] });\n this.setState({ shippingGroupsBuffer: [] });\n this.setState({ selectedShippingLines: [] });\n }\n };\n\n /**\n * On suggestion selected.\n * @param result - Suggestion result interface.\n */\n @action\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n this._clearAddressFields();\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\n const timeout = 0;\n set(this.addUpdateAddress, { Street: '' });\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\n set(this.addUpdateAddress, { CountyName: address.CountyName });\n set(this.addUpdateAddress, { City: address.City });\n set(this.addUpdateAddress, { State: address.State });\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\n\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\n setTimeout(() => {\n set(this.addUpdateAddress, { Street: address.Street });\n }, timeout);\n };\n\n /**\n * Method to clear address fields.\n */\n @action\n private readonly _clearAddressFields = (): void => {\n const addressFormatItem = this.addressFormat.getAddressFormat(\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n );\n for (const formatAddress of addressFormatItem) {\n if (\n this.addUpdateAddress[formatAddress.name] !== undefined &&\n !this.autoSuggest?.excludedAddressFields.includes(formatAddress.name)\n ) {\n this.addressFormat[formatAddress.name] = '';\n }\n }\n this._clearValidation();\n };\n\n /**\n * Method to clear validation.\n */\n @action\n private readonly _clearValidation = (): void => {\n this.validationError = {};\n };\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\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) as IExpressPaymentDetails) : null;\n }\n\n /**\n * Method data initialization.\n * @param props -The checkout address properties.\n */\n private readonly _dataInitialize = (props: ICheckoutAddressProps): void => {\n const { data } = props;\n\n reaction(\n () => data.countryRegions.result,\n () => {\n this.countryRegions = data.countryRegions.result ?? [];\n }\n );\n\n reaction(\n () => data.addressPurposes.result,\n () => {\n this.addressPurposes = data.addressPurposes.result ?? [];\n }\n );\n\n reaction(\n () => data.address.result,\n () => {\n this.customerAddresses = data.address.result ?? [];\n }\n );\n\n reaction(\n () => data.countryStates.result,\n () => {\n this.stateProvinceInfo = data.countryStates.result ?? [];\n }\n );\n\n reaction(\n () => data.featureState.result,\n () => {\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\n feature => feature.Name === this.multiplePickupStoreSwitchName\n )?.IsEnabled;\n }\n );\n };\n\n /**\n * Method to get cart lines for delivery.\n * @returns The cart line collection.\n */\n private readonly _getCartLinesforDelivery = (): CartLine[] => {\n return this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(line => this._isDelivery(line)) ?? [];\n };\n\n /**\n * Method to check cart line for delivery.\n * @param line -The cart line.\n * @returns True/false as per cart line delivery mode.\n */\n private readonly _isDelivery = (line: CartLine): boolean => {\n return this._isNotPickupMode(line.DeliveryMode) && (line.FulfillmentStoreId === undefined || line.FulfillmentStoreId === '');\n };\n\n /**\n * Method to check cart line for delivery.\n * @param deliveryMode -The delivery mode.\n * @returns True/false as per cart line delivery mode.\n */\n private readonly _isNotPickupMode = (deliveryMode: string | undefined): boolean => {\n const pickupDeliveryModeCode = this.props.context.request.channel?.PickupDeliveryModeCode;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props.data;\n const retailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\n const pickupDeliveryMode = channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.some(\n pickupMode => pickupMode !== deliveryMode\n );\n return pickupDeliveryMode !== undefined ? pickupDeliveryMode : false;\n }\n return deliveryMode !== undefined && pickupDeliveryModeCode !== undefined && deliveryMode !== pickupDeliveryModeCode;\n };\n\n /**\n * Method to check cart line for delivery.\n * @param channelId - The channelId.\n * @param cartLines - Cart line collections.\n * @returns Collection of SimpleProduct.\n */\n private readonly _getProductsByCartLines = async (channelId: number, cartLines: CartLine[]): Promise => {\n const actionContext = this.props.context.actionContext;\n const productInputs = cartLines\n .filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId))\n .map(\n line =>\n new ProductInput(\n line.ProductId || 0,\n actionContext.requestContext.apiSettings,\n channelId,\n undefined,\n actionContext.requestContext,\n line.CatalogId || 0\n )\n );\n return getSimpleProducts(productInputs, actionContext);\n };\n\n /**\n * Method to render ship multiple addresses.\n * @param onSaveHandler -- Handles onsave functionality.\n * @param onCancelHandler -- Handles oncancel functionality.\n */\n private readonly _renderShipMultipleAddresses = (onSaveHandler?: () => void, onCancelHandler?: () => void) => {\n const { config, context } = this.props;\n const { imageSettings } = config;\n\n // Line images\n const cartlineImages: ICheckoutShippingCartLineInfo[] = this.state.shippingGroups\n .filter(x => !ObjectExtensions.isNullOrUndefined(x.product))\n .map(line => ({\n lineId: line.cartLine.LineId ?? '',\n imageProps: {\n requestContext: context.actionContext.requestContext,\n className: 'ms-checkout-shipping-address__group-images-lines-line-image',\n altText: line.product?.Name,\n src: line.product?.PrimaryImageUrl ?? '',\n fallBackSrc: getFallbackImageUrl(\n line.product?.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n ),\n gridSettings: context.request.gridSettings!,\n imageSettings: imageSettings ?? defaultImageSettings,\n loadFailureBehavior: 'empty'\n },\n quantity: line.cartLine.Quantity ?? 0\n }));\n\n /**\n * On Cancel Button Function.\n */\n const onCancelButtonHandler = () => {\n this._resetView();\n onCancelHandler?.();\n };\n\n return AddressShipMultiple({\n /**\n * On Save Function.\n */\n onSave: () => {\n this.onSubmit();\n onSaveHandler?.();\n },\n\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => {} : onCancelButtonHandler,\n\n onSelect: this.onSelect.bind(this),\n\n onSelectAll: this.onSelectAll.bind(this),\n\n onClear: () => {\n this.onSelectAll(false);\n },\n\n onShippingAddressChange: this.onShippingAddressChange.bind(this),\n\n onBulkShippingAddressChange: this.onBulkShippingAddressChange.bind(this),\n\n /**\n * On Ship to Single Address Function.\n */\n onShipSingleAddress: () => {\n const resetSelectedShippingLines = this.state.selectedShippingLines\n ? this.state.selectedShippingLines.map(shippingLine => ({\n isChecked: false,\n cartLine: shippingLine.cartLine\n }))\n : [];\n this.setState({\n selectedShippingLines: resetSelectedShippingLines,\n shippingGroups: this.state.shippingGroupsBuffer\n });\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\n this._updateModuleState();\n },\n\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\n\n shippingLines: this.state.shippingGroups,\n\n shippingLineImages: cartlineImages,\n\n selectedShippingLines: this.state.selectedShippingLines ? this.state.selectedShippingLines : [],\n\n customerAddresses: this.customerAddresses,\n\n context: this.props.context,\n\n currencyCode: this.currencyCode,\n\n moduleId: this.props.id,\n\n moduleTypeName: this.props.typeName,\n\n resources: this.resources,\n\n telemetryContent: this.telemetryContent,\n\n isMobile: this.isMobile\n });\n };\n\n /**\n * Method to render add/update address.\n * @param onSaveHandler -- Handles onsave functionality.\n * @param onCancelHandler -- Handles oncancel functionality.\n * @returns Address app/update props.\n */\n private readonly _renderAddOrUpdateAddress = (onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps => {\n const addressFormat =\n this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow()\n ? this.addressFormat\n : this.addressFormat;\n\n /**\n * On Cancel Button Function.\n */\n const onCancelButtonHandler = () => {\n this._resetView();\n onCancelHandler?.();\n };\n return AddressAddUpdate({\n isUpdating: this.isUpdating,\n resources: this.resources,\n addressType: AddressType.Shipping,\n addressFormat: addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\n defaultCountryRegionId: this.countryRegionId,\n defaultAddressType: this.defaultAddressType,\n selectedAddress: this.addUpdateAddress,\n validationError: this.validationError,\n hasError: this.hasError,\n addressActionResponse: this.addressActionResponse,\n telemetryContent: this.telemetryContent,\n dropdownDisplayData: addressFormat.getPrefilledAddressDropdownData(\n this.resources.addressStateDefaultSelectionText,\n this.stateProvinceInfo\n ),\n onInputChange: this._onAddressAddUpdateInputChange,\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\n\n /**\n * On Save Function.\n */\n onSave: () => {\n this.onSubmit();\n onSaveHandler?.();\n },\n\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => {} : onCancelButtonHandler\n });\n };\n\n /**\n * Method to render select address.\n * @param onShipMultipleAddressesHandler - To handle ship to multiple addresses button click.\n * @param onAddAddressHandler - To handle add address button click.\n * @param onSaveHandler - To handle save button click.\n * @param onCancelHandler - To handle cancel button click.\n * @returns Select address props.\n */\n private readonly _renderSelectAddress = (\n onShipMultipleAddressesHandler?: () => void,\n onAddAddressHandler?: () => void,\n onSaveHandler?: () => void,\n onCancelHandler?: () => void\n ): IAddressSelectProps => {\n /**\n * On Cancel Button Function.\n */\n const onCancelButtonHandler = () => {\n this._resetView();\n onCancelHandler?.();\n };\n return AddressSelect({\n addressFormat: this.addressFormat,\n addresses: this.customerAddresses,\n resources: this.resources,\n addressPurposes: this.addressPurposes,\n selectedAddress: this.addressListSelectedAddress,\n onAddressOptionChange: this._onAddressOptionChange,\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\n telemetryContent: this.telemetryContent,\n\n /**\n * On Ship to Multiple Addresses Function.\n */\n onShipMultipleAddresses: () => {\n this._goToShipMultipleAddresses();\n onShipMultipleAddressesHandler?.();\n },\n\n /**\n * On Add Address Function.\n */\n onAddAddress: () => {\n this._goToAddAddress();\n onAddAddressHandler?.();\n },\n\n /**\n * On Save Function.\n */\n onSave: () => {\n this._onSelectAddress();\n onSaveHandler?.();\n },\n\n onCancel: !this.selectedAddress ? () => {} : onCancelButtonHandler,\n\n multipleAddressShippingEnabled: this.props.config.multipleAddressShippingEnabled\n });\n };\n\n /**\n * Method to render show address.\n * @returns Show address props.\n */\n private _renderShowAddress(): IAddressShowProps | null {\n if (this.selectedAddress) {\n return AddressShow({\n address: this.selectedAddress,\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || ''),\n addressPurposes: this.addressPurposes\n });\n }\n\n return null;\n }\n\n /**\n * Method to render map auto suggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded) {\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\n }\n };\n\n /**\n * Method gets called on address option change.\n * @param event - To get current option.\n */\n private readonly _onAddressOptionChange = (event: React.ChangeEvent) => {\n const addressRecordId = event.currentTarget.value;\n const selectedAddress = this.customerAddresses.find(address => (address.RecordId || '').toString() === addressRecordId);\n if (selectedAddress) {\n this.addressListSelectedAddress = selectedAddress;\n }\n };\n\n /**\n * Method to render map auto suggest.\n * @param name - Address name field.\n * @param value - Address name value field.\n */\n private readonly onAddressAddUpdate = (name: string, value: string | boolean) => {\n set(this.addUpdateAddress, { [name]: value });\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\n };\n\n /**\n * Method to get called on address update change.\n * @param event - Input element.\n */\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\n if (event.target.type === 'checkbox') {\n this.onAddressAddUpdate(event.target.name, event.target.checked);\n } else {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n this.onAddressAddUpdate(event.target.name, value);\n }\n };\n\n /**\n * Method to get called on address update dropdown change.\n * @param event - Select element.\n */\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent): void => {\n this.onAddressAddUpdate(event.target.name, event.target.value);\n\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\n this._onCountryChange(event.target.value);\n }\n };\n\n /**\n * Method to get called on address update submit.\n */\n private readonly _onAddressAddUpdateSubmit = (): void => {\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\n return;\n }\n\n let response: Promise;\n if (this.addressCommon.isAuthenticatedFlow() && this._isNewAddress(this.addUpdateAddress)) {\n response =\n this.currentOperation === AddressOperation.Update\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\n : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\n } else {\n response = Promise.resolve({ address: this.addUpdateAddress });\n }\n\n this.isUpdating = true;\n this._updateModuleState();\n\n response.then(\n (result: IAddressResponse) => {\n this.isUpdating = false;\n\n if (result.address) {\n this.hasError = false;\n this._clearError();\n if (result.customerAddresses) {\n this._onAddOrUpdateSuccess({ customerAddresses: result.customerAddresses, address: result.address });\n } else {\n this._onAddOrUpdateSuccess({ address: result.address });\n }\n } else {\n this.hasError = true;\n this.addressActionResponse = result;\n this._updateModuleState();\n }\n },\n () => {\n this.hasError = true;\n this.isUpdating = false;\n this._updateModuleState();\n }\n );\n };\n\n /**\n * Method to get called on country change.\n * @param countryRegionId - Country region id.\n */\n private readonly _onCountryChange = (countryRegionId: string) => {\n this.countryRegionId = countryRegionId;\n const twoLetterIsoRegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\n set(this.addUpdateAddress, { TwoLetterISORegionName: twoLetterIsoRegionName });\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterIsoRegionName);\n this._clearAddressFields();\n };\n\n /**\n * Method to get all address format exclude list.\n * @returns Collection of address items.\n */\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\n const { config } = this.props;\n const addressFormatExcludeList: AddressItemType[] = [];\n\n if (!config.showAddressType) {\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\n }\n\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\n\n return addressFormatExcludeList;\n };\n\n /**\n * Method to get all state/provinces.\n */\n private readonly _getStateProvinces = (): void => {\n if (\n !this.countryRegionId ||\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n return;\n }\n\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\n\n // Reset state if selected state not found in the list.\n if (!stateInfo) {\n set(this.addUpdateAddress, { State: '' });\n }\n\n this.stateProvinceInfo = result;\n });\n };\n\n /**\n * Method to set default country region id.\n */\n private _setDefaultCountryRegionId(): void {\n const { request } = this.props.context;\n const market = request.channel?.ChannelCountryRegionISOCode;\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\n }\n\n /**\n * Method to get default address region id.\n * @returns - Address object from existing addresses.\n */\n private readonly _getDefaultAddress = (): Address | undefined => {\n if (this.customerAddresses) {\n const primaryAddress = this.customerAddresses.find((address: Address) => address.IsPrimary);\n return primaryAddress || (this.customerAddresses.length > 0 ? this.customerAddresses[0] : undefined);\n }\n return undefined;\n };\n\n /**\n * Method to get address from express payment details from cart page.\n * @returns - Address.\n */\n private readonly _getAddressFromCartExpressPaymentDetails = (): Address | undefined => {\n if (this.expressPaymentDetailsFromCartPage) {\n const { tokenizedPaymentCard, address, isExpressAddressAppliedInCartPage } = this.expressPaymentDetailsFromCartPage;\n\n let addressFromCartExpress: Address | undefined;\n\n if (isExpressAddressAppliedInCartPage) {\n addressFromCartExpress = address ? this.getExpressAddress(address) : undefined;\n } else {\n addressFromCartExpress = tokenizedPaymentCard ? this.getAddressFromTokenizedPaymentCard(tokenizedPaymentCard) : undefined;\n }\n\n return addressFromCartExpress;\n }\n return undefined;\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 twoLetterIsoRegionName = tokenizedPaymentCard.Country;\n\n const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\n\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\n this._onCountryChange(threeLetterIsoRegionName);\n }\n\n const address: Address = {\n TwoLetterISORegionName: twoLetterIsoRegionName,\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 ThreeLetterISORegionName: threeLetterIsoRegionName,\n AddressTypeValue: this.defaultAddressType\n };\n\n return address;\n };\n\n /**\n * Get address from expressAddress.\n * @param expressAddress -- The expressAddress.\n * @returns The address.\n */\n private readonly getExpressAddress = (expressAddress: Address): Address => {\n const twoLetterIsoRegionName = expressAddress.TwoLetterISORegionName;\n\n const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\n\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\n this._onCountryChange(threeLetterIsoRegionName);\n }\n\n const address: Address = {\n ...expressAddress,\n ThreeLetterISORegionName: threeLetterIsoRegionName,\n AddressTypeValue: this.defaultAddressType\n };\n\n return address;\n };\n\n /**\n * Get three letter ISO region name from two letter ISO region name.\n * @param twoLetterIsoRegionName -- The three letter ISO region name.\n * @returns The three letter ISO region name.\n */\n private readonly getThreeLetterIsoRegionName = (twoLetterIsoRegionName: string): string | undefined => {\n const countryRegion = this.countryRegions.find(country => {\n return country.ISOCode?.toLowerCase() === twoLetterIsoRegionName.toLowerCase();\n });\n\n return countryRegion?.CountryRegionId;\n };\n\n /**\n * Method to initialize all module state.\n */\n private readonly _initModuleState = (): void => {\n this.props.moduleState.init({\n status: this._canShip() ? 'updating' : 'disabled',\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit\n });\n\n const checkoutState = this.props.data.checkout.result;\n\n if (this._canShip()) {\n let defaultAddress;\n const shippingCartLines: CartLine[] = this._getCartLinesforDelivery();\n\n if (checkoutState?.checkoutCart.cart.ShippingAddress) {\n defaultAddress = checkoutState.checkoutCart.cart.ShippingAddress;\n } else if (\n ArrayExtensions.hasElements(shippingCartLines) &&\n shippingCartLines[0].ShippingAddress !== undefined &&\n shippingCartLines[0].ShippingAddress.FullAddress !== ''\n ) {\n defaultAddress = shippingCartLines[0].ShippingAddress;\n } else if (this._getAddressFromCartExpressPaymentDetails()) {\n defaultAddress = this._getAddressFromCartExpressPaymentDetails();\n } else if (this._getDefaultAddress()) {\n defaultAddress = this._getDefaultAddress();\n } else {\n defaultAddress = checkoutState?.isExpressCheckoutApplied ? checkoutState.shippingAddressFromExpressCheckout : undefined;\n }\n\n if (defaultAddress && !this.addressCommon.isEmpty(defaultAddress)) {\n this._updateCurrentOperation(AddressOperation.Show, defaultAddress);\n this._setShippingAddress(defaultAddress);\n this._updateModuleState();\n checkoutState?.updateHasShippingAddress({ newHasShippingAddress: true });\n } else {\n this._updateCurrentOperation(AddressOperation.Add);\n checkoutState?.updateHasShippingAddress({ newHasShippingAddress: false });\n }\n }\n };\n\n /**\n * Method get called on submit address.\n */\n private readonly onSubmit = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this.props.telemetry.information('Shipping address submit for Add or Update operation.');\n this._onAddressAddUpdateSubmit();\n break;\n case AddressOperation.List:\n this.props.telemetry.information('Shipping address submit for List operation.');\n this._onSelectAddress();\n break;\n case AddressOperation.Multiple:\n this.setState({ shippingGroupsBuffer: this.state.shippingGroups });\n this._onSelectMultiAddress();\n const resetSelectedShippingLines = this.state.selectedShippingLines\n ? this.state.selectedShippingLines.map(shippingLine => ({\n isChecked: false,\n cartLine: shippingLine.cartLine\n }))\n : [];\n this.setState({ selectedShippingLines: resetSelectedShippingLines });\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n /**\n * Method get called on cancel.\n */\n private readonly onCancel = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this.props.telemetry.information('Shipping address cancel for Add or Update operation.');\n this._clearAddressFields();\n if (!(!this.selectedAddress && !this.addressCommon.isAuthenticatedFlow())) {\n this._resetView();\n }\n\n break;\n case AddressOperation.List:\n this.props.telemetry.information('Shipping address cancel for List operation.');\n if (this.selectedAddress) {\n this._resetView();\n }\n break;\n case AddressOperation.Multiple:\n this.props.telemetry.information('Shipping address cancel for Multiple operation.');\n const resetSelectedShippingLines = this.state.selectedShippingLines\n ? this.state.selectedShippingLines.map(shippingLine => ({\n isChecked: false,\n cartLine: shippingLine.cartLine\n }))\n : [];\n this.setState({\n selectedShippingLines: resetSelectedShippingLines,\n shippingGroups: this.state.shippingGroupsBuffer\n });\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\n this._updateModuleState();\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n /**\n * Method get called on edit address.\n */\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Shipping address onEdit is called.');\n\n if (this.addressCommon.isAuthenticatedFlow() && this.shippingAddress) {\n this._updateCurrentOperation(AddressOperation.List, this.shippingAddress);\n } else if (this.shippingAddress) {\n this._updateCurrentOperation(AddressOperation.Update, this.shippingAddress);\n }\n\n this._updateModuleState();\n };\n\n /**\n * Method to check if checkout cartlines are available fro shipping.\n * @returns - True/false as per the delivery mode.\n */\n private readonly _canShip = (): boolean => {\n const { checkout, channelDeliveryOptionConfig } = this.props.data;\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n if (!checkout.result || !request.channel || checkout.result.checkoutCart.isEmpty || checkout.result.checkoutCart.hasInvoiceLine) {\n return false;\n }\n\n // @ts-expect-error: Type-checker not realizing above request.channel check\n return this.retailMultiplePickUpOptionEnabled\n ? checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n )\n : cartLine\n )\n : checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode !== pickupDeliveryModeCode : cartLine\n );\n };\n\n /**\n * Method get called on select address.\n */\n private readonly _onSelectAddress = () => {\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\n this._setShippingAddress(this.addressListSelectedAddress);\n this._updateModuleState();\n };\n\n /**\n * Method get called on select address.\n */\n private readonly _onSelectMultiAddress = () => {\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\n if (this.props.config.multipleAddressShippingEnabled) {\n this._setCartLinesShippingAddress(this.addressListSelectedAddress);\n } else {\n this._setShippingAddress(this.addressListSelectedAddress);\n }\n\n this._updateModuleState();\n };\n\n /**\n * Method get called on ship to multiple addresses.\n */\n private readonly _goToShipMultipleAddresses = () => {\n this._setDefaultCountryRegionId();\n this.setState({ shippingGroupsBuffer: this.state.shippingGroups });\n this._updateCurrentOperation(AddressOperation.Multiple);\n };\n\n /**\n * Method get called on goto add address.\n */\n private readonly _goToAddAddress = () => {\n this._setDefaultCountryRegionId();\n this._updateCurrentOperation(AddressOperation.Add);\n };\n\n /**\n * Method get called on add/update success.\n * @param response - Retail api response.\n */\n private readonly _onAddOrUpdateSuccess = (response: IAddressResponse) => {\n if (response.customerAddresses) {\n this.customerAddresses = response.customerAddresses;\n }\n\n if (response.address) {\n this._updateCurrentOperation(AddressOperation.Show, response.address);\n this._setShippingAddress(response.address);\n this._updateModuleState();\n }\n };\n\n /**\n * Method get called on set Shipping Address.\n * @param address - Retail Api address result.\n */\n private readonly _setShippingAddress = (address: Address): void => {\n if (this.props.data.checkout.result) {\n const newShippingAddress = { ...address };\n\n if (address.ThreeLetterISORegionName && !newShippingAddress.TwoLetterISORegionName) {\n newShippingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(address.ThreeLetterISORegionName);\n }\n\n this.props.data.checkout.result.updateShippingAddress({ newShippingAddress });\n this.props.data.checkout.result.checkoutCart.updateShippingAddress({ newShippingAddress }).catch(error => {\n this.props.telemetry.error(error);\n });\n }\n };\n\n /**\n * Method get called on set Shipping Address.\n * @param address - Retail Api address result.\n */\n private readonly _setCartLinesShippingAddress = (address: Address): void => {\n if (this.props.data.checkout.result) {\n const newCartLinesWithShippingAddress = this.state.shippingGroups.map(shippingGroup => shippingGroup.cartLine);\n this.props.data.checkout.result.updateCartLinesShippingAddress({ newCartLinesWithShippingAddress });\n this.props.data.checkout.result.checkoutCart\n .updateCartLineShippingAddress({ updatedCartLinesObject: newCartLinesWithShippingAddress })\n .catch(error => {\n this.props.telemetry.error(error);\n });\n }\n };\n\n @computed private get shippingAddress(): Address | undefined {\n return this.props.data.checkout.result?.shippingAddress;\n }\n\n @computed get currencyCode(): string | undefined {\n return get(this.props, 'context.request.channel.Currency');\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 * Method get called on reset view.\n */\n private readonly _resetView = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this._updateCurrentOperation(\n this.addressCommon.isAuthenticatedFlow() ? AddressOperation.List : AddressOperation.Show,\n this.shippingAddress\n );\n break;\n case AddressOperation.Multiple:\n const resetSelectedShippingLines = this.state.selectedShippingLines\n ? this.state.selectedShippingLines.map(shippingLine => ({\n isChecked: false,\n cartLine: shippingLine.cartLine\n }))\n : [];\n this.setState({\n selectedShippingLines: resetSelectedShippingLines,\n shippingGroups: this.state.shippingGroupsBuffer\n });\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n break;\n default:\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n }\n this._updateModuleState();\n };\n\n /**\n * Update current operation.\n * @param operation - The address operation.\n * @param selectedAddress - The selected address.\n */\n private readonly _updateCurrentOperation = (operation: AddressOperation, selectedAddress?: Address) => {\n this.currentOperation = operation;\n this.selectedAddress = selectedAddress;\n\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n this.addUpdateAddress = { ...this.selectedAddress } || {};\n set(this.addUpdateAddress, {\n ThreeLetterISORegionName: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n });\n set(this.addUpdateAddress, {\n AddressTypeValue: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType\n });\n } else if (this.currentOperation === AddressOperation.List) {\n this.addressListSelectedAddress = { ...this.selectedAddress } || {};\n }\n };\n\n /**\n * Update module state.\n */\n private readonly _updateModuleState = () => {\n if (this.currentOperation === AddressOperation.Show) {\n this.props.moduleState.onReady();\n } else if (this.isUpdating) {\n this.props.moduleState.onPending();\n } else {\n this.props.moduleState.onUpdating();\n }\n };\n\n /**\n * Method to check if the customer already has the address.\n * @param address - The address.\n */\n private readonly _isNewAddress = (address: Address): boolean => {\n for (const existingAddress of this.customerAddresses) {\n if (\n (address.Name ?? '') === existingAddress.Name &&\n (address.Street ?? '') === existingAddress.Street &&\n (address.StreetNumber ?? '') === existingAddress.StreetNumber &&\n (address.City ?? '') === existingAddress.City &&\n (address.State ?? '') === existingAddress.State &&\n (address.ZipCode ?? '') === existingAddress.ZipCode &&\n (address.Phone ?? '') === existingAddress.Phone &&\n (address.ThreeLetterISORegionName ?? '') === existingAddress.ThreeLetterISORegionName &&\n (address.AddressTypeValue ?? '') === existingAddress.AddressTypeValue\n ) {\n return false;\n }\n }\n\n return true;\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 /**\n * Returns count of products.\n * @param cartLine - The checkout shipping cart line info props.\n * @returns Number of products.\n */\n private readonly _countItems = (cartlines: ICheckoutShippingCartLineInfo[]): number => {\n return cartlines.reduce((count, line) => {\n return count + (line.quantity || 0);\n }, 0);\n };\n}\n\nexport default CheckoutShippingAddress;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel, ICarouselProps, Player, IPlayerData, IPlayerOptions, IVideoMetadata } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport { MediaLocation, MediaType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n defaultDataScale,\n IComponentNodeProps,\n ImagefullView,\n IModalViewProps,\n IModuleProps,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInitClick,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n KeyCodes,\n NodeTag,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IMediaGalleryData } from './media-gallery.data';\nimport { imageSource, imageZoom, IMediaGalleryProps, thumbnailsOrientation } from './media-gallery.props.autogenerated';\nimport { getProductImages, getValidProductImages, getVideoMetadataFromApi, validateProductImages } from './utils';\nimport { getAltText, IMediaData } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: IMediaData[];\n isInitialLoad?: boolean;\n shouldUseOptimizedImage?: boolean;\n}\n\n/**\n * IMediaGalleryThumbnailsViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IMediaGalleryThumbnailItemViewProps[];\n}\n\n/**\n * IMediaGalleryThumbnailItemViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * IMediaGalleryViewProps Interface.\n */\nexport interface IMediaGalleryViewProps extends IMediaGalleryProps {\n state: IMediaGalleryState;\n MediaGallery: IModuleProps;\n CarouselProps: INodeProps;\n Thumbnails: IMediaGalleryThumbnailsViewProps;\n Modal?: React.ReactElement | null;\n callbackToggle?(): void;\n callbackThumbnailClick?(index: number): void;\n callbackThumbnailKeyDown?(index: number): void;\n}\n\n/**\n * Props for carousel.\n */\ninterface IMediaGalleryCarouselItems {\n items: ItemType[];\n keys: (string | undefined)[];\n}\n\n/**\n * Media gallery component.\n */\nclass MediaGallery extends React.Component, IMediaGalleryState> {\n private readonly _inlineZoomDivRef: Map = new Map();\n\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\n private readonly player: React.RefObject = React.createRef();\n private fallbackImage?: string;\n\n private readonly defaultGalleryImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly _zoomedImageSettings: IImageSettings;\n\n public constructor(props: IMediaGalleryProps) {\n super(props);\n this._toggleModal = this._toggleModal.bind(this);\n const mediaGalleryImages = this.getImagesData();\n this.state = {\n activeIndex: 0,\n animating: false,\n isImageZoomed: false,\n modalIsOpen: false,\n isInitialLoad: true,\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation,\n mediaGalleryItems: mediaGalleryImages\n };\n\n this._zoomedImageSettings =\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\n\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\n }\n\n public isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public async componentDidMount(): Promise {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\n this._setRenderType();\n if (!this.props.context.request.app?.config?.OmniChannelMedia) {\n if (source === imageSource.pageContext) {\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocationsForSelectedVariant.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\n const product = this.props.data.product.result;\n const images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant\n );\n\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n }\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n }\n }\n\n public shouldComponentUpdate(nextProps: IMediaGalleryProps, nextState: IMediaGalleryState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { id, config, resources } = this.props;\n\n const { className, showPaginationTooltip } = config;\n\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\n const zoomViewMode: string =\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\n if (this.props.data.product.result) {\n this.fallbackImage = getFallbackImageUrl(\n this.props.data.product.result.ItemId,\n this.props.context.request.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage}&fallback=${emptyPlaceHolderImage}`;\n }\n\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\n const viewProps: IMediaGalleryViewProps = {\n ...(this.props as IMediaGalleryProps),\n state: this.state,\n MediaGallery: {\n moduleProps: this.props,\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\n },\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\n callbackToggle: this.openModalDialog,\n callbackThumbnailClick: this._generateOnThumbnailClick,\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\n CarouselProps: {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items: mediaGalleryCarouselItems.items,\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: showPaginationTooltip === true,\n indicatorAriaText: resources.ariaLabelForSlide,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n key: mediaGalleryCarouselItems.keys\n } as IComponentNodeProps,\n Thumbnails: {\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: 'ms-media-gallery__thumbnails',\n vertical: isVertical,\n flipperPrevLabel: resources.previousScreenshotFlipperText,\n flipperNextLabel: resources.nextScreenshotFlipperText,\n parentId: id,\n useTabList: true,\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\n } as IComponentNodeProps,\n items: mediaGalleryThumbnailCarouselItems.items\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Zoomed out image on previous/next click.\n */\n public updateZoomedInImage(): void {\n this.setState({ isImageZoomed: false });\n }\n\n private readonly onExiting = () => {\n this.setState({ animating: true });\n };\n\n private readonly onExited = () => {\n this.setState({ animating: false });\n };\n\n /**\n * On click next in carousel.\n */\n private readonly next = (): void => {\n removeInlineZoomStyle();\n if (this.isLastItem() === undefined) {\n return;\n }\n\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\n this.goToIndex(nextIndex);\n\n this.updateZoomedInImage();\n };\n\n /**\n * On click previous in carousel.\n */\n private readonly previous = (): void => {\n removeInlineZoomStyle();\n const images = this.state.mediaGalleryItems;\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\n this.goToIndex(nextIndex);\n this.updateZoomedInImage();\n };\n\n private readonly goToIndex = (index: number): void => {\n const { autoplay } = this.props.config;\n const currentIndex = this.state.activeIndex;\n const mediaItems = this.state.mediaGalleryItems;\n if (autoplay && mediaItems) {\n if (mediaItems[`${index}`]?.mediaTypeValue === MediaType.Video) {\n this.player.current?.play();\n } else if (mediaItems[`${currentIndex}`].mediaTypeValue === MediaType.Video) {\n this.player.current?.pause();\n }\n }\n this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\n if (thumbnailImageSettings) {\n thumbnailImageSettings.cropFocalRegion = true;\n }\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n const defaultKey = 0;\n return {\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\n keys: ['empty']\n };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n return this.getVideoThumbNailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n } else {\n return this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n }\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private getImagesData = (): IImageData[] => {\n if (this.props.config.skipImageValidation || this.props.context.request.app?.config?.OmniChannelMedia) {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n let images: IImageData[] = [];\n let mediaLocations: MediaLocation[] = [];\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n mediaLocations = this.props.data.mediaLocations.result;\n }\n images = mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(\n this.props.context.actionContext.requestContext,\n this.shouldUseCmsAltText(),\n this.props.data.product.result?.Name,\n mediaLocation.AltText\n ),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n const curatedImages = this.props.config.images ?? [];\n\n return [...this._filterMasterImageFromVariant(images), ...curatedImages];\n }\n return [];\n };\n\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const galleryImageSettings = this.props.config.galleryImageSettings;\n if (galleryImageSettings) {\n galleryImageSettings.cropFocalRegion = true;\n }\n\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n return this._renderCarouselItemImageView(\n zoomView,\n item,\n galleryImageSettings ?? this.defaultGalleryImageSettings,\n index\n );\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private async _setImages(images?: IMediaData[]): Promise {\n const curatedImage = this.props.config.images || [];\n const mediaToSet: IMediaData[] = this._filterMasterImageFromVariant(images);\n\n void Promise.all(\n mediaToSet.map(async mediaData => {\n if (mediaData.mediaTypeValue === MediaType.Video && mediaData.src) {\n try {\n const url = new URL(mediaData.src);\n const videoId = url.searchParams.get('CVID');\n if (videoId) {\n mediaData.videoData = await getVideoMetadataFromApi(videoId, this.props.context.actionContext);\n }\n } catch (error) {\n if (this.props.telemetry) {\n this.props.telemetry.debug('Error while fetching videoId');\n }\n }\n }\n return mediaData;\n })\n ).then(mediaData => {\n const mediaItems = mediaData.filter(element => {\n return (\n element.mediaTypeValue !== MediaType.Video ||\n (element.mediaTypeValue === MediaType.Video && element.videoData !== undefined)\n );\n });\n\n this.setState({\n mediaGalleryItems: [...mediaItems, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n });\n\n this.setState({\n mediaGalleryItems: [...mediaToSet, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n }\n\n private _setRenderType(): void {\n this.setState({\n isInitialLoad: false\n });\n }\n\n private _renderCarouselItemImageView(\n zoomView: string,\n media: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (media.mediaTypeValue === MediaType.Video) {\n if (isInPopup || zoomView !== 'fullscreen') {\n return <>{this._renderCarouselItemVideo(media, index, imageSettings)};\n }\n return <>{this._renderVideoThumbnail(media, index, imageSettings)};\n } else {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(media, imageSettings, index, isInPopup)};\n }\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\n const itemId = this.props.data.product.result?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _renderCarouselItemVideo = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = this.props.config as IPlayerOptions;\n const playerResources = this.props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n const attributes = {\n id: `${this.props.id}__carousel-item__${index}`\n };\n return (\n \n );\n }\n return this._renderEmptyImage(imageSettings);\n };\n\n private readonly _getCarouselItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Gets the video thumbnail item to display media gallery.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render video.\n */\n private readonly getVideoThumbNailItem = (\n mediaData: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Ref Handler.\n * @param index -Remove item click function.\n * @returns Set inline zoom.\n */\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\n this._inlineZoomDivRef.set(index, divRef);\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n\n this.goToIndex(index);\n };\n };\n\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n \n );\n }\n\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\n }\n\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\n if (!this.state.isMobileImageZoomed) {\n const bounds = target.getBoundingClientRect();\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\n\n const positionX = event.clientX - bounds.left;\n const positionY = event.clientY - bounds.top;\n const scaledPositionX = positionX * dataScale;\n const scaledPositionY = positionY * dataScale;\n\n target.style.transform = `scale(${dataScale})`;\n target.classList.add(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = 'auto';\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\n this.setState({\n isMobileImageZoomed: true\n });\n } else {\n target.style.transform = '';\n target.classList.remove(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = '';\n this.setState({\n isMobileImageZoomed: false\n });\n }\n }\n\n private _onInlineImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onImageMouseOut(event: React.MouseEvent): void {\n inlineZoomImageOnMouseOut(event);\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n\n onContainerZoomInit(event);\n\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\n onMouseOutLensContainer(event);\n\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n \n
\n );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n
\n {}\n \n
\n
\n );\n }\n\n /**\n * Render the video thumbnail in full screen.\n * @param mediaData - Media Data.\n * @param index - Index\n * @param imageSettings - Image settings.\n * @returns - JSX.Element\n */\n private readonly _renderVideoThumbnail = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return (\n
\n \n
\n {}\n \n
\n
\n );\n };\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n
\n \n
\n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\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 { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutBillingAddressViewProps } from './checkout-billing-address';\n\n/**\n * Address show component.\n * @param param0 - Root param.\n * @param param0.AddressDetail - Address detail.\n * @param param0.items - IAddressShowItem[].\n * @returns - Address Node.\n */\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\n return (\n \n {items.map((item: IAddressShowItem) => {\n return <>{item.description};\n })}\n \n );\n};\n\n/**\n * Address Add Update Component.\n * @param param0 - Root param.\n * @param param0.AddressForm - Address form.\n * @param param0.heading - Address Heading.\n * @param param0.items - IAddressAddItem[].\n * @param param0.hasError - Boolean.\n * @param param0.error - IAddressError.\n * @param param0.isShowSaveButton - Boolean.\n * @param param0.saveButton - Save button.\n * @param param0.isShowCancelButton - Boolean.\n * @param param0.cancelButton - Cancel button.\n * @returns - AddressForm Node.\n */\nconst AddressAddUpdate: React.FC = ({\n AddressForm,\n heading,\n items,\n hasError,\n error,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton\n}) => {\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n \n {label}\n {alert}\n {input}\n \n );\n })}\n {hasError && (\n \n {error.title}\n {error.message}\n \n )}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\n/**\n * Checkout Billing Address View Component.\n * @param props - Props.\n * @returns - CheckoutBillingAddress Module.\n */\nconst CheckoutBillingAddressView: React.FC = props => {\n const {\n CheckoutBillingAddress,\n checkoutErrorRef,\n alert,\n viewState,\n heading,\n sameAsShippingCheckbox,\n showAddress,\n showAddOrUpdateAddress\n } = props;\n\n return (\n \n {heading}\n {alert}\n {viewState.isShowSameAsShippingCheckbox && sameAsShippingCheckbox}\n {viewState.isShowAddress && }\n {viewState.isShowAddOrUpdateAddress && }\n \n );\n};\n\nexport default CheckoutBillingAddressView;\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 React from 'react';\n\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IAddressSelectItem, IAddressSelectProps } from '../../common/components/address-select';\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutShippingAddressViewProps } from './checkout-shipping-address';\nimport { IShipMultipleAddressesViewProps } from '../../common/components/address-ship-multiple';\nimport { IShipMultipleAddressesLineViewProps } from '../../common/components/address-ship-multiple-lines';\n\n/**\n * Address show component.\n * @param param0 - Root param.\n * @param param0.AddressDetail - Address detail.\n * @param param0.items - IAddressShowItem[].\n * @returns - Address Node.\n */\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\n return (\n \n {items.map((item: IAddressShowItem) => {\n return <>{item.description};\n })}\n \n );\n};\n\n/**\n * Address Select Component.\n * @param param0 - Root param.\n * @param param0.SelectAddress - Select address.\n * @param param0.shipMultipleAddressesButton - Ship to multiple addresses button.\n * @param param0.addButton - Add button.\n * @param param0.items - IAddressSelectItem[].\n * @param param0.isShowSaveButton - Boolean.\n * @param param0.saveButton - Save button.\n * @param param0.isShowCancelButton - Boolean.\n * @param param0.cancelButton - Cancel button.\n * @returns - SelectAddress Node.\n */\nconst AddressSelect: React.FC = ({\n SelectAddress,\n shipMultipleAddressesButton,\n addButton,\n items,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton\n}) => {\n return (\n \n \n {addButton}\n {shipMultipleAddressesButton}\n \n {items.map((item: IAddressSelectItem) => {\n const SelectItem = item.SelectItem;\n return (\n \n {item.input}\n \n \n );\n })}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\n/**\n * Address Ship Multiple Component.\n * @param param0 - Root param.\n * @param param0.ShipMultipleAddress - Ship multiple address form.\n * @param param0.shipSingleAddressButton - Ship single address button.\n * @param param0.clearSelectionButton - Clear selection button.\n * @param param0.addressDropdown - Address dropdown button.\n * @param param0.ProductsTable - Products table component.\n * @param param0.ProductsTableHeading - Products table heading component.\n * @param param0.ProductsTableRow - Products table row component.\n * @param param0.shipMultipleAddressLines - Ship multiple address lines.\n * @param param0.hasError - Boolean.\n * @param param0.error - Error message.\n * @returns Address ship multiple component node.\n */\nconst AddressShipMultiple: React.FC = ({\n ShipMultipleAddress,\n shipSingleAddressButton,\n clearSelectionButton,\n addressDropdown,\n ProductsTable,\n ProductsTableHeading,\n ProductsTableRow,\n shipMultipleAddressLines,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton,\n isMobile\n}) => {\n if (ShipMultipleAddress && isMobile !== undefined) {\n if (!isMobile) {\n return (\n \n {shipSingleAddressButton}\n \n {clearSelectionButton}\n\n {addressDropdown}\n \n {ProductsTable && shipMultipleAddressLines && shipMultipleAddressLines.length > 0 && (\n \n {ProductsTableHeading}\n \n {shipMultipleAddressLines &&\n shipMultipleAddressLines.map((line: IShipMultipleAddressesLineViewProps) => {\n return _renderShipMultipleAddressLine(line, isMobile, ProductsTableRow);\n })}\n \n \n )}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n } else {\n return (\n \n {shipSingleAddressButton}\n {addressDropdown}\n {ProductsTable && shipMultipleAddressLines && shipMultipleAddressLines.length > 0 && (\n \n {ProductsTableHeading}\n \n {shipMultipleAddressLines &&\n shipMultipleAddressLines.map((line: IShipMultipleAddressesLineViewProps) => {\n return _renderShipMultipleAddressLine(line, isMobile, ProductsTableRow);\n })}\n \n \n )}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n }\n } else {\n return null;\n }\n};\n\n/**\n * Address Add Update Component.\n * @param param0 - Root param.\n * @param param0.AddressForm - Address form.\n * @param param0.heading - Address heading.\n * @param param0.items - IAddressAddItem[].\n * @param param0.hasError - Boolean.\n * @param param0.error - Error message.\n * @param param0.isShowSaveButton - Boolean.\n * @param param0.saveButton - Save button.\n * @param param0.isShowCancelButton - Boolean.\n * @param param0.cancelButton - Cancel button.\n * @returns Address add update component node.\n */\nconst AddressAddUpdate: React.FC = ({\n AddressForm,\n heading,\n items,\n hasError,\n error,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton\n}) => {\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n \n {label}\n {alert}\n {input}\n \n );\n })}\n {hasError && (\n \n {error.title}\n {error.message}\n \n )}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\nconst _renderShipMultipleAddressLine = (\n shipMultipleAddressesLine: IShipMultipleAddressesLineViewProps,\n isMobile: boolean,\n ProductsTableRow?: INodeProps\n): JSX.Element | null => {\n if (!shipMultipleAddressesLine) {\n return null;\n }\n\n const {\n selectLine,\n productImage,\n productNumber,\n productInfo,\n productPrice,\n productQuantity,\n productAddress\n } = shipMultipleAddressesLine;\n\n if (!isMobile) {\n return (\n \n {selectLine}\n \n
{productImage}
\n
{productNumber}
\n \n {productInfo}\n {productPrice}\n {productQuantity}\n {productAddress}\n
\n );\n } else {\n return (\n \n \n {selectLine}\n \n {productImage}\n {productInfo}\n {`QTY: ${productQuantity}`}\n \n {productPrice}\n \n \n {productAddress}\n \n \n );\n }\n};\n\n/**\n * Checkout Shipping Address View Component.\n * @param props - Props.\n * @returns - CheckoutShippingAddress Module.\n */\nconst CheckoutShippingAddressView: React.FC = props => {\n const {\n CheckoutShippingAddress,\n checkoutErrorRef,\n alert,\n viewState,\n showAddress,\n showAddressSelect,\n showAddOrUpdateAddress,\n showShipMultipleAddresses,\n cartLineImages\n } = props;\n\n return (\n \n {alert}\n {!viewState.isShowShipMultipleAddress && cartLineImages}\n {viewState.isShowAddress && }\n {viewState.isShowAddresList && }\n {viewState.isShowAddOrUpdateAddress && }\n {viewState.isShowShipMultipleAddress && (\n \n )}\n \n );\n};\n\nexport default CheckoutShippingAddressView;\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 { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\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 {\n IPriceComponentResources,\n ISwatchItem,\n PriceComponent,\n ProductComponentV2SwatchComponent,\n RatingComponent\n} from '@msdyn365-commerce/components';\nimport {\n getCatalogId,\n IAny,\n IComponent,\n IComponentProps,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n msdyn365Commerce\n} from '@msdyn365-commerce/core';\n\nimport {\n ArrayExtensions,\n convertDimensionTypeToProductDimensionType,\n Dictionary,\n DimensionTypes,\n generateImageUrl,\n getProductPageUrlSync,\n IDimensionsApp,\n StringExtensions,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n format,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\n/**\n * AttributeSwatch entity interface.\n */\ninterface IAttributeSwatch {\n swatchValue?: string;\n swatchImageUrl?: string;\n swatchColorHexCode?: string;\n isDefault?: boolean;\n productImageUrls?: string[];\n extensionProperties?: ICommerceProperty[];\n}\n\n/**\n * CommerceProperty entity interface.\n */\ninterface ICommerceProperty {\n propertyKey?: string;\n value?: IExtensionPropertyValue;\n}\n\n/**\n * Extension property value entity interface.\n */\ninterface IExtensionPropertyValue {\n isBooleanValue?: boolean;\n byteValue?: number;\n dateTimeOffsetValue?: Date;\n decimalValue?: number;\n integerValue?: number;\n longValue?: number;\n stringValue?: string;\n}\n\n/**\n * ProductDimension entity interface.\n */\ninterface IProductDimension {\n dimensionTypeValue: number;\n dimensionValue?: IProductDimensionValue;\n extensionProperties?: ICommerceProperty[];\n}\n\n/**\n * ProductDimensionValue entity interface.\n */\ninterface IProductDimensionValue {\n recordId: number;\n value?: string;\n dimensionId?: string;\n colorHexCode?: string;\n imageUrl?: string;\n refinerGroup?: string;\n extensionProperties?: ICommerceProperty[];\n}\n\n/**\n * ProductSearchResult entity interface.\n */\nexport interface IProductSearchResult {\n itemId?: string;\n name?: string;\n price: number;\n primaryImageUrl?: string;\n recordId: number;\n trackingId?: string;\n averageRating?: number;\n totalRatings?: number;\n description?: string;\n basePrice?: number;\n minVariantPrice?: number;\n maxVariantPrice?: number;\n displayOrder?: number;\n attributeValues?: IAttributeValue[];\n defaultUnitOfMeasure?: string;\n masterProductId?: number;\n extensionProperties?: ICommerceProperty[];\n}\n\n/**\n * AttributeValue entity interface.\n */\ninterface IAttributeValue {\n name?: string;\n keyName?: string;\n unitOfMeasureSymbol?: string;\n dataTypeValue?: number;\n isBooleanValue?: boolean;\n dateTimeOffsetValue?: Date;\n floatValue?: number;\n integerValue?: number;\n textValue?: string;\n currencyValue?: number;\n currencyCode?: string;\n attributeValueId?: number;\n recordId?: number;\n swatches?: IAttributeSwatch[];\n extensionProperties?: ICommerceProperty[];\n}\n\nexport interface IProductComponentV2Props extends IComponentProps<{ product?: IProductSearchResult }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n ratingCountAriaLabel?: string;\n allowBack?: boolean;\n telemetryContent?: ITelemetryContent;\n quickViewButton?: React.ReactNode;\n productComparisonButton?: React.ReactNode;\n isEnabledProductDescription?: boolean;\n isPriceMinMaxEnabled?: boolean;\n priceResources?: IPriceComponentResources;\n inventoryLabel?: string;\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\n swatchItemAriaLabel?: string;\n}\n\nexport interface IProductComponentV2 extends IComponent {}\n\nconst PriceComponentActions = {};\n\n/**\n * Gets the product page url from the default swatch selected.\n * @param productData - Product card to be rendered.\n * @returns The default color swatch selected if any.\n */\nfunction getDefaultColorSwatchSelected(productData?: IProductSearchResult): IAttributeSwatch | null {\n if (!productData || !productData.attributeValues) {\n return null;\n }\n\n const colorAttribute = productData.attributeValues.find(\n attributeValue => attributeValue.keyName?.toLocaleLowerCase() === DimensionTypes.color\n );\n if (!colorAttribute) {\n return null;\n }\n\n const defaultSwatch = colorAttribute.swatches?.find(item => item.isDefault === true) ?? colorAttribute.swatches?.[0];\n return defaultSwatch ?? null;\n}\n\n/**\n * Gets the product image from the default swatch selected.\n * @param coreContext - Context of the module using the component.\n * @param productData - Product card to be rendered.\n * @returns The product card image url.\n */\nfunction getProductImageUrlFromDefaultColorSwatch(coreContext: ICoreContext, productData?: IProductSearchResult): string | undefined {\n const siteContext = coreContext as ICoreContext;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\n return productData?.primaryImageUrl;\n }\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\n return defaultSwatch && ArrayExtensions.hasElements(defaultSwatch.productImageUrls)\n ? generateImageUrl(defaultSwatch.productImageUrls[0], coreContext.request.apiSettings)\n : productData?.primaryImageUrl;\n}\n\n/**\n * Updates the product url link to product details page.\n * @param productDetailsPageUrl - Product page url.\n * @param coreContext - Context of the module using the component.\n * @param queryString - Querystring to be added to the URL.\n * @returns The update product page url.\n */\nfunction updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\n if (sourceUrl.search) {\n sourceUrl.search += `&${queryString}`;\n } else {\n sourceUrl.search += queryString;\n }\n\n const updatedUrl = new URL(sourceUrl.href);\n return updatedUrl.pathname + sourceUrl.search;\n}\n\n/**\n * Gets the react node for product unit of measure display.\n * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\n * @returns The node representing markup for unit of measure component.\n */\nfunction renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\n if (!unitOfMeasure) {\n return null;\n }\n return (\n
\n {unitOfMeasure}\n
\n );\n}\n\n/**\n * Gets the react node for product availability.\n * @param inventoryAvailabilityLabel - The product information.\n * @returns The node representing markup for product availability.\n */\nfunction renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\n return null;\n }\n\n return (\n
\n {inventoryAvailabilityLabel}\n
\n );\n}\n\n/**\n * Renders product comparison button similar to the quick view button.\n * @param productComparisonButton - React element of the button.\n * @param product - Current product info.\n * @param catalogId - Current catalog.\n * @returns React element for the specific product.\n */\nfunction renderProductComparisonButton(\n productComparisonButton: React.ReactNode,\n product: IProductSearchResult,\n catalogId: number\n): JSX.Element | undefined {\n validateCatalogId(catalogId);\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\n}\n\n/**\n * Gets the product page url from the default swatch selected.\n * @param coreContext - Context of the module using the component.\n * @param productUrl - Product page url for the product card.\n * @param productData - Product card to be rendered.\n * @returns The product card image url.\n */\nfunction getProductPageUrlFromDefaultSwatch(\n coreContext: ICoreContext,\n productUrl: string,\n productData?: IProductSearchResult\n): string | undefined {\n const siteContext = coreContext as ICoreContext;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\n return productUrl;\n }\n\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\n if (!defaultSwatch || !defaultSwatch.swatchValue) {\n return productUrl;\n }\n\n const queryString = `color=${defaultSwatch.swatchValue}`;\n return updateProductUrl(productUrl, coreContext, queryString);\n}\n\nconst ProductCardV2: React.FC = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n ratingAriaLabel,\n ratingCountAriaLabel,\n allowBack,\n typeName,\n id,\n telemetryContent,\n quickViewButton,\n productComparisonButton,\n isEnabledProductDescription,\n isPriceMinMaxEnabled,\n priceResources,\n inventoryLabel,\n dimensionAvailabilities,\n swatchItemAriaLabel\n}) => {\n const product = data.product;\n\n let productUrl = getProductPageUrlSync(product?.name ?? '', product?.recordId ?? Number.MIN_VALUE, context.actionContext, undefined);\n if (allowBack) {\n productUrl = updateProductUrl(productUrl, context, 'back=true');\n }\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultColorSwatch(context, product) ?? product?.primaryImageUrl;\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\n const [productPageUrl, setProductPageUrl] = useState(productPageUrlFromSwatch);\n const [productImageUrl, setProductImageUrl] = useState(productImageUrlFromSwatch);\n React.useEffect(() => {\n setProductPageUrl(productPageUrlFromSwatch);\n setProductImageUrl(productImageUrlFromSwatch);\n }, [productUrl, productPageUrlFromSwatch, productImageUrlFromSwatch]);\n const [selectedSwatchItems] = useState(new Dictionary());\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\n const enableStockCheck = context.app.config.enableStockCheck;\n\n /**\n * Updates the product page and Image url based on swatch selected.\n * @param coreContext - Context of the caller.\n * @param swatchItem - Dimension swatch selected.\n */\n const updatePageAndImageUrl = React.useCallback(\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\n const dimensionType = swatchItem.dimensionType;\n selectedSwatchItems.setValue(dimensionType, swatchItem);\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\n return;\n }\n const queryString = `${dimensionType}=${swatchItem.value}`;\n let productPageUrlWithSwatch = '';\n if (productPageUrl.includes(dimensionType)) {\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\n newUrl.searchParams.delete(dimensionType);\n productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\n } else {\n productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\n }\n setProductPageUrl(productPageUrlWithSwatch);\n if (dimensionType === DimensionTypes.color) {\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\n ? swatchItem.productImageUrls[0]\n : undefined;\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\n setProductImageUrl(newImageUrl);\n }\n },\n [selectedSwatchItems, context, productPageUrl]\n );\n\n if (!product) {\n return null;\n }\n\n /**\n * Checks if rendering the particular dimensions is allowed for product card.\n * @param dimensionType - Dimension to be displayed.\n * @returns Updates the state with new product page url.\n */\n function shouldDisplayDimension(dimensionType: string): boolean {\n const dimensionsContext = context as ICoreContext;\n const dimensionsToDisplayOnProductCard = dimensionsContext.app.config.dimensionsInProductCard;\n return (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n dimensionsToDisplayOnProductCard.includes(dimensionType.toLocaleLowerCase() as DimensionTypes)\n );\n }\n\n /**\n * Gets the react node for product dimension as swatch.\n * @param attributeValues - Attribute value property from product.\n * @returns The node representing markup for unit of measure component.\n */\n function renderProductDimensions(attributeValues?: IAttributeValue[]): JSX.Element | null {\n if (!attributeValues) {\n return null;\n }\n\n return (\n
\n {attributeValues.map((item: IAttributeValue) => {\n const dimensionTypeValue = item.keyName?.toLocaleLowerCase() ?? '';\n if (!shouldDisplayDimension(dimensionTypeValue)) {\n return null;\n }\n\n const siteContext = context as ICoreContext;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n const dimensionType = dimensionTypeValue as DimensionTypes;\n const swatches =\n item.swatches?.map(swatchItem => {\n return {\n itemId: `${item.recordId ?? ''}-${dimensionTypeValue}-${swatchItem.swatchValue ?? ''}`,\n value: swatchItem.swatchValue ?? '',\n dimensionType,\n colorHexCode: swatchItem.swatchColorHexCode,\n imageUrl: swatchItem.swatchImageUrl,\n productImageUrls: swatchItem.productImageUrls,\n isDefault: swatchItem.isDefault,\n swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\n isDisabled:\n enableStockCheck &&\n dimensionAvailabilities?.find(\n dimensionAvailability => dimensionAvailability.value === (swatchItem.swatchValue ?? '')\n )?.isDisabled\n };\n }) ?? [];\n if (\n dimensionToPreSelectInProductCard !== DimensionTypes.none &&\n ArrayExtensions.hasElements(swatches) &&\n !swatches.some(swatch => swatch.isDefault) &&\n dimensionType === DimensionTypes.color\n ) {\n swatches[0].isDefault = true;\n }\n return (\n \n );\n })}\n
\n );\n }\n\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\n if (quickview === null) {\n return undefined;\n }\n const selectedDimensions: IProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\n return {\n dimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\n dimensionValue: {\n recordId: 0,\n Value: swatches.value\n }\n };\n });\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\n }\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.recordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\n const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\n\n return (\n <>\n {isEnabledProductDescription ? (\n \n
\n
\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.primaryImageUrl,\n product.name,\n context\n )}\n
\n
\n
{product.name}
\n {renderPrice(\n context,\n typeName,\n id,\n product.basePrice,\n product.price,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n isPriceMinMaxEnabled,\n priceResources\n )}\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.defaultUnitOfMeasure)}\n {renderDescription(product.description)}\n
\n
\n \n ) : (\n \n
\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.primaryImageUrl,\n product.name,\n context\n )}\n
\n
\n
{product.name}
\n {renderPrice(\n context,\n typeName,\n id,\n product.basePrice,\n product.price,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText\n )}\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.defaultUnitOfMeasure)}\n
\n \n )}\n {renderProductDimensions(product.attributeValues)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.averageRating, product.totalRatings, ratingAriaLabel, ratingCountAriaLabel)}\n {renderProductAvailability(inventoryLabel)}\n {quickViewButton && renderQuickView(quickViewButton, product.recordId)}\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\n \n );\n};\n\nfunction renderLabel(\n name?: string,\n price?: string,\n rating?: number,\n ratingAriaLabelText?: string,\n reviewCount?: number,\n ratingCountAriaLabelText?: string\n): string {\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\n }`;\n}\n\nfunction renderDescription(description?: string): JSX.Element | null {\n return

{description}

;\n}\n\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(2);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\nfunction getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\n if (reviewCount && ratingCountAriaLabelText) {\n return format(ratingCountAriaLabelText || '', reviewCount);\n }\n return '';\n}\n\nfunction renderRating(\n coreContext: ICoreContext,\n moduleTypeName: string,\n moduleId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string,\n ratingCountAriaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() || undefined;\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\n\n return (\n \n );\n}\n\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n id: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string,\n currentPriceText?: string,\n isPriceMinMaxEnabled?: boolean,\n priceResources?: IPriceComponentResources\n): JSX.Element | null {\n const price = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n \n );\n}\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n fallbackImageUrl?: string,\n altText?: string,\n context?: ICoreContext>\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Site level config can be of any type.\n const contextConfig = context?.app.config?.placeholderImageName;\n const emptyPlaceHolderImage = contextConfig as string;\n let fallbackImageSource = fallbackImageUrl;\n if (emptyPlaceHolderImage && fallbackImageUrl) {\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : '',\n fallBackSrc: fallbackImageSource\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return (\n \n );\n}\n\nexport const ProductComponentV2: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\n IProductComponentV2\n>('ProductV2', { component: ProductCardV2, ...PriceComponentActions });\n\nexport default ProductComponentV2;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

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

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n this.setState({\n cartlinesErrors: {}\n });\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n try {\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n ProductPriceForSelectedProductsInput,\n validateCatalogId,\n getProductPriceForSelectedProducts\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productPrices: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || [],\n productPrices: this.productPrices || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n const discountIds = this.props.config.productCollection.discountIds;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const productPrices = this.state.productPrices;\n\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n \n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(\n item,\n index,\n productPrices ? productPrices.find(p => p.ProductId === item.RecordId) : undefined\n );\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n (recommendation || discountIds) &&\n shouldDisplaySeeAllButton &&\n (ArrayExtensions.hasElements(updatedProducts) || this.props.config.productCollection.listType === 'promotional')\n ? this._getSeeAllButton(headingLabel, recommendation, discountIds)\n : undefined,\n resources: resources\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n let productPrices = this.state.productPrices;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n if (this.props.config.productCollection.listType === 'promotional') {\n productPrices = await getProductPriceForSelectedProducts(\n new ProductPriceForSelectedProductsInput(products.filter(p => !p.IsMasterProduct).map(p => p.RecordId)),\n this.props.context.actionContext\n );\n\n this.setState({ productPrices: productPrices });\n }\n };\n\n private readonly _getProduct = (\n product: ProductSearchResult,\n index: number,\n productPrice?: ProductPrice\n ): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param headingLabel - Heading label.\n * @param recommendation - Recommendation.\n * @param discountIds - Discount Ids.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (headingLabel: string, recommendation?: string, discountIds?: string[]): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n if (!recommendation && !discountIds) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n\n if (discountIds) {\n // see all button for promotion page\n url.searchParams.set('discountIds', discountIds.toString());\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n } else if (recommendation) {\n // See all button for recommendation\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n }\n\n return (\n \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderDrawerProps } from './quick-order-drawer-props';\n\nexport interface IQuickOrderDrawerState {\n isOpen: boolean;\n}\n\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\n\nexport default class QuickOrderDrawer extends React.Component {\n public state: IQuickOrderDrawerState;\n\n private readonly drawerOpenGlyph: string;\n\n private readonly drawerCloseGlyph: string;\n\n private readonly drawerGlyphClass: string;\n\n private isManuallyToggled: boolean;\n\n constructor(props: IQuickOrderDrawerProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this.isManuallyToggled = false;\n this.state = { isOpen: (props.collapseProps && props.collapseProps.isOpen) || false };\n this.drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames(\n this.drawerGlyphClass,\n this.props.openGlyph ? this.props.openGlyph : this.props.closeGlyph ? this.props.closeGlyph : ''\n );\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames(this.drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : '');\n this.drawerCloseGlyph = classnames(this.drawerGlyphClass, this.props.closeGlyph ? this.props.closeGlyph : '');\n }\n }\n\n public shouldComponentUpdate(nextProps: IQuickOrderDrawerProps, nextState: IQuickOrderDrawerState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const collapseProps = { ...this.props.collapseProps } as ICollapseProps;\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this.isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n } else {\n // eslint-disable-next-line react/no-direct-mutation-state\n this.state.isOpen = collapseProps.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className ? this.props.className : '');\n this.isManuallyToggled = false;\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen)}\n \n \n
\n );\n }\n\n private _generateDrawerButtonInnerMarkup(collapseState: boolean): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n return (\n <>\n

{this.props.moduleHeadingText}

\n \n {this.props.moduleDescriptionText}\n \n {this._generateGlyphMarkup('drawer__glyph__end', collapseState)}\n \n );\n }\n\n private _generateGlyphMarkup(location: string, collapseState: boolean): JSX.Element {\n let glyphClass = collapseState ? this.drawerOpenGlyph : this.drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return ;\n }\n\n private _toggle(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n this.setState({ isOpen: !this.state.isOpen });\n this.isManuallyToggled = true;\n if (this.props.onToggle) {\n this.props.onToggle(this.state);\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 { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderState } from '../quick-order';\n\nexport interface IQuickOrderFormProps {\n disableAddtoCart: boolean | undefined;\n productTextInput: React.RefObject;\n quantityTextInput: React.RefObject;\n maxChars: number;\n maxQuantity?: number;\n ariaLabelQuantity: string;\n ariaLabelProduct: string;\n ariaLabelAddtoCart: string;\n addQuantityPlaceholderText: string;\n quickOrderState: IQuickOrderState;\n handleInputChange(query: string): void;\n handleQuantityChange(query: string): void;\n handleAddToCartClick(): Promise;\n}\n\nexport interface IQuickOrderFormViewProps {\n product: React.ReactNode;\n quantity: React.ReactNode;\n addToCartBtn: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Input change value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\n\n/**\n * On Quantity Change functionality.\n * @param handleQuantityChange -Quantity change function.\n * @returns Quantity change value.\n */\nconst onQuantityChangeFunction = (handleQuantityChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleQuantityChange(event.target.value || '');\n};\n\nexport const QuickOrderFormComponent = (props: IQuickOrderFormProps): IQuickOrderFormViewProps => {\n const {\n productTextInput,\n quantityTextInput,\n quickOrderState,\n maxChars,\n maxQuantity,\n disableAddtoCart,\n ariaLabelQuantity,\n ariaLabelProduct,\n ariaLabelAddtoCart,\n addQuantityPlaceholderText,\n handleQuantityChange,\n handleInputChange,\n handleAddToCartClick\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const onQuantityInputChange = onQuantityChangeFunction(handleQuantityChange);\n\n const productNode = (\n
\n

\n {ariaLabelProduct}\n

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

\n {ariaLabelQuantity}\n

\n \n
\n );\n\n const addtoCartNode = (\n
\n \n {ariaLabelAddtoCart}\n \n
\n );\n\n const userMessageNode =\n quickOrderState && quickOrderState.stateMessage ? (\n \n \n {quickOrderState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToCartBtn: addtoCartNode,\n quantity: quantityNode,\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order.\n */\nexport class QuickOrderProduct {\n @observable\n public isSelected: boolean;\n\n public readonly cartLine: CartLine;\n\n public readonly simpleProduct: SimpleProduct;\n\n public constructor(cartLine: CartLine, simpleProduct: SimpleProduct) {\n this.cartLine = cartLine;\n this.simpleProduct = simpleProduct;\n this.isSelected = false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order table header resources.\n */\nexport interface IQuickOrderTableHeaderResources {\n quickOrderProductNumberText: string;\n quickOrderProductText: string;\n quickOrderUnitPriceText: string;\n quickOrderUnitOfMeasureText: string;\n quickOrderQuantityText: string;\n quickOrderTotalText: string;\n quickOrderActionsText: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderTableHeaderResources;\n}\n\n/**\n * Interface for quick order table header component.\n */\nexport interface IQuickOrderTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order header cells for desktop.\n * @param props -- The quick order table header props.\n * @returns The list of cells for quick order header component in desktop version.\n */\nconst QuickOrderDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderProductNumberText}\n {resources.quickOrderProductText}\n {resources.quickOrderUnitPriceText}\n {resources.quickOrderUnitOfMeasureText}\n {resources.quickOrderQuantityText}\n {resources.quickOrderTotalText}\n {resources.quickOrderActionsText}\n \n );\n};\n\n/**\n * Get the quick order header cells for mobile.\n * @param props -- The quick order table header props.\n * @returns The quick order header component in desktop version.\n */\nconst QuickOrderMobileHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderProductNumberText}\n \n \n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderTableHeaderComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { CartLine, format, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Data required to render each quick order row.\n */\nexport interface IQuickOrderTableRowData {\n cartLine: CartLine;\n product: SimpleProduct;\n}\n\n/**\n * Resources for quick order table rows.\n */\nexport interface IQuickOrderTableRowResources {\n quickOrderQuantityMobileText: string;\n quickOrderProductDimensionsSeparator: string;\n quickOrderViewDetailsButtonText: string;\n quickOrderViewDetailsButtonAriaLabel: string;\n quickOrderRemoveItemButtonAriaLabel: string;\n quickOrderInputQuantityAriaLabel: string;\n quickOrderDecrementButtonAriaLabel: string;\n quickOrderIncrementButtonAriaLabel: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderTableRowResources;\n}\n\n/**\n * The default image settings for quick order table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderTableRowProductImageComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const fallbackImageUrl = getFallbackImageUrl(\n props.data.product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
\n \n
\n );\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderExtraActionsPopupComponent: React.FC = (props: IQuickOrderTableRowProps): JSX.Element | null => {\n const product: SimpleProduct = props.data.product;\n\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n\n return (\n
\n
\n );\n};\n\n/**\n * Renders quick order table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order rows for desktop view.\n */\nexport const QuickOrderDesktopTableRowCellComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const product: SimpleProduct = props.data.product;\n const cartLine: CartLine = props.data.cartLine;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
\n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderProductDimensionsSeparator)}\n \n
\n \n {cartLine.Price}\n {cartLine.UnitOfMeasureSymbol}\n \n \n \n {cartLine.TotalAmount}\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 { 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;\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
  • {productAutoSuggestionHeading}
  • ;\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'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n return (\n // eslint-disable-next-line react/no-danger\n \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 \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 \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 {\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, ISearchState>}\n */\nclass Search extends React.Component, ISearchState> {\n private readonly searchTextInput: React.RefObject;\n\n private readonly searchCollapsedLabel: React.RefObject;\n\n private readonly formReference: React.RefObject;\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;\n\n private readonly autoSuggestResultDiv: React.RefObject;\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) {\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 {\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, 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),\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 ;\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 {\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 | React.KeyboardEvent | React.FormEvent\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 { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { DimensionTypes } from '@msdyn365-commerce-modules/retail-actions';\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\nexport interface IRefineItemData {\n sourceValue?: number;\n swatchImageUrl?: string;\n swatchColorHexCode?: string;\n refinerItemId: number;\n dataTypeValue?: number;\n name: string;\n label: string;\n count?: number;\n isChecked: boolean;\n refineItemUrl?: string;\n minValue?: string;\n maxValue?: string;\n dimensionType?: DimensionTypes;\n rowNumber?: number;\n unitText?: string;\n updatedSliderMaxValue?: string;\n updatedSliderMinValue?: string;\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 dataTypeValue === AttributeDataType.Currency || dataTypeValue === AttributeDataType.Decimal;\n}\n\n/**\n * Checks if the data type value corresponds to a range type integer.\n * @param dataTypeValue\n */\nexport function isRangeTypeForInteger(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Checks if the data type value corresponds to a custom input box Range.\n * @param dataTypeValue\n */\nexport function isCustomRangeTypeIntegerSelected(\n selectedRefinementCriterion: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy\n): boolean {\n return (\n selectedRefinementCriterion?.RowNumber !== undefined &&\n selectedRefinementCriterion?.RowNumber !== null &&\n selectedRefinementCriterion?.DataTypeValue === AttributeDataType.Integer &&\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n );\n}\n\n/**\n * Checks if the selectedRefinementCriterion is siingle type with API va;ues or custom type.\n * If custom type then RowNumber is null\n * @param dataTypeValue\n */\nexport function isSingleSelectRangeTypeIntegerSelected(\n selectedRefinementCriterion: ProductRefinerValue,\n productRefinerValue: ProductRefinerValue\n): boolean {\n return (\n productRefinerValue.LeftValueBoundString === selectedRefinementCriterion?.LeftValueBoundString &&\n productRefinerValue.RightValueBoundString === selectedRefinementCriterion?.RightValueBoundString &&\n selectedRefinementCriterion?.RowNumber !== undefined &&\n selectedRefinementCriterion?.RowNumber !== null &&\n selectedRefinementCriterion !== undefined\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(\n productRefinerValue: ProductRefinerValue,\n refinementCriterion: ProductRefinerValue,\n parent?: IProductRefinerHierarchy\n): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n // Distinguish by displaytype also\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n ((parent?.DisplayTemplateValue === DisplayTemplate.Range\n ? isRangeType(refinementCriterion.DataTypeValue)\n : isRangeTypeForInteger(refinementCriterion.DataTypeValue)) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getIntegerRangeName(productRefinerValue: ProductRefinerValue): string {\n let rangeValue = '';\n\n if (productRefinerValue.LeftValueBoundString === '' && productRefinerValue.RightValueBoundString !== '') {\n rangeValue = `< ${productRefinerValue.RightValueBoundLocalizedString || productRefinerValue.RightValueBoundString}`;\n } else if (productRefinerValue.RightValueBoundString === '' && productRefinerValue.LeftValueBoundString !== '') {\n rangeValue = `> ${productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}`;\n } else if (productRefinerValue.RightValueBoundString !== '' && productRefinerValue.LeftValueBoundString !== '') {\n rangeValue = `${productRefinerValue.LeftValueBoundLocalizedString ||\n productRefinerValue.LeftValueBoundString} - ${productRefinerValue.RightValueBoundString ||\n productRefinerValue.RightValueBoundString}`;\n }\n return rangeValue;\n}\n\n/**\n * Get input without formatting.\n * @param input - Input string.\n * @returns - Returns number.\n */\nexport function getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNumber = Number(input);\n if (!Number.isNaN(inputAsNumber)) {\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 = formattedPriceReverseLookup.get(input);\n // return reverseLookupResult || input;\n return input;\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n\n // Keeping only itemToggled value for integer-range type in currentRefinementCriteria\n if (\n itemToggleNotification.parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n itemToggleNotification.parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n currentRefinementCriteria = currentRefinementCriteria.filter(r => {\n return r.RefinerRecordId !== itemToggleNotification.productRefinerValue.RefinerRecordId;\n });\n }\n\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (\n isMatchingRefinementCriterion(\n itemToggleNotification.productRefinerValue,\n selectedCriterion,\n itemToggleNotification.parentProductRefinerHierarchy\n )\n ) {\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, itemToggleNotification.parentProductRefinerHierarchy)\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 { AttributeDataType, DisplayTemplate, 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 { getIntegerRangeName, isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n rangeDisplayType?: number | undefined;\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 const rangeParentDisplay = refinerHierarchy.filter(p => p.RecordId === selectedRefiner.RefinerRecordId);\n return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner,\n // parameter to store Display Template type\n rangeDisplayType: rangeParentDisplay[0]?.DisplayTemplateValue || undefined\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 // Get range value for Range display and integer type only (not for Integer with TextBox(4) display)\n const rangeInteger =\n item.value.DataTypeValue === AttributeDataType.Integer &&\n item.rangeDisplayType &&\n item.rangeDisplayType === DisplayTemplate.Range &&\n item.value.RefinerRecordId !== 0;\n const newIntRange = rangeInteger\n ? item.key\n : item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString || item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString;\n return (\n
    • \n \n {newIntRange}\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 let parent: IProductRefinerHierarchy | undefined;\n if (refinerHierarchy && refinerHierarchy.find) {\n 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 // Adding integer range format\n if (\n productRefinerValue.DataTypeValue === AttributeDataType.Integer &&\n parent?.DisplayTemplateValue === DisplayTemplate.Range &&\n productRefinerValue.RefinerRecordId !== 0\n ) {\n refinerValueName = getIntegerRangeName(productRefinerValue);\n return 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 {\n AttributeDataType,\n DisplayTemplate,\n ProductRefinerSource,\n ProductRefinerValue,\n RefinerType\n} 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';\nimport { getIntegerRangeName, isSingleSelectRangeTypeIntegerSelected } from './utilities';\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 if (\n parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n const rangeValue = getIntegerRangeName(productRefinerValue);\n return (\n
  • \n \n \n \n
  • \n );\n } else {\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \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 { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isUndefined } from 'lodash';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport { IRefineItemState } from './refine-item';\nimport { isCustomRangeTypeIntegerSelected } from './utilities';\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\nexport type RangeRefineItemInputType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemInputProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n rangeType: RangeRefineItemInputType;\n\n /**\n * The telemetry content\n */\n onToggle(notfication: Readonly): void;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemInputState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n invalidData: boolean | undefined;\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItemInput 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 public constructor(props: IRangeRefineItemInputProps) {\n super(props);\n this._changeMinInputRange = this._changeMinInputRange.bind(this);\n this._changeMaxInputRange = this._changeMaxInputRange.bind(this);\n this._applyCustom = this._applyCustom.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n let initialMin = '';\n let initialMax = '';\n const { selectedRefinementCriterion, parentProductRefinerHierarchy } = this.props;\n if (selectedRefinementCriterion) {\n initialMin = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\n ? ''\n : selectedRefinementCriterion?.LeftValueBoundString || '';\n initialMax = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\n ? ''\n : selectedRefinementCriterion?.RightValueBoundString || '';\n }\n\n this.state = {\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n invalidData: !(initialMin && initialMax),\n isChecked: false\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemInputProps, nextState: IRangeRefineItemInputState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n nextState.invalidData = !(nextState.selectedMin && nextState.selectedMax);\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemInputProps): void {\n if (previousProps !== this.props) {\n this.updateInputRangerProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n return undefined;\n }\n\n // /**\n // * Function to update slider props.\n // */\n private updateInputRangerProps(): void {\n const selectedMin = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\n ? ''\n : this.props.selectedRefinementCriterion?.LeftValueBoundString;\n const selectedMax = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\n ? ''\n : this.props.selectedRefinementCriterion?.RightValueBoundString;\n this.setState({ selectedMin, selectedMax });\n }\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { 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 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 return (\n
  • \n
    \n
    \n \n {' - '}\n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n
    \n
    \n \n
    \n
    \n
  • \n );\n }\n\n private _applyCustom(event: React.MouseEvent): void {\n const selectedMinValue = this._getInputWithoutFormatting(this.state.selectedMin || '');\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const { onToggle, parentProductRefinerHierarchy } = this.props;\n const max = this.state.selectedMax;\n\n const maxNum = max ? Number(max) : undefined;\n const productRefinerValue: ProductRefinerValue = {\n RefinerRecordId: parentProductRefinerHierarchy.Values[0].RefinerRecordId,\n LeftValueBoundString: this.state.selectedMin,\n RightValueBoundString: this.state.selectedMax,\n DataTypeValue: parentProductRefinerHierarchy.DataTypeValue,\n RefinerSourceValue: parentProductRefinerHierarchy.Values[0].RefinerSourceValue\n };\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true\n });\n }\n }\n\n private _changeMinInputRange(event: React.ChangeEvent): void {\n this.setState({\n selectedMin: event.target.value.trim()\n });\n }\n\n private _changeMaxInputRange(event: React.ChangeEvent): void {\n this.setState({\n selectedMax: event.target.value.trim()\n });\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 _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","/*!\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 {\n AttributeDataType,\n DisplayTemplate,\n ProductRefinerSource,\n ProductRefinerValue,\n RefinerType\n} 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, isRangeTypeForInteger } from './utilities';\nimport RangeRefineItemInput from './range-refine-item-input';\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 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 (\n productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n // Check if is of integer range type\n if (isRangeTypeForInteger(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 let selectedRefinementCriterion: ProductRefinerValue | 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 selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\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 {productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range && (\n \n )}\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 ObjectExtensions\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 { action, 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 @action\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?.skip &&\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 = !ObjectExtensions.isNullOrUndefined(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","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { format as formatNotification, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { action, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { AutoSuggest } from '@msdyn365-commerce-modules/address';\r\nimport { IAutoSuggestOptions } from '@msdyn365-commerce-modules/address';\r\nimport { AddressCommon } from '@msdyn365-commerce-modules/address';\r\nimport { AddressFormat } from '@msdyn365-commerce-modules/address';\r\nimport { AddressItemType } from '@msdyn365-commerce-modules/address';\r\nimport { AddressMetaData } from '@msdyn365-commerce-modules/address';\r\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '@msdyn365-commerce-modules/address';\r\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '@msdyn365-commerce-modules/address';\r\nimport { AddressList, IAddressListProps } from '@msdyn365-commerce-modules/address';\r\nimport { IEveAccountManagementAddressData } from './eve-account-management-address.data';\r\nimport { IEveAccountManagementAddressProps } from './eve-account-management-address.props.autogenerated';\r\nimport { defaultAddressTypeMap } from '../../utilities/DefaultAddressTypeMap';\r\n\r\n/**\r\n * Account management address view state interface.\r\n */\r\nexport interface IAccountManagementAddressViewState {\r\n isShowAddresList: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n}\r\n\r\n/**\r\n * Account management address view state interface.\r\n */\r\nexport interface IAccountManagementAddressViewProps\r\n extends React.Component<IEveAccountManagementAddressProps<IEveAccountManagementAddressData>> {\r\n className: string;\r\n currentOperation: AddressOperation;\r\n selectedAddress?: Address;\r\n addUpdateAddress: Address;\r\n countryRegionId: string;\r\n stateProvinceInfo?: StateProvinceInfo[];\r\n customerAddresses: Address[];\r\n validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: IAccountManagementAddressViewState;\r\n AccountAddressManagement: IModuleProps;\r\n isUpdating: boolean;\r\n showAddressList: IAddressListProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n screenReaderNotification: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * Address component.\r\n * @extends {React.Component<IEveAccountManagementAddressProps<IEveAccountManagementAddressData>>}\r\n */\r\n@observer\r\nclass AccountManagementAddress extends React.Component<IEveAccountManagementAddressProps<IEveAccountManagementAddressData>> {\r\n @observable private currentOperation: AddressOperation;\r\n\r\n @observable private selectedAddress?: Address;\r\n\r\n @observable private countryRegionId: string = 'USA';\r\n\r\n @observable private stateProvinceInfo?: StateProvinceInfo[];\r\n\r\n @observable private customerAddresses: Address[];\r\n\r\n @observable private addUpdateAddress: Address;\r\n\r\n @observable private validationError: object;\r\n\r\n @observable private addressActionResponse?: IAddressResponse;\r\n\r\n @observable private isUpdating?: boolean;\r\n\r\n @observable private hasError?: boolean;\r\n\r\n @observable private removeAddressData?: Address;\r\n\r\n private readonly addressCommon: AddressCommon;\r\n\r\n private addressFormat: AddressFormat;\r\n\r\n private countryRegions: CountryRegionInfo[] = [];\r\n\r\n private addressPurposes: AddressPurpose[] = [];\r\n\r\n private readonly resources: IAddressResource;\r\n\r\n private readonly defaultAddressType: number;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private autoSuggest?: AutoSuggest;\r\n\r\n public constructor(props: IEveAccountManagementAddressProps<IEveAccountManagementAddressData>) {\r\n super(props);\r\n const {\r\n context,\r\n data,\r\n resources,\r\n telemetry,\r\n config: { defaultAddressType }\r\n } = this.props;\r\n\r\n this.resources = resources;\r\n this.currentOperation = AddressOperation.List;\r\n this.countryRegions = data.countryRegions.result || [];\r\n this.addressPurposes = data.addressPurposes.result || [];\r\n this.customerAddresses = data.address.result || [];\r\n this.addUpdateAddress = {};\r\n this.validationError = {};\r\n this.addressCommon = new AddressCommon(context, resources, telemetry);\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n const _defaultAddressType = defaultAddressTypeMap[defaultAddressType || defaultAddressTypeMap.Delivery];\r\n this.defaultAddressType = _defaultAddressType || defaultAddressTypeMap.Delivery;\r\n }\r\n\r\n /**\r\n * On Suggestion Selected Function.\r\n * @param result - Microsoft.Maps.ISuggestionResult.\r\n */\r\n @action\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise<void> => {\r\n this._clearAddressFields();\r\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\r\n set(this.addUpdateAddress, { Street: '' });\r\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\r\n set(this.addUpdateAddress, { CountyName: address.CountyName });\r\n set(this.addUpdateAddress, { City: address.City });\r\n set(this.addUpdateAddress, { State: address.State });\r\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\r\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\r\n\r\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\r\n setTimeout(() => {\r\n set(this.addUpdateAddress, { Street: address.Street });\r\n }, 0);\r\n };\r\n\r\n /**\r\n * Clear Address Fields.\r\n */\r\n @action\r\n private readonly _clearAddressFields = (): void => {\r\n const addressFormatItem = this.addressFormat.getAddressFormat(\r\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n );\r\n addressFormatItem.forEach(format => {\r\n if (this.addUpdateAddress[format.name] !== undefined && !this.autoSuggest?.excludedAddressFields.includes(format.name)) {\r\n this.addressFormat[format.name] = '';\r\n }\r\n });\r\n this._clearValidation();\r\n };\r\n\r\n /**\r\n * Clear Validation Function.\r\n */\r\n @action\r\n private readonly _clearValidation = (): void => {\r\n this.validationError = {};\r\n };\r\n\r\n public async componentDidMount(): Promise<void> {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled, autoSuggestOptions }\r\n } = this.props;\r\n\r\n // Initializing data props\r\n this._dataInitialize(this.props);\r\n\r\n this.props.data.countryRegions.then(() => {\r\n this._setDefaultCountryRegionId();\r\n });\r\n\r\n reaction(\r\n () => this.countryRegionId,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.currentOperation,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n if (autoSuggestionEnabled) {\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\r\n this.autoSuggest = new AutoSuggest(\r\n telemetry,\r\n options,\r\n channel?.BingMapsApiKey,\r\n channel?.ChannelCountryRegionISOCode,\r\n channel?.DefaultLanguageId\r\n );\r\n\r\n reaction(\r\n () =>\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi !== undefined &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\r\n async () => {\r\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n );\r\n\r\n reaction(\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\r\n },\r\n async () => {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Component did mount function.\r\n */\r\n public async componentDidUpdate(): Promise<void> {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n } else {\r\n this.autoSuggest?.disposeAutoSuggest();\r\n }\r\n }\r\n\r\n /**\r\n * Should component update function.\r\n * @param nextProps - Account management address props.\r\n * @param nextState - Next state.\r\n * @returns - True if component should update, false otherwise.\r\n */\r\n public shouldComponentUpdate(\r\n nextProps: IEveAccountManagementAddressProps<IEveAccountManagementAddressData>,\r\n nextState: IAccountManagementAddressViewState\r\n ): 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 {\r\n const { renderView, config } = this.props;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n currentOperation: this.currentOperation,\r\n selectedAddress: this.selectedAddress,\r\n addUpdateAddress: this.addUpdateAddress,\r\n countryRegionId: this.countryRegionId,\r\n stateProvinceInfo: this.stateProvinceInfo,\r\n customerAddresses: this.customerAddresses,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n isUpdating: this.isUpdating,\r\n hasError: this.hasError,\r\n className: config.className,\r\n viewState: {\r\n isShowAddresList: this.currentOperation === AddressOperation.List,\r\n isShowAddOrUpdateAddress: this.currentOperation !== AddressOperation.List\r\n },\r\n AccountAddressManagement: {\r\n moduleProps: this.props,\r\n className: classnames('ms-account-management-address', config.className)\r\n },\r\n showAddressList: this._renderListAddress(),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\r\n screenReaderNotification: this.removeAddressData ? this._renderScreenReaderRemoveText(this.removeAddressData) : null\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Method data initialization.\r\n * @param props -The account management props.\r\n */\r\n private readonly _dataInitialize = (props: IEveAccountManagementAddressProps<IEveAccountManagementAddressData>): void => {\r\n const { data } = props;\r\n\r\n reaction(\r\n () => data.countryRegions.result,\r\n () => {\r\n this.countryRegions = data.countryRegions.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.addressPurposes.result,\r\n () => {\r\n this.addressPurposes = data.addressPurposes.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.address.result,\r\n () => {\r\n this.customerAddresses = data.address.result ?? [];\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Render Add Or Update Address Function.\r\n * @returns - AddressAddUpdate.\r\n */\r\n private readonly _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\r\n return AddressAddUpdate({\r\n isUpdating: this.isUpdating,\r\n resources: this.resources,\r\n addressType: AddressType.Shipping,\r\n addressFormat: this.addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n defaultAddressType: this.defaultAddressType,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(\r\n this.resources.addressStateDefaultSelectionText,\r\n this.stateProvinceInfo\r\n ),\r\n telemetryContent: this.telemetryContent,\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n onSave: this._onAddressAddUpdateSubmit,\r\n onCancel: this._resetView\r\n });\r\n };\r\n\r\n /**\r\n * Render List Address Function.\r\n * @returns - AddressList.\r\n */\r\n private readonly _renderListAddress = (): IAddressListProps => {\r\n const { config } = this.props;\r\n\r\n /**\r\n * Render Address ttitle.\r\n * @param event - Msdyn365.ContentEditableEvent.\r\n */\r\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\r\n config.heading!.text = event.target.value;\r\n };\r\n const heading = config.heading && {\r\n text: config.heading.text,\r\n headingTag: config.heading.tag\r\n };\r\n\r\n return AddressList({\r\n isUpdating: this.isUpdating,\r\n selectedAddress: this.selectedAddress,\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n addressPurposes: this.addressPurposes,\r\n resources: this.resources,\r\n heading,\r\n primaryAddressSectionHeading: config.primaryAddressSectionHeading,\r\n otherAddressSectionHeading: config.otherAddressSectionHeading,\r\n contextRequest: this.props.context.request,\r\n telemetryContent: this.telemetryContent,\r\n handleLineItemHeadingChange,\r\n onEditAddress: this._goToEditAddress,\r\n onRemoveAddress: this._onRemoveAddress,\r\n onAddAddress: this._goToAddAddress,\r\n onUpdatePrimaryAddress: this._onSubmitUpdatePrimaryAddress\r\n });\r\n };\r\n\r\n /**\r\n * Attach Map Auto Suggest Function.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise<void> => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\r\n }\r\n };\r\n\r\n /**\r\n * On Address Add Update Function.\r\n * @param name - String.\r\n * @param value - String | Boolean | Number.\r\n */\r\n private readonly onAddressAddUpdate = (name: string, value: string | boolean | number) => {\r\n set(this.addUpdateAddress, { [name]: value });\r\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\r\n };\r\n\r\n /**\r\n * On Address Add Update Input Change.\r\n * @param event - Input Change Event.\r\n */\r\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n if (event.target.type === 'checkbox') {\r\n this.onAddressAddUpdate(event.target.name, event.target.checked);\r\n } else {\r\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n this.onAddressAddUpdate(event.target.name, value);\r\n }\r\n };\r\n\r\n /**\r\n * On Address Add Update Dropdown Change.\r\n * @param event - Dropdown Change Event.\r\n */\r\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent<HTMLSelectElement>): void => {\r\n if (event.target.name === AddressItemType[AddressItemType.AddressTypeValue]) {\r\n this.onAddressAddUpdate(event.target.name, +event.target.value);\r\n } else {\r\n this.onAddressAddUpdate(event.target.name, event.target.value);\r\n }\r\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\r\n this._onCountryChange(event.target.value);\r\n }\r\n };\r\n\r\n /**\r\n * On Address Update Function.\r\n * @param response - Promise<IAddressResponse>.\r\n * @param onSuccess - IAddressResponse.\r\n */\r\n private readonly _onAddressUpdate = (response: Promise<IAddressResponse>, onSuccess: (response: IAddressResponse) => void): void => {\r\n this.isUpdating = true;\r\n response.then(\r\n (result: IAddressResponse) => {\r\n if (result.address) {\r\n this.hasError = false;\r\n onSuccess(result);\r\n } else {\r\n this.hasError = true;\r\n this.addressActionResponse = result;\r\n }\r\n this.isUpdating = false;\r\n },\r\n () => {\r\n this.hasError = true;\r\n this.isUpdating = false;\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * On Address Add Update Submit Function.\r\n */\r\n private readonly _onAddressAddUpdateSubmit = (): void => {\r\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\r\n return;\r\n }\r\n let response: Promise<IAddressResponse>;\r\n if (this.addressCommon.isAuthenticatedFlow()) {\r\n response =\r\n this.currentOperation === AddressOperation.Update\r\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\r\n : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\r\n } else {\r\n response = Promise.resolve({ address: this.addUpdateAddress });\r\n }\r\n\r\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\r\n };\r\n\r\n /**\r\n * On Country Change Function.\r\n * @param countryRegionId - String.\r\n */\r\n private readonly _onCountryChange = (countryRegionId: string) => {\r\n this.countryRegionId = countryRegionId;\r\n const twoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\r\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\r\n set(this.addUpdateAddress, { TwoLetterISORegionName: twoLetterISORegionName });\r\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterISORegionName);\r\n this._clearAddressFields();\r\n };\r\n\r\n /**\r\n * Get Address Format Exclude List Function.\r\n * @returns - Address Format Exclude List.\r\n */\r\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\r\n const { config } = this.props;\r\n const addressFormatExcludeList: AddressItemType[] = [];\r\n\r\n if (!config.showAddressType) {\r\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\r\n }\r\n\r\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\r\n\r\n return addressFormatExcludeList;\r\n };\r\n\r\n /**\r\n * Get State Provinces Function.\r\n */\r\n private readonly _getStateProvinces = (): void => {\r\n if (\r\n !this.countryRegionId ||\r\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n return;\r\n }\r\n\r\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\r\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\r\n\r\n // Reset state if selected state not found in the list.\r\n if (!stateInfo) {\r\n set(this.addUpdateAddress, { State: '' });\r\n }\r\n this.stateProvinceInfo = result;\r\n });\r\n };\r\n\r\n private _setDefaultCountryRegionId(): void {\r\n const { request } = this.props.context;\r\n const market = request && request.channel && request.channel.ChannelCountryRegionISOCode;\r\n\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n /**\r\n * Update CurrentOperation Function.\r\n * @param operation - AddressOperation.\r\n */\r\n private readonly _updateCurrentOperation = (operation: AddressOperation) => {\r\n this.currentOperation = operation;\r\n this._clearAddressFields();\r\n };\r\n\r\n /**\r\n * On Submit Update Primary Address Function.\r\n * @param address - Address.\r\n */\r\n private readonly _onSubmitUpdatePrimaryAddress = (address: Address): void => {\r\n this.selectedAddress = address;\r\n const response = this.addressCommon.updateCustomerPrimaryAddress(address);\r\n this._onAddressUpdate(response, this._onUpdatePrimaryAddressSuccess);\r\n };\r\n\r\n /**\r\n * Go To Edit Address Function.\r\n * @param address - Address.\r\n */\r\n private readonly _goToEditAddress = (address: Address): void => {\r\n this.addUpdateAddress = { ...address };\r\n this.countryRegionId = this.addUpdateAddress.ThreeLetterISORegionName || 'USA';\r\n this._updateCurrentOperation(AddressOperation.Update);\r\n };\r\n\r\n /**\r\n * On Remove Address Function.\r\n * @param address - Address.\r\n */\r\n private readonly _onRemoveAddress = (address: Address): void => {\r\n address.Deactivate = true;\r\n this.removeAddressData = address;\r\n const response = this.addressCommon.updateCustomerAddress(address);\r\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\r\n };\r\n\r\n /**\r\n * Renders Notification screen reader text for removed address.\r\n * @param address - Address input.\r\n * @returns Notification for removed address.\r\n */\r\n private readonly _renderScreenReaderRemoveText = (address: Address): React.ReactNode => {\r\n const notification = formatNotification(this.resources.removeAddressNotification!, `${address.Name!}`);\r\n return (\r\n <div className='remove-address-screen-reader' aria-live='polite'>\r\n {notification}\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * Go To Add Address Function.\r\n */\r\n private readonly _goToAddAddress = (): void => {\r\n this.addUpdateAddress = {};\r\n this._setDefaultCountryRegionId();\r\n set(this.addUpdateAddress, { ThreeLetterISORegionName: this.countryRegionId });\r\n set(this.addUpdateAddress, { AddressTypeValue: this.defaultAddressType });\r\n this._setDefaultCountryRegionId();\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n };\r\n\r\n /**\r\n * On Add Or Update Success Function.\r\n * @param response - IAddressResponse.\r\n */\r\n private readonly _onAddOrUpdateSuccess = (response: IAddressResponse): void => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n this._resetView();\r\n };\r\n\r\n /**\r\n * On Update Primary Address Success Function.\r\n * @param response - IAddressResponse.\r\n */\r\n private readonly _onUpdatePrimaryAddressSuccess = (response: IAddressResponse): void => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n };\r\n\r\n /**\r\n * Reset view function.\r\n */\r\n private readonly _resetView = (): void => {\r\n this.selectedAddress = undefined;\r\n this._updateCurrentOperation(AddressOperation.List);\r\n };\r\n}\r\n\r\nexport default AccountManagementAddress;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IImageProps, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IEveCheckoutShippingAddressResources } from '../eve-checkout-shipping-address.props.autogenerated';\r\n\r\n/**\r\n * The cartline product interface.\r\n */\r\nexport interface ICartLineWithProduct {\r\n cartLine: CartLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * The checkout shipping cartline interface.\r\n */\r\nexport interface ICheckoutShippingCartLineInfo {\r\n lineId: string;\r\n imageProps: IImageProps;\r\n quantity: number;\r\n}\r\n\r\n/**\r\n * The checkout shipping cartline props.\r\n */\r\nexport interface ICheckoutShippingCartLinesProps {\r\n moduleClassName: string;\r\n cartLines: ICheckoutShippingCartLineInfo[];\r\n title: string;\r\n itemTitle: string;\r\n resources: IEveCheckoutShippingAddressResources;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Following as per module\r\nexport const CheckoutPickupCartLines: React.FC<ICheckoutShippingCartLinesProps> = ({\r\n moduleClassName,\r\n cartLines,\r\n title,\r\n itemTitle,\r\n resources\r\n}) => {\r\n if (!ArrayExtensions.hasElements(cartLines)) {\r\n return null;\r\n }\r\n const quantity = 1;\r\n return (\r\n <div className={`${moduleClassName}__group-images`}>\r\n <div className={`${moduleClassName}__group-images-header`}>\r\n <div className={`${moduleClassName}__group-images-header-main`}>{title}</div>\r\n <div className={`${moduleClassName}__group-images-header-item`}>{itemTitle}</div>\r\n </div>\r\n <div className={`${moduleClassName}__group-images-lines`}>\r\n {cartLines.map((cartLine: ICheckoutShippingCartLineInfo) => {\r\n const isShowQty = cartLine.quantity > quantity;\r\n let className = `${moduleClassName}__group-images-lines-product`;\r\n if (isShowQty) {\r\n className = classnames(className, ' product-image-wide');\r\n }\r\n return (\r\n <div className={className} key={cartLine.lineId}>\r\n <Image {...cartLine.imageProps} />\r\n {isShowQty && (\r\n <div\r\n className={`${moduleClassName}__group-images-lines-line-quantity`}\r\n aria-labelledby={cartLine.lineId}\r\n aria-hidden='true'\r\n >\r\n {cartLine.quantity}\r\n </div>\r\n )}\r\n <span id={cartLine.lineId} className='msc-line__quantity sr-only'>\r\n {format(resources.productQuantityInfo, cartLine.quantity, cartLine.imageProps.altText)}\r\n </span>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * The checkout shipping cartline image settings.\r\n */\r\nexport const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\r\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\r\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\r\n },\r\n lazyload: true,\r\n quality: 80\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Address, AddressPurpose, CartLine, CountryRegionInfo, SimpleProduct, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { getFallbackImageUrl, getSimpleProducts, ObjectExtensions, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { action, computed, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { AutoSuggest } from '@msdyn365-commerce-modules/address';\r\nimport { IAutoSuggestOptions } from '@msdyn365-commerce-modules/address';\r\nimport { AddressCommon } from '@msdyn365-commerce-modules/address';\r\nimport { AddressFormat } from '@msdyn365-commerce-modules/address';\r\nimport { AddressItemType } from '@msdyn365-commerce-modules/address';\r\nimport { AddressMetaData } from '@msdyn365-commerce-modules/address';\r\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '@msdyn365-commerce-modules/address';\r\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '@msdyn365-commerce-modules/address';\r\nimport { AddressSelect, IAddressSelectProps } from '@msdyn365-commerce-modules/address';\r\nimport { AddressShow, IAddressShowProps } from '@msdyn365-commerce-modules/address';\r\nimport { IEveCheckoutShippingAddressData } from './eve-checkout-shipping-address.data';\r\nimport { IEveCheckoutShippingAddressProps } from './eve-checkout-shipping-address.props.autogenerated';\r\nimport {\r\n CheckoutPickupCartLines,\r\n defaultImageSettings,\r\n ICartLineWithProduct,\r\n ICheckoutShippingCartLineInfo,\r\n ICheckoutShippingCartLinesProps\r\n} from './components/checkout-shipping-cartlines-images';\r\nimport { defaultAddressTypeMap } from '../../utilities/DefaultAddressTypeMap';\r\n\r\n/**\r\n * The checkout address props interface.\r\n */\r\nexport interface ICheckoutAddressProps extends IEveCheckoutShippingAddressProps<IEveCheckoutShippingAddressData>, IModuleStateProps {}\r\n\r\n/**\r\n * The checkout shipping address view state.\r\n */\r\nexport interface ICheckoutShippingAddressViewState {\r\n isShowAddress: boolean;\r\n isShowAddresList: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n}\r\n\r\n/**\r\n * The checkout shipping address state.\r\n */\r\nexport interface ICheckoutAddresState {\r\n shippingGroups: ICartLineWithProduct[];\r\n}\r\n\r\n/**\r\n * The checkout shipping address view props.\r\n */\r\nexport interface ICheckoutShippingAddressViewProps extends ICheckoutAddressProps {\r\n className: string;\r\n currentOperation: AddressOperation;\r\n selectedAddress?: Address;\r\n addUpdateAddress: Address;\r\n addressListSelectedAddress: Address;\r\n countryRegionId: string;\r\n stateProvinceInfo?: StateProvinceInfo[];\r\n customerAddresses: Address[];\r\n validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: ICheckoutShippingAddressViewState;\r\n CheckoutShippingAddress: IModuleProps;\r\n isUpdating: boolean;\r\n hasError: boolean;\r\n showAddress: IAddressShowProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n cartLineImages?: React.ReactNode;\r\n showAddressSelect: IAddressSelectProps;\r\n showAddOrUpdateAddressHandler?(onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps;\r\n showAddressSelectHandler?(\r\n onAddAddressHandler?: () => void,\r\n onSaveHandler?: () => void,\r\n onCancelHandler?: () => void\r\n ): IAddressSelectProps;\r\n}\r\n\r\n/**\r\n *\r\n * Address component.\r\n * @extends {React.Component<IEveCheckoutShippingAddressProps<IEveCheckoutShippingAddressData>>}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass CheckoutShippingAddress extends React.Component<ICheckoutAddressProps, ICheckoutAddresState> {\r\n @observable private currentOperation: AddressOperation;\r\n\r\n @observable private selectedAddress?: Address;\r\n\r\n @observable private addUpdateAddress: Address;\r\n\r\n @observable private countryRegionId: string = 'USA';\r\n\r\n @observable private stateProvinceInfo?: StateProvinceInfo[];\r\n\r\n @observable private customerAddresses: Address[] = [];\r\n\r\n @observable private validationError: object;\r\n\r\n @observable private addressActionResponse?: IAddressResponse;\r\n\r\n @observable private isUpdating?: boolean;\r\n\r\n @observable private hasError?: boolean;\r\n\r\n @observable private addressListSelectedAddress: Address = {};\r\n\r\n private readonly addressCommon: AddressCommon;\r\n\r\n private addressFormat!: AddressFormat;\r\n\r\n private countryRegions: CountryRegionInfo[] = [];\r\n\r\n private addressPurposes: AddressPurpose[] = [];\r\n\r\n private readonly resources: IAddressResource;\r\n\r\n private readonly defaultAddressType: number;\r\n\r\n private readonly telemetryContent?: ITelemetryContent;\r\n\r\n private autoSuggest?: AutoSuggest;\r\n\r\n private readonly multiplePickupStoreSwitchName: string = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n public constructor(props: ICheckoutAddressProps) {\r\n super(props);\r\n this.state = { shippingGroups: [] };\r\n const {\r\n context,\r\n data,\r\n resources,\r\n telemetry,\r\n config: { defaultAddressType }\r\n } = this.props;\r\n\r\n const _defaultAddressType = defaultAddressTypeMap[defaultAddressType || defaultAddressTypeMap.Delivery];\r\n this.defaultAddressType = _defaultAddressType || defaultAddressTypeMap.Delivery;\r\n this.addUpdateAddress = {};\r\n this.resources = resources;\r\n this.currentOperation = AddressOperation.List;\r\n this.countryRegions = data.countryRegions.result || [];\r\n this.addressPurposes = data.addressPurposes.result || [];\r\n this.customerAddresses = data.address.result || [];\r\n this.stateProvinceInfo = data.countryStates.result || [];\r\n this.addressCommon = new AddressCommon(context, resources, telemetry);\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n this.validationError = {};\r\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\r\n feature => feature.Name === this.multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n }\r\n\r\n /**\r\n * Initialize pickup group.\r\n */\r\n @action\r\n private readonly _initPickupGroup = async (): Promise<void> => {\r\n const pickupCartLines: CartLine[] = this._getCartLinesforDelivery();\r\n const cartLines: ICartLineWithProduct[] = [];\r\n\r\n try {\r\n const products = await this._getProductsByCartLines(\r\n this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0,\r\n pickupCartLines\r\n );\r\n for (const line of pickupCartLines) {\r\n const product: SimpleProduct | undefined = products.find(x => x.RecordId === line.ProductId);\r\n cartLines.push({ cartLine: line, product });\r\n }\r\n this.setState({ shippingGroups: cartLines });\r\n } catch (error) {\r\n this.props.telemetry.error(error as string);\r\n this.setState({ shippingGroups: [] });\r\n }\r\n };\r\n\r\n /**\r\n * On suggestion selected.\r\n * @param result - Suggestion result interface.\r\n */\r\n @action\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise<void> => {\r\n this._clearAddressFields();\r\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\r\n const timeout = 0;\r\n set(this.addUpdateAddress, { Street: '' });\r\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\r\n set(this.addUpdateAddress, { CountyName: address.CountyName });\r\n set(this.addUpdateAddress, { City: address.City });\r\n set(this.addUpdateAddress, { State: address.State });\r\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\r\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\r\n\r\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\r\n setTimeout(() => {\r\n set(this.addUpdateAddress, { Street: address.Street });\r\n }, timeout);\r\n };\r\n\r\n /**\r\n * Method to clear address fields.\r\n */\r\n @action\r\n private readonly _clearAddressFields = (): void => {\r\n const addressFormatItem = this.addressFormat.getAddressFormat(\r\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n );\r\n for (const formatAddress of addressFormatItem) {\r\n if (\r\n this.addUpdateAddress[formatAddress.name] !== undefined &&\r\n !this.autoSuggest?.excludedAddressFields.includes(formatAddress.name)\r\n ) {\r\n this.addressFormat[formatAddress.name] = '';\r\n }\r\n }\r\n this._clearValidation();\r\n };\r\n\r\n /**\r\n * Method to clear validation.\r\n */\r\n @action\r\n private readonly _clearValidation = (): void => {\r\n this.validationError = {};\r\n };\r\n\r\n public async componentDidMount(): Promise<void> {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled, autoSuggestOptions },\r\n resources\r\n } = this.props;\r\n\r\n // Initializing data props\r\n this._dataInitialize(this.props);\r\n\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n\r\n this.props.data.checkout.then(() => {\r\n this._setDefaultCountryRegionId();\r\n this._initModuleState();\r\n });\r\n\r\n reaction(\r\n () => this.countryRegionId,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.currentOperation,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n if (autoSuggestionEnabled) {\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\r\n this.autoSuggest = new AutoSuggest(\r\n telemetry,\r\n options,\r\n channel?.BingMapsApiKey,\r\n channel?.ChannelCountryRegionISOCode,\r\n channel?.DefaultLanguageId\r\n );\r\n\r\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\r\n if (\r\n this.props.data.storeSelectorStateManager.result &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n await this.autoSuggest._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n\r\n reaction(\r\n () =>\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\r\n async () => {\r\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\r\n async () => {\r\n await this._attachMapAutoSuggest();\r\n }\r\n );\r\n }\r\n await this._initPickupGroup();\r\n }\r\n\r\n public async componentDidUpdate(): Promise<void> {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n } else {\r\n this.autoSuggest?.disposeAutoSuggest();\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: ICheckoutAddressProps, nextState: ICheckoutAddresState): 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 if (!this._canShip()) {\r\n return null;\r\n }\r\n\r\n const { config, context, renderView, resources } = this.props;\r\n const { headingImages, itemsText, singleItemText } = resources;\r\n const { imageSettings } = config;\r\n\r\n // Line images\r\n const cartlines: ICheckoutShippingCartLineInfo[] = this.state.shippingGroups\r\n .filter(x => !ObjectExtensions.isNullOrUndefined(x.product))\r\n .map(line => ({\r\n lineId: line.cartLine.LineId ?? '',\r\n imageProps: {\r\n requestContext: context.actionContext.requestContext,\r\n className: 'ms-checkout-shipping-address__group-images-lines-line-image',\r\n altText: line.product?.Name,\r\n src: line.product?.PrimaryImageUrl ?? '',\r\n fallBackSrc: getFallbackImageUrl(line.product?.ItemId, context.actionContext.requestContext.apiSettings),\r\n gridSettings: context.request.gridSettings!,\r\n imageSettings: imageSettings ?? defaultImageSettings,\r\n loadFailureBehavior: 'empty'\r\n },\r\n quantity: line.cartLine.Quantity ?? 0\r\n }));\r\n\r\n const quantity = 1;\r\n const itemText = cartlines.length > quantity ? itemsText : singleItemText;\r\n\r\n const lineImageProps: ICheckoutShippingCartLinesProps = {\r\n moduleClassName: 'ms-checkout-shipping-address',\r\n cartLines: cartlines.filter(x => !ObjectExtensions.isNullOrUndefined(x)),\r\n itemTitle: `(${format(itemText, cartlines.length)})`,\r\n title: headingImages,\r\n resources: this.props.resources\r\n };\r\n\r\n const cartLineImages: React.ReactNode = <CheckoutPickupCartLines {...lineImageProps} />;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const { featureState } = this.props.data;\r\n const isRetailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n currentOperation: this.currentOperation,\r\n selectedAddress: this.selectedAddress,\r\n addUpdateAddress: this.addUpdateAddress,\r\n addressListSelectedAddress: this.addressListSelectedAddress,\r\n countryRegionId: this.countryRegionId,\r\n stateProvinceInfo: this.stateProvinceInfo,\r\n customerAddresses: this.customerAddresses,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n isUpdating: this.isUpdating,\r\n hasError: this.hasError,\r\n className: config.className,\r\n viewState: {\r\n isShowAddress: this.currentOperation === AddressOperation.Show && this.selectedAddress,\r\n isShowAddresList: this.currentOperation === AddressOperation.List && this.customerAddresses.length > 0,\r\n isShowAddOrUpdateAddress:\r\n this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update\r\n },\r\n CheckoutShippingAddress: {\r\n moduleProps: this.props,\r\n className: classnames('ms-checkout-shipping-address', config.className)\r\n },\r\n showAddress: this._renderShowAddress(),\r\n\r\n /**\r\n * Show address select.\r\n * @param onAddAddressHandler - On add address click function.\r\n * @param onSaveHandler - On save click function.\r\n * @param onCancelHandler - On cancel click function.\r\n * @returns - Renders select address.\r\n */\r\n showAddressSelectHandler: (onAddAddressHandler?: () => void, onSaveHandler?: () => void, onCancelHandler?: () => void) =>\r\n this._renderSelectAddress(onAddAddressHandler, onSaveHandler, onCancelHandler),\r\n\r\n /**\r\n * Show add/update address.\r\n * @param onSaveHandler - On save click function.\r\n * @param onCancelHandler - On cancel click function.\r\n * @returns - Renders select address.\r\n */\r\n showAddOrUpdateAddressHandler: (onSaveHandler?: () => void, onCancelHandler?: () => void) =>\r\n this._renderAddOrUpdateAddress(onSaveHandler, onCancelHandler),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\r\n cartLineImages: isRetailMultiplePickUpOptionEnabled ? cartLineImages : undefined,\r\n showAddressSelect: this._renderSelectAddress()\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Method data initialization.\r\n * @param props -The checkout address properties.\r\n */\r\n private readonly _dataInitialize = (props: ICheckoutAddressProps): void => {\r\n const { data } = props;\r\n\r\n reaction(\r\n () => data.countryRegions.result,\r\n () => {\r\n this.countryRegions = data.countryRegions.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.addressPurposes.result,\r\n () => {\r\n this.addressPurposes = data.addressPurposes.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.address.result,\r\n () => {\r\n this.customerAddresses = data.address.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.countryStates.result,\r\n () => {\r\n this.stateProvinceInfo = data.countryStates.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.featureState.result,\r\n () => {\r\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\r\n feature => feature.Name === this.multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Method to get cart lines for delivery.\r\n * @returns The cart line collection.\r\n */\r\n private readonly _getCartLinesforDelivery = (): CartLine[] => {\r\n return this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(line => this._isDelivery(line)) ?? [];\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param line -The cart line.\r\n * @returns True/false as per cart line delivery mode.\r\n */\r\n private readonly _isDelivery = (line: CartLine): boolean => {\r\n return this._isNotPickupMode(line.DeliveryMode) && (line.FulfillmentStoreId === undefined || line.FulfillmentStoreId === '');\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param deliveryMode -The delivery mode.\r\n * @returns True/false as per cart line delivery mode.\r\n */\r\n private readonly _isNotPickupMode = (deliveryMode: string | undefined): boolean => {\r\n const pickupDeliveryModeCode = this.props.context.request.channel?.PickupDeliveryModeCode;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const { channelDeliveryOptionConfig, featureState } = this.props.data;\r\n const retailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\r\n const pickupDeliveryMode = channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.some(\r\n pickupMode => pickupMode !== deliveryMode\r\n );\r\n return pickupDeliveryMode !== undefined ? pickupDeliveryMode : false;\r\n }\r\n return deliveryMode !== undefined && pickupDeliveryModeCode !== undefined && deliveryMode !== pickupDeliveryModeCode;\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param channelId - The channelId.\r\n * @param cartLines - Cart line collections.\r\n * @returns Collection of SimpleProduct.\r\n */\r\n private readonly _getProductsByCartLines = async (channelId: number, cartLines: CartLine[]): Promise<SimpleProduct[]> => {\r\n const actionContext = this.props.context.actionContext;\r\n const productInputs = cartLines\r\n .filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId))\r\n .map(line => new ProductInput(line.ProductId || 0, actionContext.requestContext.apiSettings, channelId));\r\n return getSimpleProducts(productInputs, actionContext);\r\n };\r\n\r\n /**\r\n * Method to render add/update address.\r\n * @param onSaveHandler -- Handles onsave functionality.\r\n * @param onCancelHandler -- Handles oncancel functionality.\r\n * @returns Address app/update props.\r\n */\r\n private readonly _renderAddOrUpdateAddress = (onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps => {\r\n const addressFormat =\r\n this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow()\r\n ? this.addressFormat\r\n : this.addressFormat;\r\n\r\n /**\r\n * On Cancel Button Function.\r\n */\r\n const onCancelButtonHandler = () => {\r\n this._resetView();\r\n onCancelHandler?.();\r\n };\r\n return AddressAddUpdate({\r\n isUpdating: this.isUpdating,\r\n resources: this.resources,\r\n addressType: AddressType.Shipping,\r\n addressFormat: addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n defaultAddressType: this.defaultAddressType,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n hasError: this.hasError,\r\n addressActionResponse: this.addressActionResponse,\r\n telemetryContent: this.telemetryContent,\r\n dropdownDisplayData: addressFormat.getPrefilledAddressDropdownData(\r\n this.resources.addressStateDefaultSelectionText,\r\n this.stateProvinceInfo\r\n ),\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n\r\n /**\r\n * On Save Function.\r\n */\r\n onSave: () => {\r\n this.onSubmit();\r\n onSaveHandler?.();\r\n },\r\n\r\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => {} : onCancelButtonHandler\r\n });\r\n };\r\n\r\n /**\r\n * Method to render select address.\r\n * @param onAddAddressHandler - To handle add address button click.\r\n * @param onSaveHandler - To handle save button click.\r\n * @param onCancelHandler - To handle cancel button click.\r\n * @returns Select address props.\r\n */\r\n private readonly _renderSelectAddress = (\r\n onAddAddressHandler?: () => void,\r\n onSaveHandler?: () => void,\r\n onCancelHandler?: () => void\r\n ): IAddressSelectProps => {\r\n /**\r\n * On Cancel Button Function.\r\n */\r\n const onCancelButtonHandler = () => {\r\n this._resetView();\r\n onCancelHandler?.();\r\n };\r\n return AddressSelect({\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n resources: this.resources,\r\n addressPurposes: this.addressPurposes,\r\n selectedAddress: this.addressListSelectedAddress,\r\n onAddressOptionChange: this._onAddressOptionChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n telemetryContent: this.telemetryContent,\r\n\r\n /**\r\n * On Add Address Function.\r\n */\r\n onAddAddress: () => {\r\n this._goToAddAddress();\r\n onAddAddressHandler?.();\r\n },\r\n\r\n /**\r\n * On Save Function.\r\n */\r\n onSave: () => {\r\n this._onSelectAddress();\r\n onSaveHandler?.();\r\n },\r\n\r\n onCancel: !this.selectedAddress ? () => {} : onCancelButtonHandler\r\n });\r\n };\r\n\r\n /**\r\n * Method to render show address.\r\n * @returns Show address props.\r\n */\r\n private _renderShowAddress(): IAddressShowProps | null {\r\n if (this.selectedAddress) {\r\n return AddressShow({\r\n address: this.selectedAddress,\r\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || ''),\r\n addressPurposes: this.addressPurposes\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to render map auto suggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise<void> => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\r\n }\r\n };\r\n\r\n /**\r\n * Method gets called on address option change.\r\n * @param event - To get current option.\r\n */\r\n private readonly _onAddressOptionChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const addressRecordId = event.currentTarget.value;\r\n const selectedAddress = this.customerAddresses.find(address => (address.RecordId || '').toString() === addressRecordId);\r\n if (selectedAddress) {\r\n this.addressListSelectedAddress = selectedAddress;\r\n }\r\n };\r\n\r\n /**\r\n * Method to render map auto suggest.\r\n * @param name - Address name field.\r\n * @param value - Address name value field.\r\n */\r\n private readonly onAddressAddUpdate = (name: string, value: string | boolean) => {\r\n set(this.addUpdateAddress, { [name]: value });\r\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\r\n };\r\n\r\n /**\r\n * Method to get called on address update change.\r\n * @param event - Input element.\r\n */\r\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n if (event.target.type === 'checkbox') {\r\n this.onAddressAddUpdate(event.target.name, event.target.checked);\r\n } else {\r\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n this.onAddressAddUpdate(event.target.name, value);\r\n }\r\n };\r\n\r\n /**\r\n * Method to get called on address update dropdown change.\r\n * @param event - Select element.\r\n */\r\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent<HTMLSelectElement>): void => {\r\n this.onAddressAddUpdate(event.target.name, event.target.value);\r\n\r\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\r\n this._onCountryChange(event.target.value);\r\n }\r\n };\r\n\r\n /**\r\n * Method to get called on address update submit.\r\n */\r\n private readonly _onAddressAddUpdateSubmit = (): void => {\r\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\r\n return;\r\n }\r\n\r\n let response: Promise<IAddressResponse>;\r\n if (this.addressCommon.isAuthenticatedFlow()) {\r\n response =\r\n this.currentOperation === AddressOperation.Update\r\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\r\n : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\r\n } else {\r\n response = Promise.resolve({ address: this.addUpdateAddress });\r\n }\r\n\r\n this.isUpdating = true;\r\n this._updateModuleState();\r\n\r\n response.then(\r\n (result: IAddressResponse) => {\r\n this.isUpdating = false;\r\n\r\n let newAddress = result.address;\r\n newAddress = { ...newAddress, ...this.addUpdateAddress };\r\n\r\n if (result.address) {\r\n this.hasError = false;\r\n if (result.customerAddresses) {\r\n this._onAddOrUpdateSuccess({ customerAddresses: result.customerAddresses, address: newAddress });\r\n } else {\r\n this._onAddOrUpdateSuccess({ address: newAddress });\r\n }\r\n } else {\r\n this.hasError = true;\r\n this.addressActionResponse = result;\r\n this._updateModuleState();\r\n }\r\n },\r\n () => {\r\n this.hasError = true;\r\n this.isUpdating = false;\r\n this._updateModuleState();\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Method to get called on country change.\r\n * @param countryRegionId - Country region id.\r\n */\r\n private readonly _onCountryChange = (countryRegionId: string) => {\r\n this.countryRegionId = countryRegionId;\r\n const twoLetterIsoRegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\r\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\r\n set(this.addUpdateAddress, { TwoLetterISORegionName: twoLetterIsoRegionName });\r\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterIsoRegionName);\r\n this._clearAddressFields();\r\n };\r\n\r\n /**\r\n * Method to get all address format exclude list.\r\n * @returns Collection of address items.\r\n */\r\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\r\n const { config } = this.props;\r\n const addressFormatExcludeList: AddressItemType[] = [];\r\n\r\n if (!config.showAddressType) {\r\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\r\n }\r\n\r\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\r\n\r\n return addressFormatExcludeList;\r\n };\r\n\r\n /**\r\n * Method to get all state/provinces.\r\n */\r\n private readonly _getStateProvinces = (): void => {\r\n if (\r\n !this.countryRegionId ||\r\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n return;\r\n }\r\n\r\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\r\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\r\n\r\n // Reset state if selected state not found in the list.\r\n if (!stateInfo) {\r\n set(this.addUpdateAddress, { State: '' });\r\n }\r\n\r\n this.stateProvinceInfo = result;\r\n });\r\n };\r\n\r\n /**\r\n * Method to set default country region id.\r\n */\r\n private _setDefaultCountryRegionId(): void {\r\n const { request } = this.props.context;\r\n const market = request.channel?.ChannelCountryRegionISOCode;\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n /**\r\n * Method to get default address region id.\r\n * @returns - Address object from existing addresses.\r\n */\r\n private readonly _getDefaultAddress = (): Address | undefined => {\r\n if (this.customerAddresses) {\r\n const primaryAddress = this.customerAddresses.find((address: Address) => address.IsPrimary);\r\n return primaryAddress || (this.customerAddresses.length > 0 ? this.customerAddresses[0] : undefined);\r\n }\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Method to initialize all module state.\r\n */\r\n private readonly _initModuleState = (): void => {\r\n this.props.moduleState.init({\r\n status: this._canShip() ? 'updating' : 'disabled',\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel,\r\n onSubmit: this.onSubmit\r\n });\r\n\r\n const checkoutState = this.props.data.checkout.result;\r\n\r\n if (this._canShip()) {\r\n const defaultAddress =\r\n checkoutState?.checkoutCart.cart.ShippingAddress ??\r\n (checkoutState?.isExpressCheckoutApplied ? checkoutState.shippingAddressFromExpressCheckout : undefined) ??\r\n this._getDefaultAddress();\r\n if (defaultAddress && !this.addressCommon.isEmpty(defaultAddress)) {\r\n this._updateCurrentOperation(AddressOperation.Show, defaultAddress);\r\n this._setShippingAddress(defaultAddress);\r\n this._updateModuleState();\r\n } else {\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on submit address.\r\n */\r\n private readonly onSubmit = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this._onAddressAddUpdateSubmit();\r\n break;\r\n case AddressOperation.List:\r\n this._onSelectAddress();\r\n break;\r\n default:\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on cancel.\r\n */\r\n private readonly onCancel = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this._clearAddressFields();\r\n if (!(!this.selectedAddress && !this.addressCommon.isAuthenticatedFlow())) {\r\n this._resetView();\r\n }\r\n\r\n break;\r\n case AddressOperation.List:\r\n if (this.selectedAddress) {\r\n this._resetView();\r\n }\r\n break;\r\n default:\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on edit address.\r\n */\r\n private readonly onEdit = (): void => {\r\n if (this.addressCommon.isAuthenticatedFlow() && this.shippingAddress) {\r\n this._updateCurrentOperation(AddressOperation.List, this.shippingAddress);\r\n } else if (this.shippingAddress) {\r\n this._updateCurrentOperation(AddressOperation.Update, this.shippingAddress);\r\n }\r\n\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Method to check if checkout cartlines are available fro shipping.\r\n * @returns - True/false as per the delivery mode.\r\n */\r\n private readonly _canShip = (): boolean => {\r\n const { checkout, channelDeliveryOptionConfig } = this.props.data;\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 if (!checkout.result || !request.channel || checkout.result.checkoutCart.isEmpty || checkout.result.checkoutCart.hasInvoiceLine) {\r\n return false;\r\n }\r\n\r\n // @ts-expect-error: Type-checker not realizing above request.channel check\r\n return this.retailMultiplePickUpOptionEnabled\r\n ? checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !==\r\n channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(\r\n deliveryMode => deliveryMode === cartLine.DeliveryMode\r\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n )\r\n : checkout.result.checkoutCart.cart.CartLines?.some(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 /**\r\n * Method get called on select address.\r\n */\r\n private readonly _onSelectAddress = () => {\r\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\r\n this._setShippingAddress(this.addressListSelectedAddress);\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Method get called on goto add address.\r\n */\r\n private readonly _goToAddAddress = () => {\r\n this._setDefaultCountryRegionId();\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n };\r\n\r\n /**\r\n * Method get called on add/update success.\r\n * @param response - Retail api response.\r\n */\r\n private readonly _onAddOrUpdateSuccess = (response: IAddressResponse) => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n\r\n if (response.address) {\r\n this._updateCurrentOperation(AddressOperation.Show, response.address);\r\n this._setShippingAddress(response.address);\r\n this._updateModuleState();\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on set Shipping Address.\r\n * @param address - Retail Api address result.\r\n */\r\n private readonly _setShippingAddress = (address: Address): void => {\r\n if (this.props.data.checkout.result) {\r\n const newShippingAddress = { ...address };\r\n\r\n if (address.ThreeLetterISORegionName && !newShippingAddress.TwoLetterISORegionName) {\r\n newShippingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(address.ThreeLetterISORegionName);\r\n }\r\n\r\n this.props.data.checkout.result.updateShippingAddress({ newShippingAddress });\r\n this.props.data.checkout.result.checkoutCart.updateShippingAddress({ newShippingAddress }).catch(error => {\r\n this.props.telemetry.error(error);\r\n });\r\n }\r\n };\r\n\r\n @computed private get shippingAddress(): Address | undefined {\r\n return this.props.data.checkout.result?.shippingAddress;\r\n }\r\n\r\n /**\r\n * Method get called on reset view.\r\n */\r\n private readonly _resetView = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this._updateCurrentOperation(\r\n this.addressCommon.isAuthenticatedFlow() ? AddressOperation.List : AddressOperation.Show,\r\n this.shippingAddress\r\n );\r\n break;\r\n default:\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n }\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Update current operation.\r\n * @param operation - The address operation.\r\n * @param selectedAddress - The selected address.\r\n */\r\n private readonly _updateCurrentOperation = (operation: AddressOperation, selectedAddress?: Address) => {\r\n this.currentOperation = operation;\r\n this.selectedAddress = selectedAddress;\r\n\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n this.addUpdateAddress = { ...this.selectedAddress } || {};\r\n set(this.addUpdateAddress, {\r\n ThreeLetterISORegionName: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n });\r\n set(this.addUpdateAddress, {\r\n AddressTypeValue: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType\r\n });\r\n } else if (this.currentOperation === AddressOperation.List) {\r\n this.addressListSelectedAddress = { ...this.selectedAddress } || {};\r\n }\r\n };\r\n\r\n /**\r\n * Update module state.\r\n */\r\n private readonly _updateModuleState = () => {\r\n if (this.currentOperation === AddressOperation.Show) {\r\n this.props.moduleState.onReady();\r\n } else if (this.isUpdating) {\r\n this.props.moduleState.onPending();\r\n } else {\r\n this.props.moduleState.onUpdating();\r\n }\r\n };\r\n}\r\n\r\nexport default CheckoutShippingAddress;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt 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\n\r\nimport { IAddressAddItem, IAddressAddUpdateProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressList, IAddressListItem, IAddressListProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressShowItem, IAddressShowProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAccountManagementAddressViewProps } from './eve-account-management-address';\r\n\r\n/**\r\n * Address show component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressDetail - Address detail.\r\n * @param param0.items - IAddressShowItem[].\r\n * @returns - Address Node.\r\n */\r\nconst AddressShow: React.FC<IAddressShowProps> = ({ AddressDetail, items }) => {\r\n return (\r\n <Node {...AddressDetail}>\r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description}</>;\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address List Component.\r\n * @param param0 - Root param.\r\n * @param param0.List - Address list.\r\n * @param param0.isShowList - Boolean.\r\n * @param param0.heading - Address heading.\r\n * @param param0.items - IAddressListItem[].\r\n * @returns - AddressListComponent Node.\r\n */\r\nconst AddressList: React.FC<IAddressList> = ({ List, isShowList, heading, items }) => {\r\n if (!isShowList) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Node {...List}>\r\n {heading}\r\n {items.map((item: IAddressListItem) => {\r\n const { Item, key, error, showItems, isShowPrimaryButton, primaryButton, editButton, removeButton } = item;\r\n const { Error, isShowError, title, message } = error;\r\n return (\r\n <Node {...Item} key={key}>\r\n <AddressShow {...showItems} />\r\n {isShowError && (\r\n <Node {...Error}>\r\n {title}\r\n {message}\r\n </Node>\r\n )}\r\n {isShowPrimaryButton && primaryButton}\r\n {editButton}\r\n {removeButton}\r\n </Node>\r\n );\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address Lists Component.\r\n * @param param0 - Root param.\r\n * @param param0.ListAddress - List address.\r\n * @param param0.heading - List heading.\r\n * @param param0.isShowEmptyListMessage - Boolean.\r\n * @param param0.emptyListMessage - Empty list message.\r\n * @param param0.addButton - Add button.\r\n * @param param0.primaryAddressList - Primary address.\r\n * @param param0.otherAddressList - Other address.\r\n * @returns Address Lists Component Node.\r\n */\r\nconst AddressLists: React.FC<IAddressListProps> = ({\r\n ListAddress,\r\n heading,\r\n isShowEmptyListMessage,\r\n emptyListMessage,\r\n addButton,\r\n primaryAddressList,\r\n otherAddressList\r\n}) => {\r\n return (\r\n <Node {...ListAddress}>\r\n {heading}\r\n {isShowEmptyListMessage && emptyListMessage}\r\n {addButton}\r\n <AddressList {...primaryAddressList} />\r\n <AddressList {...otherAddressList} />\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * AddressAddUpdateComponent.\r\n * @param param0 - Root param.\r\n * @param param0.AddressForm - Address form.\r\n * @param param0.heading - Address heading.\r\n * @param param0.items - IAddressAddItem[].\r\n * @param param0.hasError - Boolean.\r\n * @param param0.error - Error message.\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns Address add update component node.\r\n */\r\nconst AddressAddUpdate: React.FC<IAddressAddUpdateProps> = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n <Node {...AddressForm}>\r\n {heading}\r\n {items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n <Node {...AddressItem} key={key}>\r\n {label}\r\n {alert}\r\n {input}\r\n </Node>\r\n );\r\n })}\r\n {hasError && (\r\n <Node {...error.AddressError}>\r\n {error.title}\r\n {error.message}\r\n </Node>\r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Account Management Address View Component.\r\n * @param props - Props.\r\n * @returns - AccountAddressManagement Module.\r\n */\r\nconst AccountManagementAddressView: React.FC<IAccountManagementAddressViewProps> = props => {\r\n const { AccountAddressManagement, viewState, showAddressList, showAddOrUpdateAddress, screenReaderNotification } = props;\r\n\r\n return (\r\n <Module {...AccountAddressManagement}>\r\n {viewState.isShowAddresList && <AddressLists {...showAddressList} />}\r\n {viewState.isShowAddOrUpdateAddress && <AddressAddUpdate {...showAddOrUpdateAddress} />}\r\n {screenReaderNotification}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default AccountManagementAddressView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt 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\n\r\nimport { IAddressAddItem, IAddressAddUpdateProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressSelectItem, IAddressSelectProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressShowItem, IAddressShowProps } from '@msdyn365-commerce-modules/address';\r\nimport { ICheckoutShippingAddressViewProps } from './eve-checkout-shipping-address';\r\n\r\n/**\r\n * Address show component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressDetail - Address detail.\r\n * @param param0.items - IAddressShowItem[].\r\n * @returns - Address Node.\r\n */\r\nconst AddressShow: React.FC<IAddressShowProps> = ({ AddressDetail, items }) => {\r\n return (\r\n <Node {...AddressDetail}>\r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description}</>;\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address Select Component.\r\n * @param param0 - Root param.\r\n * @param param0.SelectAddress - Select address.\r\n * @param param0.addButton - Add button.\r\n * @param param0.items - IAddressSelectItem[].\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns - SelectAddress Node.\r\n */\r\nconst AddressSelect: React.FC<IAddressSelectProps> = ({\r\n SelectAddress,\r\n addButton,\r\n items,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n <Node {...SelectAddress}>\r\n {addButton}\r\n {items.map((item: IAddressSelectItem) => {\r\n const SelectItem = item.SelectItem;\r\n return (\r\n <Node {...SelectItem} key={item.key}>\r\n {item.input}\r\n <AddressShow {...item.showItems} />\r\n </Node>\r\n );\r\n })}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address Add Update Component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressForm - Address form.\r\n * @param param0.heading - Address heading.\r\n * @param param0.items - IAddressAddItem[].\r\n * @param param0.hasError - Boolean.\r\n * @param param0.error - Error message.\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns Address add update component node.\r\n */\r\nconst AddressAddUpdate: React.FC<IAddressAddUpdateProps> = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n <Node {...AddressForm}>\r\n {heading}\r\n {items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n <Node {...AddressItem} key={key}>\r\n {label}\r\n {alert}\r\n {input}\r\n </Node>\r\n );\r\n })}\r\n {hasError && (\r\n <Node {...error.AddressError}>\r\n {error.title}\r\n {error.message}\r\n </Node>\r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Checkout Shipping Address View Component.\r\n * @param props - Props.\r\n * @returns - CheckoutShippingAddress Module.\r\n */\r\nconst CheckoutShippingAddressView: React.FC<ICheckoutShippingAddressViewProps> = props => {\r\n const { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress, cartLineImages } = props;\r\n\r\n return (\r\n <Module {...CheckoutShippingAddress}>\r\n {cartLineImages}\r\n {viewState.isShowAddress && <AddressShow {...showAddress} />}\r\n {viewState.isShowAddresList && <AddressSelect {...showAddressSelect} />}\r\n {viewState.isShowAddOrUpdateAddress && <AddressAddUpdate {...showAddOrUpdateAddress} />}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default CheckoutShippingAddressView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/src/modules/checkout/./checkout';\r\nimport { IEmailDelivery } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/./components';\r\nimport { IInvoicePaymentSummary } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/./components/get-invoice-payment-summary';\r\nimport { ICheckoutProps } from '../definition-extensions/checkout.ext.props.autogenerated';\r\nimport { changeMailChimpSubscriptionStatusAsync } from '../../../actions/DataActionExtension.g';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\r\n// from checkout.ext.data.tsx file, which is now deleted\r\nimport { IGetMailchimpSubscriptionStatusData } from '../../../actions/get-mailchimp-subscription-status.action';\r\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\nimport { CheckoutProvider } from '../../../utilities/CheckoutContext';\r\nimport { getTelemetryObject } from '@msdyn365-commerce-modules/utilities';\r\nexport interface IExtendedOrderSummary extends IOrderSummary {\r\n cart: Cart | undefined;\r\n}\r\nimport { PromoCodeComponent } from '@msdyn365-commerce/components';\r\n// from checkout.ext.data.tsx file, which is now deleted\r\nexport interface ICheckoutExtData {\r\n mailchimpSubscriptionStatus: AsyncResult<IGetMailchimpSubscriptionStatusData>;\r\n}\r\n\r\nexport const PickUpAtStoreComponent: React.FC<IPickUpAtStore> = ({ PickUpAtStore, label, location }) => (\r\n <Node {...PickUpAtStore}>\r\n {label}\r\n {location}\r\n </Node>\r\n);\r\n\r\nexport const EmailDeliveryComponent: React.FC<IEmailDelivery> = ({ EmailDelivery, label }) => <Node {...EmailDelivery}>{label}</Node>;\r\n\r\nexport const LineItemComponent: React.FC<ILineItem> = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n <Node {...LineItem}>\r\n {item}\r\n {pickUpAtStore && <PickUpAtStoreComponent {...pickUpAtStore} />}\r\n {emailDelivery && <EmailDeliveryComponent {...emailDelivery} />}\r\n </Node>\r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC<ILineItemDeliveryGroup> = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n <Node {...LineItemDeliveryGroup}>\r\n {heading}\r\n <Node {...LineItemList}>\r\n {lineItems.map(lineItem => (\r\n <LineItemComponent key={lineItem.LineId} {...lineItem} />\r\n ))}\r\n </Node>\r\n </Node>\r\n);\r\n\r\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC<ILineItemDeliveryGroup> = ({\r\n LineItemDeliveryGroup,\r\n LineItemList,\r\n heading,\r\n lineItems,\r\n lineItemWraper,\r\n lineItemWraperIcon\r\n}) => (\r\n <Node {...LineItemDeliveryGroup}>\r\n {lineItemWraperIcon}\r\n {lineItemWraper}\r\n {heading}\r\n <Node {...LineItemList}>\r\n {lineItems.map(lineItem => (\r\n <LineItemComponentWithMultiplePickUp key={lineItem.LineId} {...lineItem} />\r\n ))}\r\n </Node>\r\n </Node>\r\n);\r\n\r\nexport const LineItemComponentWithMultiplePickUp: React.FC<ILineItem> = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n <Node {...LineItem}>\r\n {item}\r\n {emailDelivery && <EmailDeliveryComponent {...emailDelivery} />}\r\n </Node>\r\n);\r\n\r\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC<IPickUpAtStore> = ({ PickUpAtStore, label, location }) => (\r\n <Node {...PickUpAtStore}>\r\n {label}\r\n {location}\r\n </Node>\r\n);\r\n\r\nexport const LineItemsComponent: React.FC<ILineItems> = ({\r\n LineItems,\r\n Header,\r\n heading,\r\n editLink,\r\n itemsForPickup,\r\n itemsForShip,\r\n itemsForEmail,\r\n itemsGroupWithMulitplePickupMode\r\n}) => (\r\n <Node {...LineItems}>\r\n <Node {...Header}>\r\n {heading}\r\n {editLink}\r\n </Node>\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && <LineItemGroupComponent {...itemsForPickup} />}\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && <LineItemGroupComponent {...itemsForEmail} />}\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && <LineItemGroupComponent {...itemsForShip} />}\r\n {itemsGroupWithMulitplePickupMode !== undefined\r\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\r\n return <LineItemGroupComponentWithMultiplePickUp {...item} key={index} />;\r\n })\r\n : null}\r\n </Node>\r\n);\r\n\r\nconst OrderSummaryComponent: React.FC<IExtendedOrderSummary> = ({ heading, lines, cart }) => (\r\n <>\r\n {heading}\r\n <div className='msc-order-summary-wrapper'>\r\n <div className='msc-order-summary__items'>\r\n {lines && (\r\n <>\r\n {React.cloneElement(lines.subtotal as React.ReactElement, { price: cart?.SubtotalAmountWithoutTax })}\r\n {lines.shipping}\r\n {lines.otherCharge}\r\n {lines.tax}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n);\r\n\r\nconst PaymentSummaryComponent: React.FC<IInvoicePaymentSummary> = ({ heading, lines }) => (\r\n <>\r\n {heading}\r\n <div className='msc-invoice-summary-wrapper'>\r\n <div className='msc-invoice-summary__items'>\r\n {lines && (\r\n <>\r\n {lines.invoices}\r\n {lines.giftCard}\r\n {lines.loyalty}\r\n {lines.orderTotal}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </>\r\n);\r\n\r\nconst CheckoutView: React.FC<ICheckoutViewProps & ICheckoutProps<ICheckoutExtData>> = props => {\r\n const {\r\n isPaymentVerificationRedirection,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n hasSalesOrder,\r\n hasInvoiceLine,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n termsAndConditionsProps,\r\n orderConfirmation,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n invoicePaymentSummary,\r\n lineItems,\r\n placeOrderButton,\r\n termsAndConditions,\r\n // keepShoppingButton,\r\n data: { mailchimpSubscriptionStatus },\r\n resources: { subscribeCheckboxLabel },\r\n resources\r\n } = props;\r\n const isMailchimpChecked = mailchimpSubscriptionStatus.result && mailchimpSubscriptionStatus.result.newsletterActive;\r\n const isSignedInUser = props.context.actionContext.requestContext.user.isAuthenticated;\r\n const shouldShowMailchimp = isMailchimpChecked === false && isSignedInUser;\r\n let [isErr, setIsErr] = React.useState<boolean>(false);\r\n\r\n const renderSubscriptionCheckbox = () => {\r\n const setChecked = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const checkbox = event.target;\r\n changeMailChimpSubscriptionStatusAsync({ callerContext: props.context.actionContext }, checkbox.checked, false).then(res => {\r\n if (!res.Success) {\r\n !checkbox.checked;\r\n }\r\n });\r\n };\r\n return (\r\n <div className={'checkout-subscribe'}>\r\n <input type='checkbox' onChange={setChecked} id={'subscriptionCheckbox'} className={'checkout-subscribe__checkbox'} />\r\n <label htmlFor='subscriptionCheckbox' className={'checkout-subscribe__label'}>\r\n {subscribeCheckboxLabel}\r\n </label>\r\n </div>\r\n );\r\n };\r\n\r\n const checkErr = (e: MouseEvent) => {\r\n const target = e.target as HTMLElement;\r\n const classes = target.classList;\r\n if (classes.contains('ms-checkout__btn-place-order') && classes.contains('disabled') && !classes.contains('is-busy')) {\r\n setIsErr(true);\r\n setTimeout(function() {\r\n setIsErr(false);\r\n }, 6000);\r\n }\r\n };\r\n if (MsDyn365.isBrowser) {\r\n let orderbtn = document.querySelectorAll<HTMLButtonElement>('button.ms-checkout__btn-place-order');\r\n orderbtn.forEach(btn => {\r\n btn.disabled = false;\r\n });\r\n\r\n document.addEventListener('click', checkErr);\r\n }\r\n\r\n const _renderPlaceOrderBtn = () => {\r\n if (!placeOrderButton) {\r\n return null;\r\n }\r\n const isTermsChecked = props.data.checkout?.result?.isTermsAndConditionChecked;\r\n return isTermsChecked ? placeOrderButton : React.cloneElement(placeOrderButton as React.ReactElement, { canPlaceOrder: false });\r\n };\r\n\r\n const cartHasNoBalance = () => {\r\n const orderTotalNode = orderSummary?.lines?.orderTotal;\r\n if (orderTotalNode) {\r\n const amountDue = get(orderTotalNode, 'props.price') || 0;\r\n\r\n return (amountDue as number) === 0;\r\n }\r\n return false;\r\n };\r\n cartHasNoBalance();\r\n return (\r\n <CheckoutProvider\r\n value={{\r\n placeOrderButton: _renderPlaceOrderBtn(),\r\n cartHasBalance: !cartHasNoBalance(),\r\n mailChimp: renderSubscriptionCheckbox(),\r\n termsAndConditions: termsAndConditions\r\n }}\r\n >\r\n <Module {...checkoutProps}>\r\n {!hasSalesOrder && <Node {...headerProps}>{title}</Node>}\r\n {!hasSalesOrder &&\r\n isPaymentVerificationRedirection &&\r\n shouldEnableSinglePaymentAuthorizationCheckout &&\r\n !alert &&\r\n !loading && <Waiting className='msc-waiting-circular msc-waiting-lg' />}\r\n {!hasSalesOrder && (\r\n <Node {...bodyProps}>\r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n <Node {...mainProps}>\r\n {guidedForm}\r\n <Node {...termsAndConditionsProps}>{termsAndConditions}</Node>\r\n {/*{shouldShowMailchimp && renderSubscriptionCheckbox()}*/}\r\n <Node {...mainControlProps}>\r\n {_renderPlaceOrderBtn()}\r\n {/*{keepShoppingButton}*/}\r\n </Node>\r\n </Node>\r\n <Node {...sideProps}>\r\n {!hasInvoiceLine\r\n ? orderSummary && (\r\n <OrderSummaryComponent\r\n {...orderSummary}\r\n cart={props.data.checkout.result?.checkoutCart.cart}\r\n />\r\n )\r\n : invoicePaymentSummary && <PaymentSummaryComponent {...invoicePaymentSummary} />}\r\n <Node {...sideControlFirstProps}>\r\n {<Node {...termsAndConditionsProps}>{termsAndConditions}</Node>}\r\n {shouldShowMailchimp && renderSubscriptionCheckbox()}\r\n <div className={isErr ? 'ordererr show' : 'ordererr'}>\r\n {props.resources.checkoutNotCompleteErrText}\r\n </div>\r\n\r\n {cartHasNoBalance() && _renderPlaceOrderBtn()}\r\n {/*{keepShoppingButton}*/}\r\n </Node>\r\n {lineItems && <LineItemsComponent {...lineItems} />}\r\n <PromoCodeComponent\r\n cart={props.data.checkout.result?.checkoutCart}\r\n promoCodeHeadingText={resources.promoCodeHeadingText}\r\n promoPlaceholderText={resources.promoPlaceholderText}\r\n promoCodeApplyButtonText={resources.promoCodeApplyButtonText}\r\n appliedPromoCodeHeadingText={resources.appliedPromoCodeHeadingText}\r\n collapseTimeOut={350}\r\n removePromoAriaLabelFormat={resources.removePromoAriaLabelFormat}\r\n removePromoText={resources.removePromoText}\r\n invalidPromoCodeErrorText={resources.invalidPromoCodeErrorText}\r\n failedToAddPromoCodeErrorText={resources.failedToAddPromoCodeErrorText}\r\n failedToRemovePromoCodeErrorText={resources.failedToRemovePromoCodeErrorText}\r\n duplicatePromoCodeErrorText={resources.duplicatePromotionErrorText}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n data={{}}\r\n telemetryContent={getTelemetryObject(\r\n props.context.request.telemetryPageName!,\r\n props.friendlyName,\r\n props.telemetry\r\n )}\r\n />\r\n <Node {...sideControlSecondProps}>\r\n {<Node {...termsAndConditionsProps}>{termsAndConditions}</Node>}\r\n {/*{shouldShowMailchimp && renderSubscriptionCheckbox()}*/}\r\n <div className={isErr ? 'ordererr show' : 'ordererr'}>\r\n {props.resources.checkoutNotCompleteErrText}\r\n </div>\r\n {_renderPlaceOrderBtn()}\r\n {/*{keepShoppingButton}*/}\r\n </Node>\r\n </Node>\r\n </>\r\n )}\r\n </Node>\r\n )}\r\n {hasSalesOrder && orderConfirmation}\r\n </Module>\r\n </CheckoutProvider>\r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus}</>;\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n <div className='msc-cart-lines-item' key={`${cartLine.cartlineId ?? ''}-${MsDyn365.isBrowser.toString()}`}>\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n <Node {...cartLine.pickUpInStore.ContainerProps}>{cartLine.pickUpInStore.defaultComponent}</Node>\n ) : null}\n {cartLine.addToOrderTemplate ? (\n <Node className='msc-cart-line__extra-actions'>\n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n </Node>\n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n </>\n )}\n </div>\n );\n });\n }\n return cartDataResult ? (\n <div className='msc-cart__empty-cart'>\n <p className='msc-cart-line'>{cartEmptyText}</p>\n {backToShoppingButton}\n </div>\n ) : (\n <>{waitingComponent}</>\n );\n};\n\n/**\n * Method will render error block.\n * @param errorData -The order summary errors interface.\n * @returns Jsx element.\n */\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n <Node {...errorData.Wrapper}>\n {errorData.header}\n {errorData.errors}\n </Node>\n );\n};\n\n/**\n * Method will render invoice summary lines.\n * @param invoiceSummaryLines -The invoicesummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n <Node {...OrderSummaryItems}>\n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n </Node>\n );\n};\n\n/**\n * Method will render order summary lines.\n * @param orderSummaryLines -The ordersummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n <Node {...OrderSummaryItems}>\n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n </Node>\n );\n};\n\n/**\n * Method will render cart promotions.\n * @param promotions -The cartline item view props.\n * @returns Jsx element.\n */\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n <Node {...promotions.promotionMessageWrapper}>\n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n </Node>\n </>\n );\n};\n\n/**\n * Method will render cartlines group title.\n * @param cartLine -The cartline view props.\n * @param titleSeparate -The title separate.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, titleSeparate: string) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n return (\n <>\n <Node className='msc-cart-lines-group-wraper__bopis-heading-title'>\n {isBopisSelected ? (\n <p className='msc-cart-lines-group-wraper__bopis-heading-title-st'>\n {cartLine.pickUpInStore?.deliveryOption}\n {titleSeparate}\n {cartLine.pickUpInStore?.orgUnitName}\n </p>\n ) : null}\n </Node>\n </>\n );\n};\n\n/**\n * Method will render cartlines groups header title.\n * @param pickUpText -The pickup text for group.\n * @param shippingText -The shipping text for group.\n * @param emailShippingText -The email shipping text for group.\n * @param titleSeparate -The title separator.\n * @param cartLine -The cartline view props.\n * @param emailDeliveryModeCode -The email delivery code from channel.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupHeader = (\n pickUpText: string,\n shippingText: string,\n emailShippingText: string,\n titleSeparate: string,\n cartLine: ICartlinesViewProps,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\n }\n\n return (\n <>\n <div className='msc-cart-lines-group-wraper__bopis-heading'>\n <p className={`msc-cart-lines-group-wraper__bopis-heading-${groupTitle.toLowerCase()}-icon`} />\n <p className={`msc-cart-lines-group-wraper__bopis-heading-${groupTitle.toLowerCase()}`}>{groupTitle}</p>\n {renderCartLinesGroupTitle(cartLine, titleSeparate)}\n </div>\n </>\n );\n};\n\n/**\n * Method will render cartlines in groups.\n * @param props -The cartline.\n * @returns Jsx element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n <div className='msc-cart-lines-group'>\n {props.cartLinesGroup.map(cartlines => {\n return (\n <div key={cartlines[0].cartlineId} className='msc-cart-lines-group-wraper'>\n {renderCartLinesGroupHeader(\n props.resources.pickUpText,\n props.resources.shippingText,\n props.resources.emailshippingText,\n props.resources.titleSeparate,\n cartlines[0],\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n </div>\n );\n })}\n </div>\n );\n }\n return props.cartDataResult ? (\n <div className='msc-cartline-wraper'>\n <div className='msc-cart__empty-cart'>\n <p className='msc-cart-line'>{props.resources.emptyCartText}</p>\n {props.backToShoppingButton}\n </div>\n </div>\n ) : (\n <>{props.waitingComponent}</>\n );\n};\n\nconst CartView: React.FC<ICartViewProps> = (props: ICartViewProps) => (\n <div className={props.className} id={props.id} {...props.renderModuleAttributes(props)}>\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n <Node {...props.CartlinesWrapper}>\n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n </Node>\n )}\n {props.orderSummaryHeading && (\n <Node {...props.OrderSummaryWrapper}>\n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n <Node {...props.ExpressCheckoutSectionWrapper}>{props.expressCheckoutButton}</Node>\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n </Node>\n )}\n {props.storeSelector}\n </div>\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './product-collection';\nimport { IProductCollectionResources } from './product-collection.props.autogenerated';\n\nconst ProductCollectionView: React.FC<IProductCollectionViewProps> = props => {\n const {\n heading,\n ProductCollectionContainer,\n products,\n SingleSlideCarouselComponentProps,\n GridComponentProps,\n isCarousel,\n seeAllButton,\n resources\n } = props;\n\n if (products) {\n return (\n <Module {...ProductCollectionContainer}>\n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n </Module>\n );\n }\n\n // If no products are retrieved and the list type is promotional, still render the module to keep the entry of promotion page\n if (props.config.productCollection.listType === 'promotional') {\n return (\n <Module {...ProductCollectionContainer}>\n {heading}\n {seeAllButton}\n {_renderNoProduct(resources)}\n </Module>\n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return <Node {...carouselContainer}>{items && items.map(_renderProduct)}</Node>;\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return <Node {...gridContainer}>{items && items.map(_renderProduct)}</Node>;\n};\n\nconst _renderNoProduct = (resources: IProductCollectionResources): JSX.Element => {\n return (\n <Node className={''}>\n <p>{resources.noProductToRenderText}</p>\n </Node>\n );\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return <Node {...ProductContainer}>{productComponent}</Node>;\n};\n\nexport default ProductCollectionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderFormViewProps, IQuickOrderViewProps } from './index';\n\n/**\n * Render product dimension/configure container.\n * @param configure -- Product dimension configuration.\n * @returns Container to have dimension dropdown.\n */\nconst renderConfigure = (configure?: IProductDimensionConfigureViewProps): JSX.Element | null => {\n if (configure !== undefined) {\n const { containerProps, dropdowns } = configure;\n\n return <Node {...containerProps}>{dropdowns.map(renderConfigureDropdown)}</Node>;\n }\n return null;\n};\n\n/**\n * Render product dimension/configure dropdown.\n * @param dropdown -- Product dimension drop down.\n * @returns Dropdown.\n */\nconst renderConfigureDropdown = (dropdown: IProductDimensionConfigureDropdownViewProps): JSX.Element => {\n const { containerProps, labelContainerProps, heading, errors, select } = dropdown;\n\n return (\n <Node {...containerProps}>\n <Node {...labelContainerProps}>{heading}</Node>\n {errors}\n {select}\n </Node>\n );\n};\n\nconst renderForm = (\n form: IQuickOrderFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMsgContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n <Node {...quickOrderForm}>\n <Node {...quickOrderProductContent}>\n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n <Node {...quickOrderMsgContent}>{form.userMessage}</Node>\n {form.addToCartBtn}\n </Node>\n </Node>\n ) : (\n <Node {...quickOrderForm}>\n <Node {...quickOrderMsgContent}>{form.userMessage}</Node>\n <Node {...quickOrderProductContent}>\n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToCartBtn}\n </Node>\n </Node>\n );\n};\n\nconst quickOrderView: React.FC<IQuickOrderViewProps> = props => {\n const {\n quickOrderProps,\n contentProps,\n form,\n quickOrderForm,\n drawer,\n configure,\n quickOrderFormProductContent,\n quickOrderFormMsgContent,\n quickOrderList,\n isMobileView\n } = props;\n\n return (\n <Module {...quickOrderProps}>\n <Node {...drawer}>\n <Node {...contentProps}>\n {renderForm(\n form as IQuickOrderFormViewProps,\n isMobileView,\n quickOrderForm,\n quickOrderFormProductContent,\n quickOrderFormMsgContent,\n configure\n )}\n </Node>\n </Node>\n\n {quickOrderList}\n </Module>\n );\n};\nexport default quickOrderView;\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 { 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 { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport {\n IMediaData,\n IMediaGalleryThumbnailItemViewProps,\n IMediaGalleryThumbnailsViewProps,\n IMediaGalleryViewProps,\n MediaType\n} from '@msdyn365-commerce-modules/media-gallery';\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\nimport { IPlayerData, IPlayerOptions, IVideoMetadata, Player } from '@msdyn365-commerce-modules/video-player-utilities';\n\ninterface IMediaGalleryItemsProps extends IMediaGalleryThumbnailItemViewProps {\n Video?: React.ReactElement;\n}\n\n/**\n * Render the thumbnail item images.\n * @param thumbnail - The carousel thumbnail line props.\n * @returns Return HTML having thumbnail container props with image.\n */\nconst renderThumbnailItem = (thumbnail: IMediaGalleryItemsProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailItemContainerProps, Picture, Video } = thumbnail;\n\n return <Node {...ThumbnailItemContainerProps}>{Video ? Video : Picture}</Node>;\n};\n\n/**\n * Gets the thumbnail item to display media gallery images.\n * @param image - The media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param imageId - Image id.\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render images.\n */\nconst GetThumbnailItemComponent = (\n image: IImageData,\n imageSettings: IImageSettings,\n imageId: number,\n modifiedActiveIndex: number,\n props: IMediaGalleryViewProps,\n mediaTypeValue?: MediaType\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n /**\n * OnClick method of media gallery item.\n */\n const onClick = () => {\n props.callbackToggle?.();\n props.callbackThumbnailClick?.(imageId);\n props.state.activeIndex = imageId;\n };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n /**\n * Keydown event of media gallery item.\n * @param event - React.KeyboardEvent.\n */\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Enter) {\n event.preventDefault();\n onClick();\n }\n };\n const defaultIndex = 0;\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'listitem',\n key: imageId\n },\n Picture: (\n <Node className='ms-fullscreen-section'>\n <Button\n aria-label={image.altText}\n className='msc-ss-carousel-vert-button-wrapper'\n onClick={onClick}\n onKeyDown={handleKeyDown}\n >\n <Image\n requestContext={props.context.actionContext.requestContext}\n className='ms-media-gallery__thumbnail'\n {...image}\n gridSettings={props.context.request.gridSettings!}\n imageSettings={props.config.thumbnailImageSettings ?? imageSettings}\n loadFailureBehavior='hide'\n imageFallbackOptimize={props.state.shouldUseOptimizedImage}\n fallBackSrc={\n props.context.request.app?.config?.OmniChannelMedia ? '' : imageId === defaultIndex ? fallbackImage : image.src\n }\n bypassHideOnFailure={imageId === defaultIndex}\n />\n </Button>\n <Node\n className={\n mediaTypeValue === MediaType.Video ? 'ms-fullscreen-section__video-overlay' : 'ms-fullscreen-section__overlay'\n }\n >\n <Button\n onKeyDown={handleKeyDown}\n title={\n mediaTypeValue === MediaType.Video ? props.resources.playVideoTitleText : props.resources.fullScreenTitleText\n }\n role='button'\n className={\n mediaTypeValue === MediaType.Video\n ? 'ms-fullscreen-section__video-play-icon'\n : 'ms-fullscreen-section__magnifying-glass-icon'\n }\n onClick={onClick}\n />\n </Node>\n </Node>\n )\n };\n};\n\n/**\n * Render the video player.\n * @param mediaData - Media Data\n * @param index - Index of the video\n * @param activeIndex - Active Index\n * @param imageSettings - Image settings\n * @param props - Media gallery view props\n * @returns - JSX.Element.\n */\nconst RenderVideo = (\n mediaData: IMediaData,\n index: number,\n activeIndex: number,\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryItemsProps => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = props.config as IPlayerOptions;\n const playerResources = props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n index === activeIndex ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'listitem',\n key: index\n },\n Picture: <></>,\n Video: (\n <Video className='ms-media-gallery__player' editProps={{ key: videoData, requestContext: props.context.request }}>\n <Player\n playerData={videoPlayerData}\n isEditor={props.context.request.params.isEditor}\n playerResources={playerResources}\n />\n </Video>\n )\n };\n }\n return GetEmptyThumbnailItemComponent(imageSettings, props);\n};\n\n/**\n * Gets the empty thumbnail item to display media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render empty images.\n */\nconst GetEmptyThumbnailItemComponent = (\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: 'ms-media-gallery__thumbnail-item',\n role: 'listitem',\n tabIndex: 0,\n key: 0,\n 'aria-label': ''\n },\n Picture: (\n <Image\n requestContext={props.context.actionContext.requestContext}\n className='ms-media-gallery__thumbnail-item__image'\n src='empty'\n gridSettings={props.context.request.gridSettings!}\n imageSettings={props.config.thumbnailImageSettings ?? imageSettings}\n loadFailureBehavior='empty'\n imageFallbackOptimize={!!props.config.skipImageValidation}\n fallBackSrc={fallbackImage}\n />\n )\n };\n};\n\n/**\n * Update media gallery items method.\n * @param items - The media gallery thumbnail item view props.\n * @returns The IImageData array.\n */\nconst getMediaGalleryItems = (items?: IMediaData[]): IMediaData[] | undefined => {\n return items?.map(item => {\n return {\n displayOrder: item.displayOrder,\n mediaTypeValue: item.mediaTypeValue,\n altText: item.altText,\n src: item.src,\n videoData: item.videoData\n };\n });\n};\n\nconst defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Render the Media gallery thumbnails to represent images in grid view.\n * @param thumbnails - The thumbnail view props.\n * @param props - The media gallery view props.\n * @returns - The single slide carousel component to render as media gallery image.\n */\nconst renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps, props: IMediaGalleryViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\n const { state } = props;\n const mediaGalleryItems = getMediaGalleryItems(state.mediaGalleryItems);\n\n const items: IMediaGalleryItemsProps[] | undefined =\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\n state.lastUpdate && ArrayExtensions.hasElements(mediaGalleryItems) && mediaGalleryItems[0].src === 'empty'\n ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)]\n : // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\n mediaGalleryItems?.map((item: IMediaData, id: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n if (props.config.allowFullScreen) {\n const videoThumbnail = item.videoData?.thumbnail;\n if (videoThumbnail) {\n return GetThumbnailItemComponent(\n videoThumbnail,\n defaultThumbnailImageSettings,\n id,\n state.activeIndex,\n props,\n item.mediaTypeValue\n );\n } else {\n return GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props);\n }\n } else {\n return RenderVideo(item, id, state.activeIndex, defaultThumbnailImageSettings, props);\n }\n } else {\n return GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props);\n }\n });\n\n return (\n <Node {...ThumbnailsContainerProps}>\n <Node {...SingleSlideCarouselComponentProps}>{items?.map(renderThumbnailItem)}</Node>\n </Node>\n );\n};\n\n/**\n * Render the Media gallery items using viewprops.\n * @param props - The media gallery view props.\n * @returns The media gallery module wrapping up images node.\n */\nconst mediaGalleryView: React.FC<IMediaGalleryViewProps> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n // The thumbnails in AW theme aren't used as tabs\n const NewSingleSlideCarouselComponentProps = { ...Thumbnails.SingleSlideCarouselComponentProps, useTabList: false };\n const NewThumbnails = { ...Thumbnails, SingleSlideCarouselComponentProps: NewSingleSlideCarouselComponentProps };\n\n return (\n <Module {...MediaGallery}>\n <Node {...CarouselProps} />\n {Modal}\n {renderThumbnails(NewThumbnails, props)}\n </Module>\n );\n};\n\nexport default mediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* --------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n IRefineMenuViewProps,\n ISearchResultContainerV2ViewProps,\n ISortByViewProps,\n ITitleViewProps,\n ISearchResultV2ModalViewProps\n} from '@msdyn365-commerce-modules/search-result-container-v2';\nimport { Button, getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { MouseEventHandler } from 'react';\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport ProductComponentV2, { IProductSearchResult } from './components/product-v2.component';\nimport {\n ISearchResultContainerV2Props,\n ISearchResultContainerV2Resources\n} from '../definition-extensions/search-result-container-v2.ext.props.autogenerated';\n\n/**\n * DescriptionInterval.\n */\nenum DescriptionInterval {\n productDescriptionInterval = 14,\n productDescriptionIntervalRemainder0 = 0,\n productDescriptionIntervalRemainder9 = 9\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProductCards = (props: ISearchResultContainerV2ViewProps & ISearchResultContainerV2Props<{}>): JSX.Element | null => {\n return (\n <Node {...props.productsContainer}>\n {props.errorMessage}\n {props.products}\n </Node>\n );\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 */\nfunction getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: IProductSearchResult): 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\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @param product - The product item data.\n * @param index - The index of each product item.\n * @param isEnabledProductDescription - The flag for showing Product desription tile.\n * @returns The JSX Element.\n */\nconst renderProductCardsDescription = (\n props: ISearchResultContainerV2ViewProps & ISearchResultContainerV2Props<{}>,\n product: IProductSearchResult,\n index: number,\n isEnabledProductDescription?: boolean\n): JSX.Element | null => {\n const { config, context, resources, productsDimensionAvailabilities } = props;\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n const breadCrumbType = props.context.app.config.breadcrumbType;\n const isAllowBack = props.config.allowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n const classname = isEnabledProductDescription\n ? 'ms-product-search-result__item product__description'\n : 'ms-product-search-result__item';\n const quickviewslot = ArrayExtensions.hasElements(props.slots.quickView) ? props.slots.quickView[0] : undefined;\n const channelInventoryConfigurationId = props.data.products.result?.channelInventoryConfigurationId;\n const isPriceMinMaxFeatureState = props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n\n const productComparisonButton = ArrayExtensions.hasElements(props.slots.productComparisonButton)\n ? props.slots.productComparisonButton[0]\n : null;\n\n return (\n <li className={classname} key={index}>\n <ProductComponentV2\n context={context}\n telemetryContent={telemetryContent}\n imageSettings={config.imageSettings}\n freePriceText={resources.priceFree}\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n ratingAriaLabel={resources.ratingAriaLabel}\n allowBack={isAllowBack}\n id={props.id}\n key={product.recordId}\n typeName={props.typeName}\n data={{ product }}\n quickViewButton={quickviewslot}\n productComparisonButton={productComparisonButton}\n isEnabledProductDescription={isEnabledProductDescription}\n inventoryLabel={getInventoryLabel(channelInventoryConfigurationId, product)}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n priceResources={priceResources}\n swatchItemAriaLabel={resources.swatchItemAriaLabel}\n dimensionAvailabilities={productsDimensionAvailabilities?.find(\n (dimensionAvailability: IProductsDimensionsAvailabilities[]) =>\n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.masterProductId\n )}\n />\n </li>\n );\n};\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProducts = (props: ISearchResultContainerV2ViewProps & ISearchResultContainerV2Props<{}>): JSX.Element | null => {\n const { listPageState, data } = props;\n const activeProducts = listPageState!.activeProducts;\n const products =\n !MsDyn365.isBrowser && !ArrayExtensions.hasElements(activeProducts)\n ? (data.products.result?.products as IProductSearchResult[]) ?? []\n : activeProducts;\n if (!ArrayExtensions.hasElements(products)) {\n return null;\n }\n const productDescriptionInterval: number = DescriptionInterval.productDescriptionInterval;\n const productDescriptionIntervalRemainder0: number = DescriptionInterval.productDescriptionIntervalRemainder0;\n const productDescriptionIntervalRemainder9: number = DescriptionInterval.productDescriptionIntervalRemainder9;\n return (\n <Node {...props.productsContainer}>\n {props.errorMessage}\n <ul className='list-unstyled'>\n {products.map((product: IProductSearchResult, index: number) =>\n index % productDescriptionInterval === productDescriptionIntervalRemainder0 ||\n index % productDescriptionInterval === productDescriptionIntervalRemainder9\n ? renderProductCardsDescription(props, product, index, true)\n : renderProductCardsDescription(props, product, index, false)\n )}\n </ul>\n </Node>\n );\n};\n\n/**\n * Render Title Count.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, titleContainer } = props;\n if (title) {\n return <Node {...titleContainer}>{title.titleCount}</Node>;\n }\n return null;\n};\n\n/**\n * Function to make filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nexport const configureStickyFilter = (isMobile: boolean, isStickyHeader: boolean): void => {\n // Get heights of cookie and promotion banners\n const defaultValue = 0;\n const defaultOffset = 28;\n const headerContainer: HTMLElement | null = document.querySelector('.ms-header');\n\n const headerHeight: number | undefined = headerContainer?.offsetHeight;\n const containerHeight: number = headerHeight ?? defaultOffset;\n const bannerHeights = isStickyHeader ? defaultValue : containerHeight;\n const headerElement = document.querySelector('header .lock-opaque');\n const defaultContainer = document.querySelector('header .default-container');\n const refinerElement = isMobile ? document.querySelector('.msc-sort-filter-wrapper') : document.querySelector('.ms-refiner-heading');\n if (refinerElement && headerElement && defaultContainer) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-Filter');\n refinerElement.setAttribute('style', `top: ${defaultContainer.clientHeight}px`);\n } else {\n refinerElement.classList.remove('lock-Filter');\n }\n } else if (refinerElement) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-top');\n } else {\n refinerElement.classList.remove('lock-top');\n refinerElement.classList.remove('lock-Filter');\n refinerElement.removeAttribute('style');\n }\n }\n};\n\n/**\n * Function to setup filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nfunction stickyFilterSetup(isMobile: boolean, isStickyHeader: boolean): void {\n window.addEventListener('scroll', () => {\n configureStickyFilter(isMobile, isStickyHeader);\n });\n configureStickyFilter(isMobile, isStickyHeader);\n}\n\n/**\n * Function to make filter sticky.\n * @param refinerRefernce - Ref prop for filter.\n * @param toggle - Toggle function for filter menu.\n */\nfunction useOutsideClick(refinerRefernce: React.RefObject<HTMLElement>, toggle: (event: Event) => void) {\n React.useEffect(() => {\n /**\n * Function to make filter sticky.\n * @param event - Event prop for filter.\n */\n function handleClickOutside(event: Event) {\n const element = document.querySelector('.ms-refine-filter__toggle_collapsed');\n if (refinerRefernce.current && !refinerRefernce.current.contains(event.target as Node) && !element) {\n toggle(event);\n }\n }\n if (MsDyn365.isBrowser) {\n document.addEventListener('click', handleClickOutside);\n }\n return () => {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('click', handleClickOutside);\n }\n };\n }, [refinerRefernce, toggle]);\n}\n\n/**\n * Render the category page items.\n * @param props - The view props.\n * @returns The search Result container module view.\n */\nconst SearchResultContainerView: React.FC<ISearchResultContainerV2ViewProps & ISearchResultContainerV2Props<{}>> = props => {\n const {\n searchResultContainer,\n pagination,\n productSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n titleViewProps,\n refineMenu,\n sortByOptions,\n categoryNavContainer,\n refineAndProductSectionContainer,\n featureSearchContainer,\n similarLookProduct,\n errorMessage,\n resources\n } = props;\n React.useEffect(() => {\n if (props.config.useStickyFilter && MsDyn365.isBrowser) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app context is generic\n stickyFilterSetup(props.isMobile, props.context.app.config.enableStickyHeader as boolean);\n }\n }, [props]);\n const [isExpanded, setIsExpanded] = React.useState<boolean>(false);\n const toggle = () => {\n setIsExpanded(!isExpanded);\n };\n const wrapperRefiner = React.useRef(null);\n useOutsideClick(wrapperRefiner, toggle);\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...searchResultContainer}>\n {similarLookProduct ? null : (\n <Node {...categoryNavContainer}>\n {renderTitle(titleViewProps)}\n {renderTitleCount(titleViewProps)}\n </Node>\n )}\n {choiceSummary}\n <Node className='msc-sort-filter-wrapper'>{modalToggle}</Node>\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...featureSearchContainer}>{similarLookProduct}</Node>\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...searchResultContainer}>\n {similarLookProduct ? null : (\n <Node {...categoryNavContainer}>\n {titleViewProps && renderTitle(titleViewProps)}\n {titleViewProps && renderTitleCount(titleViewProps)}\n </Node>\n )}\n <Node {...featureSearchContainer}>{similarLookProduct}</Node>\n <Node {...refineAndProductSectionContainer}>\n <Node ref={wrapperRefiner} className='ms-refiner-heading'>\n <Node className='ms-refiner-heading_title'>\n <Button\n className={isExpanded ? 'ms-refine-filter__toggle_expanded' : 'ms-refine-filter__toggle_collapsed'}\n aria-label='Filter'\n onClick={toggle}\n aria-expanded={isExpanded}\n tabIndex={0}\n >\n {resources.filterText}\n </Button>\n <div className='ms-search-result-wrapper-title-choice-summary'>{choiceSummary}</div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n </Node>\n {refineMenu && isExpanded && renderRefiner(refineMenu)}\n <Node className='ms-refine__footer'>\n {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}\n </Node>\n </Node>\n\n <Node {...productSectionContainer}>\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\n/**\n * Render Search result Modal.\n * @param modalProps - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createSearchResultModal = (\n modalProps: ISearchResultV2ModalViewProps,\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\n/**\n * Render Refiner Mobile.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefinerMobile = (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\n/**\n * Render Search result Body.\n * @param props - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createModalBody = (\n props: ISearchResultV2ModalViewProps,\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), renderRefinerMobile(refineMenu));\n }\n return null;\n};\n\n/**\n * Render Refiner.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\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\n/**\n * Render Refiner Footer.\n * @param props - The Refine Menu view props.\n * @param handler - The Refine menu toggle function.\n * @param resources - Resources to get the done text and aria label.\n * @returns The JSX Element.\n */\nconst renderRefinerFooter = (\n props: IRefineMenuViewProps,\n handler: MouseEventHandler,\n resources: ISearchResultContainerV2Resources\n): JSX.Element | null => {\n const { refiners } = props;\n if (refiners) {\n return (\n <Node className='ms-refine__footer__done'>\n <Node tag='button' className='ms-refine-filter-done' aria-label={resources.doneAriaLabel} tabIndex={0} onClick={handler}>\n {resources.doneText}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render sort by drop down.\n * @param props - The sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\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\n/**\n * Render Title.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, titleContainer } = props;\n if (title) {\n return (\n <Node {...titleContainer}>\n <Node tag='h1' className=''>\n {title.titlePrefix}\n {title.titleText}\n </Node>\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 { IImageData, IRequestContext, IVideoData } from '@msdyn365-commerce/core';\n\nexport enum MediaType {\n /**\n * The None.\n */\n None = 0,\n /**\n * The Image type.\n */\n Image = 1,\n /**\n * The video type.\n */\n Video = 2,\n /**\n * The file type.\n */\n File = 3\n}\n\nexport interface IMediaData extends IImageData {\n mediaTypeValue?: MediaType;\n displayOrder?: number;\n videoData?: IVideoData;\n}\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param productName Product name.\n * @param context Current request context.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult<ICartState>,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise<CartLineValidationResultsByLineId | undefined> {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise<boolean> {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise<ICartActionResult | undefined> {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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<IInvoiceSummaryLineProps> = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n <p className={`msc-invoice-summary__line-${cssLabel}`}>\n <span className=\"msc-invoice-summary__label\">{label}</span>\n {price || price === 0 ? (\n <PriceComponent\n data={{\n price: { CustomerContextualPrice: price }\n }}\n freePriceText={freeText}\n context={context}\n id={id}\n typeName={typeName}\n className=\"msc-invoice-summary__value\"\n />\n ) : (\n <span className=\"msc-invoice-summary__value\">{toBeCalculatedText}</span>\n )}\n </p>\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n <InvoiceSummaryLine\n price={price}\n label={label}\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n toBeCalculatedText={props.toBeCalculatedText}\n freeText={props.freeText}\n telemetry={props.telemetry}\n cssLabel={cssLabel}\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<IOrderSummaryLineProps> = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel,\n priceCurrency\n}) => {\n return (\n <p className={`msc-order-summary__line-${cssLabel}`}>\n <span className=\"msc-order-summary__label\">{label}</span>\n {price || price === 0 ? (\n <PriceComponent\n data={{\n price: { CustomerContextualPrice: price }\n }}\n freePriceText={freeText}\n context={context}\n id={id}\n typeName={typeName}\n className=\"msc-order-summary__value\"\n currencyCode={priceCurrency}\n />\n ) : (\n <span className=\"msc-order-summary__value\">{toBeCalculatedText}</span>\n )}\n </p>\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n <OrderSummaryLine\n price={price}\n label={label}\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n toBeCalculatedText={props.toBeCalculatedText}\n freeText={props.freeText}\n telemetry={props.telemetry}\n cssLabel={cssLabel}\n priceCurrency={props.channelConfiguration.Currency}\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 { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\n/**\n * The payment error.\n */\nexport interface IPaymentError {\n title: string;\n message: string;\n className?: string;\n}\n\n/**\n * The payment error.\n * @param param0 - First param.\n * @param param0.title - Title.\n * @param param0.message - Message.\n * @param param0.className - ClassName.\n * @returns React node.\n */\nexport const ErrorComponent: React.FC<IPaymentError> = ({ title, message, className = 'ms-checkout-payment-instrument' }) => (\n <div className={`${className}__error`} role='alert' aria-live='assertive'>\n <p className={`${className}__error-title`}>{title}</p>\n <p className={`${className}__error-message`}>{message}</p>\n </div>\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { format, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddressFormat } from '../address-format';\nimport { IAddressResource } from '../address-module.data';\nimport AddressButtonComponent from './address-button';\nimport AddressInputComponent from './address-input';\nimport { AddressShow, IAddressShowProps } from './address-show';\n\nexport interface IAddressSelectInputProps {\n hasExternalSubmitGroup?: boolean;\n addressFormat: AddressFormat;\n addresses: Address[];\n addressPurposes: AddressPurpose[];\n resources: IAddressResource;\n selectedAddress: Address;\n telemetryContent?: ITelemetryContent;\n onAddressOptionChange(event: React.ChangeEvent<HTMLInputElement>): void;\n onShipMultipleAddresses?(): void;\n onAddAddress(): void;\n onSave(): void;\n onCancel(): void;\n multipleAddressShippingEnabled?: boolean;\n}\n\nexport interface IAddressSelectItem {\n key: number;\n SelectItem: INodeProps;\n input: React.ReactNode;\n showItems: IAddressShowProps;\n}\n\nexport interface IAddressSelectProps {\n SelectAddress: INodeProps;\n shipMultipleAddressesButton?: React.ReactNode;\n addButton: React.ReactNode;\n items: IAddressSelectItem[];\n isShowSaveButton: boolean;\n saveButton: React.ReactNode;\n isShowCancelButton: boolean;\n cancelButton: React.ReactNode;\n}\n\nconst getInput = (index: number, address: Address, props: IAddressSelectInputProps): React.ReactNode => {\n const { addresses, onAddressOptionChange, selectedAddress, resources, addressPurposes } = props;\n const addressTypeDescription = address.AddressTypeValue\n ? addressPurposes.find(purpose => purpose.AddressType === address.AddressTypeValue)?.Description || ''\n : '';\n const ichecked = address.RecordId === selectedAddress.RecordId;\n const additionalAttributes = {\n checked: ichecked,\n 'aria-checked': ichecked,\n 'aria-setsize': addresses.length,\n 'aria-posinset': index + 1,\n 'aria-label': format(resources.addressChangeCheckboxAriaLabel, addressTypeDescription)\n };\n\n return (\n <AddressInputComponent\n {...{\n className: 'msc-address-select',\n name: 'selectAddressOptions',\n type: 'radio',\n value: (address.RecordId || '').toString(),\n onChange: onAddressOptionChange,\n additionalAddributes: additionalAttributes,\n telemetryContent: props.telemetryContent\n }}\n />\n );\n};\n\nconst getAddressSelectItems = (props: IAddressSelectInputProps): IAddressSelectItem[] => {\n const { addresses, addressFormat, addressPurposes } = props;\n\n return addresses.map((address, index) => {\n return {\n key: address.RecordId || 0,\n SelectItem: { className: 'msc-address-select__item' },\n input: getInput(index, address, props),\n showItems: AddressShow({\n addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''),\n address,\n addressPurposes\n })\n };\n });\n};\n\nexport const AddressSelect = (props: IAddressSelectInputProps): IAddressSelectProps => {\n const {\n resources,\n onCancel,\n onSave,\n onAddAddress,\n onShipMultipleAddresses,\n hasExternalSubmitGroup,\n multipleAddressShippingEnabled\n } = props;\n\n return {\n SelectAddress: { className: 'msc-address-select' },\n addButton: (\n <div className={multipleAddressShippingEnabled ? 'msc-address-select__button-container' : ''}>\n <AddressButtonComponent\n {...{\n className: `msc-address-select__button-${multipleAddressShippingEnabled ? 'add-new' : 'add'}`,\n text: multipleAddressShippingEnabled ? resources.addressAddNewButtonText! : resources.addressAddButtonText,\n ariaLabel: multipleAddressShippingEnabled\n ? resources.addressAddNewButtonAriaLabel!\n : resources.addressAddButtonAriaLabel,\n onClick: onAddAddress,\n telemetryContent: props.telemetryContent\n }}\n />\n </div>\n ),\n shipMultipleAddressesButton: multipleAddressShippingEnabled && onShipMultipleAddresses && (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__button-ship-multiple-addresses',\n text: resources.addressShipMultipleText!,\n ariaLabel: resources.addressShipMultipleAriaLabel!,\n onClick: onShipMultipleAddresses,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n isShowSaveButton: !hasExternalSubmitGroup,\n saveButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__button-save',\n text: resources.addressSaveButtonText,\n ariaLabel: resources.addressSaveButtonAriaLabel,\n onClick: onSave,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n isShowCancelButton: !hasExternalSubmitGroup,\n cancelButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__button-cancel',\n text: resources.addressCancelButtonText,\n ariaLabel: resources.addressCancelButtonAriaLabel,\n onClick: onCancel,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n items: getAddressSelectItems(props)\n };\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 { CheckoutModule, getCheckoutState, ICheckoutState } from '@msdyn365-commerce/global-state/';\n\nexport async function focusOnCheckoutError(checkoutErrorRef: React.RefObject<HTMLElement>, ctx: IActionContext): Promise<void> {\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n checkoutErrorRef.current && checkoutErrorRef.current.scrollIntoView();\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule.None });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n commerceApiRequest,\n commerceVideoMetadataRequest,\n getCatalogId,\n IActionContext,\n IImageData,\n IImageSettings,\n IVideoData\n} from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n getMediaLocationsForSelectedVariant,\n MediaLocationsForSelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise<IImageData[]> {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise<IImageData[]> {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise<IImageData[]> {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n\n/**\n * GetVideoMetadataFromAPI - Makes API call to get video metadata.\n * @param videoId: Video Id\n * @param actionContext: Action context\n * @returns: Returns the meta data of the video.\n */\nexport async function getVideoMetadataFromApi(videoId: string, actionContext: IActionContext): Promise<IVideoData | undefined> {\n let videoPlayerData: IVideoData | undefined;\n if (videoId) {\n const response = await commerceVideoMetadataRequest(actionContext.requestContext, [videoId]);\n\n if (response.status !== 200) {\n actionContext.telemetry.debug(`Unable to get video metadata for videoId: ${videoId}`);\n return;\n }\n\n const videoData = response.data as [];\n if (videoData && ArrayExtensions.hasElements(videoData)) {\n videoPlayerData = videoData[0];\n }\n }\n return videoPlayerData;\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","import { createContext, ReactNode } from 'react';\r\n\r\nexport interface ICheckoutContext {\r\n placeOrderButton: ReactNode | null;\r\n cartHasBalance: boolean;\r\n mailChimp: ReactNode | null;\r\n termsAndConditions: ReactNode | null;\r\n}\r\n\r\nexport const CheckoutContext = createContext<ICheckoutContext>({\r\n placeOrderButton: null,\r\n cartHasBalance: true,\r\n mailChimp: null,\r\n termsAndConditions: null\r\n});\r\n\r\nconst { Consumer: CheckoutConsumer, Provider: CheckoutProvider } = CheckoutContext;\r\n\r\nexport { CheckoutConsumer, CheckoutProvider };\r\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\nimport AddressInputComponent from './address-input';\n\nexport interface IAddressBillingCheckbox {\n isChecked: boolean;\n value: string;\n ariaLabel: string;\n text: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\n}\n\nexport const AddressBillingCheckbox: React.FC<IAddressBillingCheckbox> = ({\n isChecked,\n value,\n ariaLabel,\n text,\n telemetryContent,\n onChange\n}) => {\n const additionalAttributes = {\n checked: isChecked,\n 'aria-checked': isChecked\n };\n\n return (\n <label className='ms-checkout-billing-address__shipping-address-label'>\n <AddressInputComponent\n {...{\n type: 'checkbox',\n className: 'ms-checkout-billing-address',\n value,\n onChange,\n additionalAddributes: additionalAttributes,\n telemetryContent\n }}\n />\n <span className='ms-checkout-billing-address__shipping-address-checkbox-text'>{text}</span>\n </label>\n );\n};\nexport default AddressBillingCheckbox;\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 IAddressBillingHeading {\n text: string;\n}\n\nexport const AddressBillingHeading: React.FC<IAddressBillingHeading> = ({ text }) => (\n <h2 className='ms-checkout-billing-address__heading'>{text}</h2>\n);\n\nexport default IAddressBillingHeading;\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';\nimport { INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { Address, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport AddressButtonComponent from './address-button';\nimport { IShipMultipleAddressesTableHeadingProps, ShipMultipleAddressesTableHeading } from './address-ship-multiple-heading';\nimport { IAddressResource } from '../address-module.data';\nimport {\n IShipMultipleAddressesLineProps,\n IShipMultipleAddressesLineViewProps,\n ShipMultipleAddressesLineView\n} from './address-ship-multiple-lines';\nimport { IShipMultipleAddressesLineViewModel } from '../../modules/checkout-shipping-address';\nimport { ICartLineWithProduct, ICheckoutShippingCartLineInfo } from '../../modules/checkout-shipping-address/components';\n\nexport interface IAddressShipMultipleInputProps {\n context: ICoreContext;\n hasExternalSubmitGroup?: boolean;\n moduleId: string;\n moduleTypeName: string;\n currencyCode: string | undefined;\n resources: IAddressResource;\n shippingLines: ICartLineWithProduct[];\n shippingLineImages: ICheckoutShippingCartLineInfo[];\n selectedShippingLines: IShipMultipleAddressesLineViewModel[];\n customerAddresses: Address[];\n onSelect(line: IShipMultipleAddressesLineViewModel, isChecked: boolean): void;\n onSelectAll(isChecked: boolean): void;\n onClear(): void;\n onShippingAddressChange(shippingLine: CartLine, event: React.ChangeEvent<HTMLSelectElement>): void;\n onBulkShippingAddressChange(event: React.ChangeEvent<HTMLSelectElement>): void;\n onShipSingleAddress(): void;\n onSave(): void;\n onCancel(): void;\n isMobile: boolean;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IShipMultipleAddressesViewProps {\n ShipMultipleAddress?: INodeProps;\n shipSingleAddressButton?: React.ReactNode;\n clearSelectionButton?: React.ReactNode;\n addressDropdown?: React.ReactNode;\n ProductsTable?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductsTableRow?: INodeProps;\n shipMultipleAddressLines?: IShipMultipleAddressesLineViewProps[];\n isShowSaveButton?: boolean;\n saveButton?: React.ReactNode;\n isShowCancelButton?: boolean;\n cancelButton?: React.ReactNode;\n isMobile?: boolean;\n}\n\nexport const AddressShipMultiple = (props: IAddressShipMultipleInputProps): IShipMultipleAddressesViewProps => {\n const {\n context,\n currencyCode,\n hasExternalSubmitGroup,\n moduleId,\n moduleTypeName,\n shippingLines,\n shippingLineImages,\n selectedShippingLines,\n customerAddresses,\n isMobile,\n onSelect,\n onSelectAll,\n onClear,\n onShippingAddressChange,\n onBulkShippingAddressChange,\n onShipSingleAddress,\n onSave,\n onCancel,\n resources\n } = props;\n\n const { unavailableProductErrorMessage, outOfStockProductErrorMessage } = props.resources;\n\n const shipMultipleAddressLines: IShipMultipleAddressesLineViewModel[] = [];\n\n for (const line of shippingLines) {\n shipMultipleAddressLines.push({\n isChecked: false,\n cartLine: line.cartLine\n });\n }\n\n function _renderProductListHeader(): React.ReactNode {\n const headers: IShipMultipleAddressesTableHeadingProps = {\n selectAllRowsText: resources.addressSelectAllRowsText,\n productNumber: resources.addressProductNumberText!,\n productName: resources.addressProductText!,\n productUnitPrice: resources.addressProductUnitPriceText!,\n productQuantity: resources.addressProductQuantityText!,\n productAddress: resources.addressProductAddressText,\n clickHandler: (isChecked: boolean) => {\n onSelectAll(isChecked);\n },\n isAllSelected: selectedShippingLines && selectedShippingLines.every(line => line.isChecked),\n isMobile: isMobile,\n clearSelectionButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__clear-selection-button',\n text: resources.clearSelectionButtonText!,\n ariaLabel: resources.clearSelectionButtonAriaLabel!,\n onClick: onClear,\n telemetryContent: props.telemetryContent,\n disabled: selectedShippingLines.every(line => !line.isChecked)\n }}\n />\n )\n };\n\n return <ShipMultipleAddressesTableHeading {...headers} />;\n }\n\n function _renderShipMultipleAddressLines(): IShipMultipleAddressesLineViewProps[] {\n return shippingLines.map((line, index) => {\n const currentLineProps: IShipMultipleAddressesLineProps = {\n shipMultipleAddressesLine: {\n isChecked: (selectedShippingLines && selectedShippingLines[index] && selectedShippingLines[index].isChecked) || false,\n cartLine: line.cartLine\n },\n shippingLineImage: shippingLineImages[index],\n product: line.product ? line.product : undefined,\n price: line.product?.Price,\n context,\n quantity: line.cartLine?.Quantity!,\n moduleId: moduleId,\n moduleTypeName: moduleTypeName,\n currencyCode: currencyCode,\n customerAddresses: customerAddresses,\n isMobile: isMobile,\n onSelect: onSelect,\n onShippingAddressChange: onShippingAddressChange,\n resources: {\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n }\n };\n\n return ShipMultipleAddressesLineView({ ...currentLineProps })!;\n });\n }\n\n return {\n ShipMultipleAddress: { className: 'msc-address-select' },\n shipSingleAddressButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__button-ship-single-address',\n text: resources.addressShipSingleText!,\n ariaLabel: resources.addressShipSingleAriaLabel!,\n onClick: onShipSingleAddress,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n clearSelectionButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__clear-selection-button',\n text: resources.clearSelectionButtonText!,\n ariaLabel: resources.clearSelectionButtonAriaLabel!,\n onClick: onClear,\n telemetryContent: props.telemetryContent,\n disabled: selectedShippingLines.every(line => !line.isChecked)\n }}\n />\n ),\n addressDropdown: (\n <select\n className={'msc-address-select__address-dropdown'}\n title={resources.chooseAddressForSelectedItemsText}\n aria-label={resources.chooseAddressForSelectedItemsAriaLabel}\n onChange={e => onBulkShippingAddressChange(e)}\n defaultValue={''}\n disabled={selectedShippingLines.every(line => !line.isChecked)}\n >\n <option value='' aria-label={resources.noAddressSelectedAriaLabel} disabled hidden>\n {resources.chooseAddressForSelectedItemsText}\n </option>\n {customerAddresses?.map((address: Address, index: number) => (\n <option key={index} value={address.RecordId} aria-label={address.FullAddress}>\n {address.FullAddress}\n </option>\n ))}\n </select>\n ),\n ProductsTable: {\n className: `ms-address-select__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `ms-address-select-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: _renderProductListHeader(),\n shipMultipleAddressLines: _renderShipMultipleAddressLines(),\n isShowSaveButton: !hasExternalSubmitGroup,\n saveButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__save-continue-button',\n text: resources.saveAndContinueBtnLabel!,\n ariaLabel: resources.addressSaveButtonAriaLabel,\n onClick: onSave,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n isShowCancelButton: !hasExternalSubmitGroup,\n cancelButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__cancel-button',\n text: resources.addressCancelButtonText,\n ariaLabel: resources.addressCancelButtonAriaLabel,\n onClick: onCancel,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n isMobile: isMobile\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 interface IShipMultipleAddressesTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productQuantity: string;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n productAddress?: string;\n isAllSelected: boolean;\n isMobile: boolean;\n clearSelectionButton: React.ReactNode;\n}\n\nexport interface IShipMultipleAddressesTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IShipMultipleAddressesTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Ship multiple addresses table heading.\n */\nexport class ShipMultipleAddressesTableHeading extends React.PureComponent<IShipMultipleAddressesTableHeadingProps> {\n public state: IShipMultipleAddressesTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public getOnChange = () => (event: React.ChangeEvent<HTMLInputElement>) => {\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 if (!this.props.isMobile) {\n return (\n <thead>\n <tr className={`${this.componentClassName}__heading-row`}>\n <th scope='col' aria-label={this.props.selectAllRowsText}>\n <label className='checkbox-container'>\n <input\n aria-label={this.props.selectAllRowsText}\n className='checkbox-input'\n type='checkbox'\n aria-checked={this.props.isAllSelected}\n checked={this.props.isAllSelected}\n onChange={this.getOnChange()}\n />\n <span className='checkmark' />\n </label>\n </th>\n <th scope='col'>{this.props.productNumber}</th>\n {<th scope='col'>{this.props.productName}</th>}\n {\n <th scope='col' style={{ textAlign: 'right' }}>\n {this.props.productUnitPrice}\n </th>\n }\n {\n <th scope='col' style={{ textAlign: 'center' }}>\n {this.props.productQuantity}\n </th>\n }\n {<th scope='col'>{this.props.productAddress}</th>}\n </tr>\n </thead>\n );\n } else {\n return (\n <thead>\n <tr className={`${this.componentClassName}__heading-row`}>\n <th scope='col' style={{ maxWidth: '100px', position: 'relative' }} aria-label={this.props.selectAllRowsText}>\n <label className='checkbox-container' style={{ paddingLeft: '25px' }}>\n <input\n aria-label={this.props.selectAllRowsText}\n className='checkbox-input'\n type='checkbox'\n aria-checked={this.props.isAllSelected}\n checked={this.props.isAllSelected}\n onChange={this.getOnChange()}\n />\n <span className='checkmark' style={{ border: '1.5px solid #2266e3' }} />\n Select all\n </label>\n\n {/* Clear Selection Button */}\n <div style={{ position: 'absolute', top: '50%', left: '65%', transform: 'translate(-50%, -50%)' }}>\n {this.props.clearSelectionButton}\n </div>\n </th>\n </tr>\n </thead>\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 React from 'react';\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { Address, CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IShipMultipleAddressesLineViewModel } from '../../modules/checkout-shipping-address';\nimport { ICheckoutShippingCartLineInfo } from '../../modules/checkout-shipping-address/components';\n\nexport interface IShipMultipleAddressesLineProps extends CartLine {\n shipMultipleAddressesLine: IShipMultipleAddressesLineViewModel;\n shippingLineImage: ICheckoutShippingCartLineInfo;\n price?: number;\n context: ICoreContext;\n product?: SimpleProduct;\n imageSettings?: IImageSettings;\n quantity: number;\n moduleId: string;\n moduleTypeName: string;\n currencyCode: string | undefined;\n customerAddresses: Address[];\n error?: string;\n isMobile: boolean;\n onSelect(line: IShipMultipleAddressesLineViewModel, isChecked: boolean): void;\n onShippingAddressChange(shippingLine: CartLine, event: React.ChangeEvent<HTMLSelectElement>): void;\n resources: {\n unavailableProductErrorMessage?: string;\n outOfStockProductErrorMessage?: string;\n };\n}\n\nexport interface IShipMultipleAddressesLineViewProps {\n key?: string;\n productImage?: React.ReactNode;\n productPrice?: React.ReactNode;\n productCurrencyCode?: 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 productListId?: string;\n productAddress?: React.ReactNode;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n productAddressPopup?: JSX.Element | null | undefined;\n isMobile?: boolean;\n}\n\n/**\n * On Select line function.\n * @param shipMultipleAddressesLine - Ship multiple addresses line.\n * @param input - Ship multiple addresses line props.\n * @returns Set on select shipping line.\n */\nconst onSelectLineHandler = (shipMultipleAddressesLine: IShipMultipleAddressesLineViewModel, input: IShipMultipleAddressesLineProps) => (\n event: React.ChangeEvent<HTMLInputElement>\n) => {\n shipMultipleAddressesLine.isChecked = !shipMultipleAddressesLine.isChecked;\n\n input.onSelect(shipMultipleAddressesLine, event.target.checked);\n};\n\nexport const ShipMultipleAddressesLineView = (input: IShipMultipleAddressesLineProps): IShipMultipleAddressesLineViewProps | null => {\n const { customerAddresses, shipMultipleAddressesLine, shippingLineImage, product, context, onShippingAddressChange } = input;\n\n console.log('ShipMultipleAddressesLineView rendering');\n\n if (!product) {\n return null;\n }\n\n const { ItemId } = product;\n const { Quantity, ShippingAddress } = shipMultipleAddressesLine.cartLine;\n\n return {\n selectLine: (\n <label className='checkbox-container'>\n <input\n className='checkbox-input'\n type='checkbox'\n checked={shipMultipleAddressesLine.isChecked}\n aria-checked={shipMultipleAddressesLine.isChecked}\n onChange={onSelectLineHandler(shipMultipleAddressesLine, input)}\n />\n <span className='checkmark' />\n </label>\n ),\n productImage: renderProductImage(\n '',\n context,\n product.Name!,\n shippingLineImage.imageProps.fallBackSrc,\n shippingLineImage.imageProps.src\n ),\n productInfo: renderProductInfo(input),\n productPrice: renderProductPrice(input),\n productNumber: product && (\n <>\n <div>{ItemId}</div>\n {input.error !== 'NONE' ? <div>{renderProductError(input)}</div> : undefined}\n </>\n ),\n productQuantity: Quantity,\n productAddress: (\n <select\n className={'msc-address-select__current-address-dropdown'}\n onChange={e => onShippingAddressChange(shipMultipleAddressesLine.cartLine, e)}\n value={ShippingAddress?.RecordId}\n >\n {customerAddresses?.map((address: Address, index: number) => (\n <option\n key={index}\n value={address.RecordId}\n aria-label={address.FullAddress}\n className={'msc-address-select__current-address-text'}\n >\n {address.FullAddress}\n </option>\n ))}\n </select>\n )\n };\n};\n\nconst renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string\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 <Image\n requestContext={context?.actionContext?.requestContext}\n className={className}\n altText={heading}\n title={heading}\n src={image}\n fallBackSrc={fallbackImage}\n gridSettings={context?.request?.gridSettings!}\n imageSettings={defaultImageSettings}\n loadFailureBehavior='empty'\n tabIndex={0}\n />\n );\n};\n\nconst renderProductDimensions = (props: IShipMultipleAddressesLineProps): (string | undefined)[] => {\n const { product } = props;\n if (!product || !product.Dimensions) {\n return [];\n }\n return product.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n return dimension.DimensionValue.Value;\n });\n};\n\nconst renderProductInfo = (props: IShipMultipleAddressesLineProps): React.ReactNode | undefined => {\n const { product } = props;\n const name = product?.Name;\n const dimensions = renderProductDimensions(props);\n if (!product) {\n return [];\n }\n const productName = <div>{name}</div>;\n const dimensionsLine: string = dimensions.join(', ');\n return (\n <div>\n <div>{productName}</div>\n <div>{dimensionsLine}</div>\n </div>\n );\n};\n\nconst renderProductPrice = (props: IShipMultipleAddressesLineProps): React.ReactNode | undefined => {\n const { product } = props;\n\n if (!product?.Price) {\n return null;\n }\n\n return (\n <span>\n <PriceComponent\n data={{\n price: {\n CustomerContextualPrice: product.Price\n }\n }}\n context={props.context}\n id={props.moduleId}\n typeName={props.moduleTypeName}\n currencyCode={props.currencyCode}\n />\n </span>\n );\n};\n\nconst renderProductError = (props: IShipMultipleAddressesLineProps) => {\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","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","export const defaultAddressTypeMap: Record<string, number> = {\r\n Invoice: 1,\r\n Delivery: 2,\r\n SWIFT: 4,\r\n Payment: 5,\r\n Service: 6,\r\n Home: 7,\r\n Other: 8,\r\n Business: 9,\r\n RemitTo: 10,\r\n Statement: 12,\r\n FixedAsset: 15,\r\n Onetime: 16,\r\n Recruit: 17,\r\n Lading: 101,\r\n Unlading: 102,\r\n Reallocation: 150,\r\n HeadCompany: 151,\r\n StableOrganization: 152,\r\n Consignment: 103,\r\n ProductionSite: 3\r\n};\r\n"],"names":["CheckoutBillingAddress","React","constructor","props","super","countryRegionId","countryRegions","addressPurposes","defaultAddressType","checkoutErrorRef","_onSuggestionSelected","async","this","_clearAddressFields","address","addressFormat","getTranformedAddress","result","stateProvinceInfo","set","addUpdateAddress","Street","ZipCode","CountyName","City","State","DistrictName","FullAddress","setTimeout","getAddressFormat","ThreeLetterISORegionName","forEach","format","_this$autoSuggest","undefined","name","autoSuggest","excludedAddressFields","includes","_clearValidation","validationError","onAddressAddUpdate","value","validateAddressFormat","_dataInitialize","data","reaction","_data$countryRegions$","_data$addressPurposes","countryStates","_data$countryStates$r","_renderAddOrUpdateAddress","_this$addUpdateAddres","AddressAddUpdate","resources","addressType","AddressType","Billing","defaultCountryRegionId","selectedAddress","addressActionResponse","dropdownDisplayData","getPrefilledAddressDropdownData","addressStateDefaultSelectionText","telemetryContent","onInputChange","_onAddressAddUpdateInputChange","onDropdownChange","_onAddressAddUpdateDropdownChange","hasExternalSubmitGroup","moduleState","onSave","_onSubmitAddress","onCancel","_resetView","_onCountryChange","_this$autoSuggest2","twoLetterIsoRegionName","getTwoLetterISORegionName","TwoLetterISORegionName","changeAutoSuggestionCountryCode","_getAddressFormatExcludeList","config","addressFormatExcludeList","showAddressType","push","AddressItemType","AddressTypeValue","IsPrimary","_attachMapAutoSuggest","storeSelectorStateManager","_this$autoSuggest3","isMapApiLoaded","attachAutoSuggest","event","target","replace","RegExp","_getStateProvinces","currentOperation","AddressOperation","Add","Update","addressCommon","getStateProvinces","then","some","state","StateId","_initModuleState","_this$props$data$chec","init","status","isBillingAddressRequried","onEdit","onSubmit","billingAddress","isBillingAddressSameAsShippingAddress","checkout","isBillingAddressSameAsShipping","_updateCurrentOperation","Show","_updateModuleState","isCartContainsItemsForShipping","shippingAddress","_onBillingAddressSameAsShippingChange","currentTarget","checked","_this$props$data$chec2","_this$props$data$chec3","setHasError","shouldEnableSinglePaymentAuthorizationCheckout","isPaymentSectionContainerHasError","updateIsBillingAddressHasError","newIsBillingAddressHasError","_setBillingAddress","telemetry","information","error","onUpdating","newBillingAddress","_objectSpread","updateBillingAddress","additionalProperties","operation","onReady","_setErrorMessage","errorMessage","setState","context","List","AddressCommon","AddressFormat","AddressMetaData","getTelemetryObject","request","telemetryPageName","friendlyName","isShowAddress","isShowAddOrUpdateAddress","isShowSameAsShippingCheckbox","_this$props$data$chec5","actionContext","requestContext","channel","autoSuggestionEnabled","autoSuggestOptions","_setDefaultCountryRegionId","isUpdating","_this$props$data$chec4","isDisabled","removeBillingAddress","onDisable","BingMapsApiKey","BingMapsEnabled","options","AutoSuggest","ChannelCountryRegionISOCode","DefaultLanguageId","_loadMapAPI","_this$props$data$stor","loadMapApi","_this$autoSuggest4","_this$props$data$stor2","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec6","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec7","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","_this$props$data$stor3","_this$autoSuggest5","disposeAutoSuggest","shouldComponentUpdate","nextProps","nextState","render","_shouldHideBillingAddressForOBO","hasError","renderView","className","viewState","moduleProps","classnames","heading","AddressBillingHeading","Object","assign","text","addressBillingAddressHeading","alert","ErrorComponent","title","errorMessageTitle","message","sameAsShippingCheckbox","AddressBillingCheckbox","isChecked","type","ariaLabel","addressSameAsShippingAddressAriaLabel","addressSameAsShippingAddressText","onChange","showAddress","_renderShowAddress","showAddOrUpdateAddress","_this$selectedAddress","AddressShow","_request$channel","market","getDefaultCountryRegionId","_featureState$result","_request$channel2","_request$channel3","_this$props$data$chec8","channelDeliveryOptionConfig","featureState","retailMultiplePickUpOptionEnabled","find","feature","Name","IsEnabled","pickupDeliveryModeCode","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","checkoutCart","hasInvoiceLine","cart","CartLines","cartLine","_channelDeliveryOptio","DeliveryMode","PickupDeliveryModeCodes","deliveryMode","_this$props$data$chec9","_this$props$data$chec10","checkoutState","loyaltyAmount","giftCardExtends","reduce","count","giftCard","Balance","_checkoutState$custom","customerAccountAmount","checkoutResult","length","paymentTenderType","tokenizedPaymentCard","isPaidByOtherPaymentSource","paymenTenderType","TotalAmount","getGiftCardTotalAmount","getLoyaltyAmount","getCustomerAccountAmount","_this$props$data$chec11","_this$props$data$chec12","shouldPaidByCard","isPaymentVerificationRedirection","isCheckoutCallFailed","Msdyn365","EnabledPaymentsForOBO","PaymentInstrument","__decorate","observable","action","computed","withModuleState","observer","CheckoutPickupCartLines","_ref","moduleClassName","cartLines","itemTitle","isMultipleAddressShippingEnabled","isMobileCheck","isMobile","variant","VariantType","Browser","gridSettings","xs","w","sm","md","lg","xl","isMobileView","ArrayExtensions","hasElements","headingAfterMultiSelectAddressSelect","map","isShowQty","quantity","key","lineId","Image","imageProps","role","productQuantityInfo","altText","id","defaultImageSettings","viewports","q","h","lazyload","quality","CheckoutShippingAddress","_data$featureState$re2","customerAddresses","addressListSelectedAddress","multiplePickupStoreSwitchName","onSelect","line","selectedShippingLines","updated","shippingLine","_shippingLine$cartLin","LineId","console","onShippingAddressChange","addressRecordId","RecordId","toString","shippingGroups","updatedCartLine","ShippingAddress","updateIndividualAddresses","prevState","onBulkShippingAddressChange","index","cartline","_shippingLine$cartLin2","_initPickupGroup","pickupCartLines","_getCartLinesforDelivery","products","_getProductsByCartLines","ChannelId","product","x","ProductId","shippingGroupsBuffer","initialShippingLineSelection","addressFormatItem","formatAddress","_data$address$result","_data$featureState$re","filter","_isDelivery","_isNotPickupMode","FulfillmentStoreId","_this$props$context$r","pickupDeliveryMode","pickupMode","channelId","productInputs","ObjectExtensions","isNullOrUndefined","ProductInput","apiSettings","CatalogId","getSimpleProducts","_renderShipMultipleAddresses","onSaveHandler","onCancelHandler","imageSettings","cartlineImages","_line$cartLine$LineId","_line$product","_line$product$Primary","_line$product2","_line$product3","_context$request$app","_line$cartLine$Quanti","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","app","OmniChannelMedia","loadFailureBehavior","Quantity","AddressShipMultiple","isAuthenticatedFlow","onCancelButtonHandler","bind","onSelectAll","onClear","onShipSingleAddress","resetSelectedShippingLines","shippingLines","shippingLineImages","currencyCode","moduleId","moduleTypeName","typeName","Shipping","_renderSelectAddress","onShipMultipleAddressesHandler","onAddAddressHandler","AddressSelect","addresses","onAddressOptionChange","_onAddressOptionChange","onShipMultipleAddresses","_goToShipMultipleAddresses","onAddAddress","_goToAddAddress","_onSelectAddress","multipleAddressShippingEnabled","_onAddressAddUpdateSubmit","response","_isNewAddress","updateCustomerAddress","addCustomerAddress","Promise","resolve","_clearError","_onAddOrUpdateSuccess","_getDefaultAddress","_getAddressFromCartExpressPaymentDetails","expressPaymentDetailsFromCartPage","isExpressAddressAppliedInCartPage","addressFromCartExpress","getExpressAddress","getAddressFromTokenizedPaymentCard","Country","threeLetterIsoRegionName","getThreeLetterIsoRegionName","NameOnCard","Address1","StreetNumber","Address2","Zip","Phone","expressAddress","countryRegion","country","_country$ISOCode","ISOCode","toLowerCase","CountryRegionId","_canShip","defaultAddress","shippingCartLines","isExpressCheckoutApplied","shippingAddressFromExpressCheckout","isEmpty","_setShippingAddress","updateHasShippingAddress","newHasShippingAddress","Multiple","_onSelectMultiAddress","_checkout$result$chec","_checkout$result$chec2","_channelDeliveryOptio2","_setCartLinesShippingAddress","newShippingAddress","updateShippingAddress","catch","newCartLinesWithShippingAddress","shippingGroup","updateCartLinesShippingAddress","updateCartLineShippingAddress","updatedCartLinesObject","_getViewport","device","Type","MsDyn365","isBrowser","window","innerWidth","onPending","existingAddress","_address$Name","_address$Street","_address$StreetNumber","_address$City","_address$State","_address$ZipCode","_address$Phone","_address$ThreeLetterI","_address$AddressTypeV","_countItems","cartlines","_viewport","_updateViewport","_address","addEventListener","componentWillUnmount","removeEventListener","_featureState$result2","headingImages","itemsText","singleItemText","_line$cartLine$LineId2","_line$product4","_line$product$Primary2","_line$product5","_line$product6","_context$request$app2","_line$cartLine$Quanti2","_line$cartLine$Shippi","_line$cartLine$Shippi2","shippingAddressId","numberOfCartLines","itemText","lineImageProps","cartLineImages","isRetailMultiplePickUpOptionEnabled","isShowAddresList","isShowShipMultipleAddress","showAddressSelectHandler","showShipMultipleAddressesHandler","showShipMultipleAddresses","showAddOrUpdateAddressHandler","showAddressSelect","_this$props$data$cart","_this$props$data$cart2","properties","ExtensionProperties","property","Key","Value","StringValue","JSON","parse","get","MediaGallery","_this","_props$config$zoomedI","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","player","defaultGalleryImageSettings","cropFocalRegion","defaultThumbnailImageSettings","onExiting","animating","onExited","next","removeInlineZoomStyle","isLastItem","nextIndex","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","autoplay","currentIndex","mediaItems","_mediaItems","_this$player$current","mediaTypeValue","MediaType","Video","current","play","_this$player$current2","pause","getImagesData","skipImageValidation","_this$props$config$im","_this$props$config$im2","source","imageSource","mediaLocations","mediaLocationsForSelectedVariant","mediaLocation","_mediaLocation$Uri","_this$props$data$prod","Uri","getAltText","shouldUseCmsAltText","AltText","IsApplicableForChildEntities","isApplicableForChildEntities","curatedImages","_filterMasterImageFromVariant","_renderCarouselItemVideo","mediaData","videoData","_videoData$_links","playerResources","videoMetaData","videoId","duration","playTime","thumbnail","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","attributes","editProps","Player","ref","playerData","isEditor","params","_renderEmptyImage","_getCarouselItem","image","_this$props$context$r2","isInPopup","arguments","fallbackImage","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","tag","tabIndex","onClick","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","getVideoThumbNailItem","classes","_refHandler","divRef","which","KeyCodes","Enter","Space","preventDefault","_renderVideoThumbnail","fullScreenTitleText","openModalDialog","_toggleModal","imageModalSlider","ZoomView","_mapProductToImageData","carouselprops","Carousel","items","item","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","classNames","ImagefullView","altTextSource","mediaGalleryImages","isImageZoomed","isInitialLoad","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","Viewport","_this$props$config$im3","_this$props$context$r3","shouldUpdateOnPartialDimensionSelection","_setRenderType","_this$props$config$th","validateProductImages","thumbnailImageSettings","_setImages","_this$props$config$th2","getValidProductImages","productVariant","_product$productVaria","_this$props$context$a","_this$props$config$th3","getProductImages","fireImmediately","_this$props$config$th4","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","_this$props$context$r4","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","Modal","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","keys","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","stringify","lastUpdate","defaultKey","_getEmptyThumbnailItem","zoomView","curatedImage","mediaToSet","all","URL","searchParams","getVideoMetadataFromApi","debug","element","Date","now","media","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","MasterProductId","itemId","_item$additionalPrope","_this$props$config$da","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","mobileZoomedInImageClassName","style","transform","classList","remove","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","Number","positionX","clientX","left","positionY","clientY","top","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","_this$props$config$da5","onMouseOut","onMouseMoveLensContainer","onMouseOverImageContainer","href","_product$PrimaryImage","_this$fullScreenOverl","focus","parentDiv","children","querySelector","removeAttribute","removeContainerZoomStyle","AddressDetail","Node","description","_ref2","AddressForm","isShowSaveButton","saveButton","isShowCancelButton","cancelButton","AddressItem","label","input","AddressError","Module","SelectAddress","shipMultipleAddressesButton","addButton","SelectItem","showItems","_ref3","ShipMultipleAddress","shipSingleAddressButton","clearSelectionButton","addressDropdown","ProductsTable","ProductsTableHeading","ProductsTableRow","shipMultipleAddressLines","_renderShipMultipleAddressLine","_ref4","shipMultipleAddressesLine","selectLine","productImage","productNumber","productInfo","productPrice","productQuantity","productAddress","position","verticalAlign","colSpan","width","display","marginTop","textAlign","_renderThumbnails","thumbnails","_renderThumbnailItem","getDefaultColorSwatchSelected","productData","_colorAttribute$swatc","_colorAttribute$swatc2","_colorAttribute$swatc3","attributeValues","colorAttribute","attributeValue","_attributeValue$keyNa","keyName","toLocaleLowerCase","DimensionTypes","color","defaultSwatch","swatches","isDefault","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","baseUrl","search","pathname","renderProductUnitOfMeasure","unitOfMeasure","renderLabel","price","rating","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","ratingAriaLabel","roundedRating","toFixed","renderPrice","basePrice","adjustedPrice","savingsText","freePriceText","originalPriceText","currentPriceText","isPriceMinMaxEnabled","priceResources","BasePrice","AdjustedPrice","CustomerContextualPrice","PriceComponent","renderProductPlacementImage","imageUrl","fallbackImageUrl","_context$app$config","contextConfig","fallbackImageSource","img","ProductComponentV2","msdyn365Commerce","createComponentOverride","component","_product$name","_product$recordId","_getProductImageUrlFr","_getProductPageUrlFro","ratingCountAriaLabel","allowBack","quickViewButton","productComparisonButton","isEnabledProductDescription","inventoryLabel","dimensionAvailabilities","swatchItemAriaLabel","productUrl","getProductPageUrlSync","recordId","MIN_VALUE","productImageUrlFromSwatch","dimensionToPreSelectInProductCard","none","primaryImageUrl","productImageUrls","generateImageUrl","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","swatchValue","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","enableStockCheck","updatePageAndImageUrl","swatchItem","dimensionType","setValue","StringExtensions","isNullOrWhitespace","productPageUrlWithSwatch","newUrl","delete","swatchProductImageUrl","newImageUrl","payLoad","getPayloadObject","attribute","getTelemetryAttributes","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","onTelemetryClick","cultureFormatter","formatCurrency","averageRating","totalRatings","defaultUnitOfMeasure","_item$keyName$toLocal","_item$keyName","_item$swatches$map","_item$swatches","dimensionTypeValue","dimensionsToDisplayOnProductCard","dimensionsInProductCard","shouldDisplayDimension","_item$recordId","_swatchItem$swatchVal","_swatchItem$swatchVal2","_dimensionAvailabilit","colorHexCode","swatchColorHexCode","swatchImageUrl","dimensionAvailability","_swatchItem$swatchVal3","swatch","ProductComponentV2SwatchComponent","onSelectDimension","hideRating","avgRating","numberRatings","RatingComponent","ratingCount","readOnly","renderRating","inventoryAvailabilityLabel","quickview","selectedDimensions","getValues","convertDimensionTypeToProductDimensionType","dimensionValue","selectedProductId","renderQuickView","catalogId","validateCatalogId","renderProductComparisonButton","getCatalogId","ProductPickUpOptionsForCartLineItems","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","Error","getCartState","getActiveCartProductsAction","ActiveCartProductsInput","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","createObservableDataAction","inputData","PickUpInStore","_toggleBOPIS","isBopisSelected","cartState","storeSelectorModuleId","openDialog","alreadySelectedLocation","OrgUnitNumber","deliveryOptions","onLocationSelected","orgUnitLocation","updateCartLinePickupLocation","cartLineId","location","locationChangedHandler","_onLocationChangedCallback","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","foundLocation","OrgUnitName","DeliveryOptions","_props$channelDeliver","retailMulitplePickupFeatureState","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","delivery","pickup","deliveryCode","Code","option","callbacks","toggleBopis","defaultComponent","_renderShippingMethod","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","Description","ContainerProps","_assembleNode","foundProductAvailability","productPickUpOptions","_product$Behavior","_foundProductAvailabi","_product$Dimensions","_props$cartState","_context$request$chan","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isMultipleCatalogFeatureEnabledInHq","isAuthenticated","user","nameOfWishlist","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","isQuantityLimitsFeatureEnabled","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","Behavior","MaximumQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","IsInvoiceLine","_getErrorMessage","currentQuantity","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","i","ValidationFailures","validation","ErrorContext","join","onRemoveClickHandler","onRemoveClickFunction","payload","TelemetryEvent","RemoveFromCart","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","getProductUrlSync","isChannelTypeB2B","_cartline$CatalogId","fullUrl","getInvoiceDetailsPageUrlSync","cartlineId","isNullOrEmpty","CartLineItemComponent","catalogs","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","priceCurrency","Currency","pickUpInStore","pickitUpText","Button","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","shouldShowButtonFailedTooltip","disableButton","disableTooltip","assembleCartlines","reactNodes","getProductByProductIdAndWarehouse","WarehouseId","getProductByProductId","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","_assembleGroupInvoiceCartlines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","entries","deliveryType","groupByDeliveryType","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","exception","Cart","_isMounted","promotionPopupId","promotionLinkClick","showPromotionDialog","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","validateCart","warning","updateCartlineQuantity","cartlineToUpdate","cartLineQuantityUpdatedAsync","cartActionResult","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","isCartValid","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","_this$props$data$cart3","_cart$cart$CartLines","_this$props$data$feat","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","RetailMultiplePickupFeatureState","multiplePickUpEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","getCartLinesGroup","contentAction","etext","TelemetryConstant","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","cartTitle","CartlinesWrapper","OrderSummaryWrapper","OrderSummaryItems","promoCode","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","orderSummaryHeading","invoiceSummaryTitle","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","showGuestCheckoutButton","guestCheckoutButtonTitle","expressCheckoutButton","slots","paymentExpress","ExpressCheckoutSectionWrapper","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","checkoutBlockedDueToUnavailableFunds","storeSelector","waitingComponent","Waiting","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","OrderSummaryErrors","_getOrderSummaryErrors","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","promotionDialog","isOpen","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","Wrapper","Alert","assertive","outOfStockErrorMessageHeader","header","errors","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","_this$props","channelConfiguration","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","orderTotal","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$cata","modules","storeSelectorId","CartLineItems","productDeliveryOptions","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","salesAgreementPricePrompt","priceEditorResources","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","urlCheck","returnURL","origin","AsyncResult","validateCartAsync","_featureStatuses$find2","featureStatuses","_featureStatuses$find","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","IsB2b","_featureStatuses$find3","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$chan","_this$props$data$cata2","_this$props$data$chan2","_this$props$data$cart5","cartLinesPickUpOptions","ProductCollection","handleHeadingChange","_getProductsDimensionsAvailabilities","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","validValues","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","initProductState","productPrices","productCollectionProducts","productCollection","equals","listType","getProductPriceForSelectedProducts","ProductPriceForSelectedProductsInput","p","IsMasterProduct","_getProduct","_this$state$productsD","trace","allowBackNavigation","breaCrumbType","breadcrumbType","quickviewSlot","productComparisonButtonSlot","reviewCountAriaLabelValue","TotalRatings","ratingCountAriaLabelSingleUser","priceRangeSeparator","ProductContainer","productComponent","ProductComponent","_product$MasterProduc","masterProductId","_getActivePrice","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSeeAllButton","headingLabel","recommendation","discountIds","searchPageLink","url","seeAllButtonText","enableAffiliationBasedPricing","shouldDisplaySeeAllButton","recommendationListId","isCarousel","layout","headingComponent","updatedProducts","getProductData","productCollectionViewProps","flipperPrevious","flipperNext","ProductCollectionContainer","GridComponentProps","seeAllButton","QuickOrderDrawer","_toggle","isManuallyToggled","collapseProps","drawerGlyphClass","toggleGlyphClassName","animateGlyph","drawerOpenGlyph","openGlyph","closeGlyph","drawerCloseGlyph","drawerClass","toggleButtonProps","block","_generateDrawerButtonInnerMarkup","Collapse","collapseState","drawerButtonTextClass","toggleButtonClassName","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","e","onToggle","QuickOrderFormComponent","productTextInput","quantityTextInput","quickOrderState","maxChars","disableAddtoCart","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","addQuantityPlaceholderText","handleQuantityChange","handleInputChange","handleAddToCartClick","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","pattern","maxLength","placeholder","addToCartBtn","userMessage","stateMessage","statusCssString","messageGlyph","messageText","QuickOrderProduct","simpleProduct","isSelected","QuickOrderDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderProductNumberText","quickOrderProductText","quickOrderUnitPriceText","quickOrderUnitOfMeasureText","quickOrderQuantityText","quickOrderTotalText","quickOrderActionsText","QuickOrderMobileHeaderCellsComponent","QuickOrderTableHeaderComponent","rowClassName","headerCells","QuickOrderTableRowProductImageComponent","_props$context$reques","_props$data$product$P","_props$imageSettings","containerClassName","QuickOrderExtraActionsPopupComponent","QuickOrderDesktopTableRowCellComponent","_cartLine$LineId","_dimension$DimensionV","quickOrderProductDimensionsSeparator","Price","UnitOfMeasureSymbol","IncrementalQuantity","max","currentCount","quickOrderInputQuantityAriaLabel","quickOrderDecrementButtonAriaLabel","quickOrderIncrementButtonAriaLabel","isGiftCard","IsGiftCard","quickOrderRemoveItemButtonAriaLabel","QuickOrderMobileTableRowCellComponent","quickOrderQuantityMobileText","QuickOrderTableRowComponent","QuickOrderTableComponent","setIsMobile","quickOrderProducts","updateViewport","headerClassName","quickOrderProduct","QuickOrder","waitTime","dimensionUpdateQueue","FinitePromiseQueue","dimensions","initializedDimensions","Set","cssClassNameConfigure","quickOrderCallbacks","initializeDimension","initializedDimension","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","productDimensions","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_handleInputChange","query","productText","productResponse","inputQuantityText","quantityInput","HTMLInputElement","cancellableDebounce","cancel","isQuickOrderFormExpanded","_debounce","getScanResult","GetScanResultInput","results","Product","ProductDimensionFull","_addItemToCart","quickOrderAddedToCartSuccessMessage","quickOrderAddedToCartFailureMessage","_validateCart","getDeliveryOptionsAsync","defaultDeliveryOption","productAvailableQuantity","_updateAvailability","shouldValidateQuantityLimits","_shouldValidateQuantityLimits","addProductToCartInput","availableQuantity","orderQuantityLimitsFeatureIsEnabled","isAddEmailDeliveryItemToCart","addProductToCart","inputProductText","substatus","maxQtyLimitReachedMessage","_getMaxQtyMessage","_result$errorDetails","isOrderQuantityLimitsFeatureEnabledInSiteSettings","_getConcatenatedMaxQtyMessage","quickOrderMaxQuantityLimitText","quickOrderAlreadyItemQuantityText","_handleQuantityChange","currentValue","parseInt","inputElement","isNaN","setAttribute","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_this$state$productRe","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","configureErrors","errorState","mappedDimensions","selectedProduct","reject","newProduct","getSelectedVariant","SelectedVariantInput","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","productAvailable","_getDimensionErrorString","quickOrderproductDimensionTypeColorErrorMessage","quickOrderproductDimensionTypeConfigurationErrorMessage","quickOrderproductDimensionTypeSizeErrorMessage","quickOrderproductDimensionTypeAmountErrorMessage","quickOrderproductDimensionTypeStyleErrorMessage","_updateProductAvailability","_productResponse$Dime","missingDimensions","_getConfigureErrors","quickOrderWrongQuantityErrorMsg","quickOrderOutofStockErrorMsg","viewport","quickOrderFormClass","quickOrderFormProductContent","quickOrderFormMsgContent","quickOrderModuleHeading","quickOrderModuleDescription","quickOrderAddtobag","quickOrderProductQuantityInputLabel","quickOrderProductInputLabel","quickOrderProductDimensionTypeColor","quickOrderProductDimensionTypeConfiguration","quickOrderSelectDimensionFormatString","quickOrderProductDimensionTypeSize","quickOrderProductDimensionTypeStyle","quickOrderProductDimensionTypeAmount","quickAddQuantityPlaceholderText","productConfigureResources","selectDimensionFormatString","quickOrderProps","contentProps","isB2B","drawer","quickOrderForm","quickOrderList","_renderQuickOrderTable","form","configure","getProductConfigure","_initQuickOrderProducts","tableClassName","productInventoryInfo","_cart$result","maxQuantityForLineItem","addedQuantity","_item$ItemId","_this$state$productRe2","minInventory","Math","min","SearchState","SuggestionType","ProductListInventoryFilteringOptions","AutoSuggestInput","searchText","suggestionType","hitPrefix","hitSuffix","searchQuery","topResultsCount","_getAutoSuggest","autosuggest","_ctx$requestContext$a","productSearchCriteria","SearchCondition","Context","productListInventoryDisplay","HideOOS","inventoryRefinerValue","getInventorySortableRefinerValue","channelInventoryConfiguration","isInStock","ProductAvailabilitySortableAttributeRecordId","RefinerRecordId","DataTypeValue","AttributeDataType","TrueFalse","LeftValueBoundString","RightValueBoundString","UnitText","RowNumber","Count","RefinerSourceValue","ProductRefinerSource","Attribute","getInventoryConfigurationAsync","Refinement","searchCriteria","ProductSearchCriteria","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","Paging","Top","ImageUrl","AllSearchResults","autoSuggestPromises","CategorySuggestionsComponent","suggestions","autoSuggestProps","categorySuggestionHeading","_renderTitle","categoryAutoSuggestionHeading","shouldShowFullPath","splitValue","split","pop","Id","_generateLink","_getHighlightedText","suggestion","_getCategoryLink","_categoryRefiners$Val","searchPageURL","searchQsp","searchRefiners","queryUrl","categoryRefiners","refiners","SourceValue","Category","refiner","Values","encodedRefiner","compressRefiners","formattedText","dangerouslySetInnerHTML","getRichTextHtml","compressedRefinerKeys","compressedRefiners","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","searchTextInput","disableSubmitSearch","handleCancelSearchChange","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","inputNode","submitBtnNode","cancelBtn","submitBtn","KeywordSuggestionsComponent","formattedLink","LabelComponent","searchLabelClass","searchLabelArialLabel","isSearchFormExpanded","searchtext","searchCollapsedLabel","innerRef","ProductSuggestionsComponent","productSuggestionHeading","moduleType","productAutoSuggestionHeading","_item$Value","Value3","DecimalValue","_renderThumbnail","_renderPrice","LiProduct","_getLiWrapper","AProduct","_getAWrapper","recid","_props$resources","Search","_isLoadingNode","loadingText","autoSuggestResultLoadingMessage","Spinner","SpinnerSize","medium","labelPosition","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","keyCode","Escape","formReference","contains","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","update","createSearchStateInput","cancellabelDebounce","inputSuggestionType","_loadSuggestions","_handleSubmit","searchURL","_appendQueryParams","document","_handleCancelSearchChange","isInitialState","_handleCancelSearchFocused","route","qsp","_setAutoSuggestResultCount","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","autoSuggestAriaLabel","isLoadingAutoSuggest","searchInputMaxLength","searchFormClass","_initSuggestionTypes","body","componentDidUpdate","_suggestions$AllSearc","_suggestions$AllSearc2","_suggestions$AllSearc3","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","shouldShowFullCategoryPath","keywordSuggestions","Keyword","None","productSuggestions","categorySuggestions","_item$RefinerRecordId","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","FormWrapper","autoComplete","UlKeyword","UlProduct","UlCategory","autosuggestKeyword","autosuggestProduct","autosuggestCategory","handleCancelSearchFocused","isLoadingNode","suggestionTypes","suggestionTypeCriterion","unique","validSuggestions","loadSuggestionsRequestId","getSearchSuggestionsAction","_getSuggestionType","_getSearchRefiners","Random","Guid","generateGuid","_getSearchSuggestions","_updateSearchRefiners","suggestionTypeItem","charAt","slice","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","isRangeType","dataTypeValue","Decimal","isRangeTypeForInteger","Integer","isCustomRangeTypeIntegerSelected","selectedRefinementCriterion","parentProductRefinerHierarchy","DisplayTemplateValue","DisplayTemplate","Range","isSingleSelectRangeTypeIntegerSelected","productRefinerValue","findMatchingRefinementCriterion","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","parent","getIntegerRangeName","rangeValue","RightValueBoundLocalizedString","LeftValueBoundLocalizedString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","r","selectedCriterion","isSelecting","rangeStart","rangeEnd","Text","RefinerTypeValue","RefinerType","SingleSelect","child","matchingIndex","findIndex","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","stopPropagation","clearAll","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","choice","hierarchy","_rangeParentDisplay$","rangeParentDisplay","_getKeyForRefinerValue","rangeDisplayType","clearAllText","choiceAriaLabel","closeAriaLabel","selectedRefinersMap","clearAllAttributes","newIntRange","urlBuilder","_parent","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","KeyName","_formatPrice","filterValue","amount","currency","selected","ErrorMessage","FeatureSearchResultItem","productName","productRecordId","featureSimilarDescriptionTitle","featureSimilarLooksTitle","Link","ModalToggle","modalNode","autoFocus","applicationNode","returnFocusRef","returnRef","onModalToggle","zIndex","modalHeaderNode","modalTitle","modalFooterNode","modalCloseButtonText","getInventoryLabel","AttributeValues","inventoryAttribute","TextValue","ProductSearchResultItems","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","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","initialMin","initialMax","minValue","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","onBlur","maxLabel","placeholderTextMax","ariaAttributes","Slider","inForm","step","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","touched","validationErrorRange","inputAsNum","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","getElementById","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","attrs","_objectWithoutProperties","_excluded","isSingleSelect","itemTypeClassName","Rating","_renderRating","productCount","refineMenuItemAriaLabel","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","SwatchComponent","list","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","hideCount","RangeRefineItemInput","_changeMinInputRange","_changeMaxInputRange","_applyCustom","invalidData","updateInputRangerProps","_isUndefined","trim","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpanded","isExpandedOnInitialLoad","expanded","productRefinerHierarchy","timeout","_renderChildItems","_renderSingleMultiSelect","_renderRange","refinerValuesList","listItems","selectedValue","_getRangeType","SliderWithBars","onUpdateRefiners","Separator","separator","Title","SearchResultContainer","SearchResultContainer_1","sortByDropdownOptions","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","_updateVariantAvailability","includeAttributes","_updateListPageState","listPageState","_this$props$config$it","_this$props$config$it2","querySorting","sorting","decodeURIComponent","currentPageNumber","skip","itemsPerPage","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","productId","featureProduct","_this$props$data$list","_this$props$data$list2","_this$props$data$list3","_this$props$data$list4","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","SearchResultModal","_modalToggleRef","_getCollectionTitle","collectionTitle","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","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","skipCount","totalItems","previousText","nextText","UncontrolledPagination","paginationAriaLabel","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandRefinersCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","isInventorySortableAttribute","inventoryAwareSortableAttributeId","isInventoryProductAttribute","InventoryProductAttributeRecordId","_getChoiceSummary","_this$props$data$refi","selectedRefiners","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$prod5","shouldAllowBackNavigation","breadCrumbType","shouldAllowBack","isPriceMinMaxFeatureState","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list6","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","paginationPreviousText","paginationNextText","pending","validationErrorNotNumber","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","StoreOperationsDataActions","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r5","_this$props$context$r6","_this$props$context$r7","newListPageState","GetFullProductsByCollectionInput","Skip","Sorting","Recommendation","productResults","getCollectionProducts","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r8","_this$props$context$r9","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","_listPageState$result","_listPageState$result2","_this$props$context$r10","_this$props$data$list7","_this$props$data$list8","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","FeatureSearchContainer","similarLookProduct","AccountManagementAddress","_renderListAddress","headingTag","AddressList","primaryAddressSectionHeading","otherAddressSectionHeading","contextRequest","handleLineItemHeadingChange","onEditAddress","_goToEditAddress","onRemoveAddress","_onRemoveAddress","onUpdatePrimaryAddress","_onSubmitUpdatePrimaryAddress","_onAddressUpdate","twoLetterISORegionName","updateCustomerPrimaryAddress","_onUpdatePrimaryAddressSuccess","Deactivate","removeAddressData","_renderScreenReaderRemoveText","formatNotification","removeAddressNotification","_defaultAddressType","defaultAddressTypeMap","Delivery","AccountAddressManagement","showAddressList","screenReaderNotification","newAddress","_checkoutState$checko","isShowList","Item","isShowPrimaryButton","primaryButton","editButton","removeButton","isShowError","AddressLists","ListAddress","isShowEmptyListMessage","emptyListMessage","primaryAddressList","otherAddressList","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","EmailDelivery","LineItemComponent","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","LineItemDeliveryGroup","LineItemList","lineItems","lineItem","LineItemGroupComponentWithMultiplePickUp","_ref5","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","_ref6","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","OrderSummaryComponent","_ref9","lines","subtotal","SubtotalAmountWithoutTax","shipping","otherCharge","tax","loyalty","PaymentSummaryComponent","_ref10","invoices","_props$data$checkout$","_props$data$checkout$2","canShow","checkoutProps","headerProps","hasSalesOrder","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","orderConfirmation","loading","guidedForm","orderSummary","invoicePaymentSummary","placeOrderButton","termsAndConditions","mailchimpSubscriptionStatus","subscribeCheckboxLabel","isMailchimpChecked","newsletterActive","isSignedInUser","shouldShowMailchimp","isErr","setIsErr","renderSubscriptionCheckbox","checkbox","changeMailChimpSubscriptionStatusAsync","res","Success","htmlFor","checkErr","querySelectorAll","btn","_renderPlaceOrderBtn","_props$data$checkout","isTermsAndConditionChecked","canPlaceOrder","cartHasNoBalance","_orderSummary$lines","orderTotalNode","CheckoutProvider","cartHasBalance","mailChimp","checkoutNotCompleteErrText","_renderCartlines","cartEmptyText","_cartLine$cartlineId","renderCartLinesGroupHeader","pickUpText","shippingText","emailShippingText","titleSeparate","_cartLine$pickUpInSto4","groupTitle","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_props$cart","_props$cart2","errorData","renderModuleAttributes","_props$context$action","emailshippingText","emptyCartText","renderCartLinesGroup","_renderInvoiceSummarylines","invoiceSummaryLines","_renderOrderSummarylines","orderSummaryLines","totalDiscounts","_renderCarousel","carouselContainer","_renderProduct","_renderGrid","gridContainer","_renderNoProduct","noProductToRenderText","renderConfigure","containerProps","dropdowns","renderConfigureDropdown","dropdown","labelContainerProps","select","renderForm","quickOrderProductContent","quickOrderMsgContent","createSearchResultModal","modalProps","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","_renderForm","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","renderThumbnailItem","GetThumbnailItemComponent","imageId","_props$context$app$co","_props$config$thumbna","_props$context$reques2","_props$callbackToggle","_props$callbackThumbn","call","handleKeyDown","playVideoTitleText","GetEmptyThumbnailItemComponent","_props$context$app$co2","_props$config$thumbna2","_props$context$reques3","renderThumbnails","displayOrder","getMediaGalleryItems","_item$videoData","videoThumbnail","RenderVideo","NewSingleSlideCarouselComponentProps","NewThumbnails","DescriptionInterval","renderProductCards","productsContainer","textValue","renderProductCardsDescription","_props$data$products$","_props$data$featureSt","isAllowBack","classname","quickviewslot","quickView","renderProducts","_data$products$result","_data$products$result2","productDescriptionInterval","productDescriptionIntervalRemainder0","productDescriptionIntervalRemainder9","titleContainer","configureStickyFilter","isStickyHeader","headerContainer","headerHeight","offsetHeight","bannerHeights","headerElement","defaultContainer","refinerElement","documentElement","scrollTop","clientHeight","refineMenuContainer","refinerSectionContainer","renderRefinerMobile","renderRefinerFooter","handler","doneAriaLabel","doneText","sortingContainer","searchResultContainer","productSectionContainer","titleViewProps","categoryNavContainer","refineAndProductSectionContainer","featureSearchContainer","useStickyFilter","stickyFilterSetup","enableStickyHeader","setIsExpanded","wrapperRefiner","refinerRefernce","handleClickOutside","useOutsideClick","enableProdutDescription","filterText","imageAltText","_context$app","propsContext","cartResult","cartVersion","shouldRetry","Version","_validationResult$Val","validationResult","CartsDataActions","bypassCache","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineToUpdate","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","newQuantity","updateLineResult","updateCartLineQuantity","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","totalAmountAfterGiftCard","loyaltyLabel","giftcardLabel","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","dM","SubtotalAmount","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","customerAccount","customerAccountLabel","warehouseId","targetWarehouseValue","InventoryLocationId","getInput","_addressPurposes$find","addressTypeDescription","purpose","ichecked","additionalAttributes","addressChangeCheckboxAriaLabel","AddressInputComponent","additionalAddributes","getAddressSelectItems","AddressButtonComponent","addressAddNewButtonText","addressAddButtonText","addressAddNewButtonAriaLabel","addressAddButtonAriaLabel","addressShipMultipleText","addressShipMultipleAriaLabel","addressSaveButtonText","addressSaveButtonAriaLabel","addressCancelButtonText","addressCancelButtonAriaLabel","getCheckoutState","scrollIntoView","updateCheckoutErrorFocus","newCheckoutErrorFocus","validateMediaLocationAsync","imageData","http","XMLHttpRequest","open","send","_unused","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","pairs","pair","_actionContext$reques","isPreview","commerceApiRequest","previewImageData","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","commerceVideoMetadataRequest","module","exports","freeGlobal","freeSelf","self","root","Function","Symbol","CheckoutContext","createContext","Consumer","CheckoutConsumer","Provider","unavailableProductErrorMessage","outOfStockProductErrorMessage","addressShipSingleText","addressShipSingleAriaLabel","clearSelectionButtonText","clearSelectionButtonAriaLabel","every","chooseAddressForSelectedItemsText","chooseAddressForSelectedItemsAriaLabel","defaultValue","noAddressSelectedAriaLabel","hidden","headers","selectAllRowsText","addressSelectAllRowsText","addressProductNumberText","addressProductText","productUnitPrice","addressProductUnitPriceText","addressProductQuantityText","addressProductAddressText","clickHandler","isAllSelected","ShipMultipleAddressesTableHeading","_renderProductListHeader","_line$cartLine","currentLineProps","shippingLineImage","ShipMultipleAddressesLineView","saveAndContinueBtnLabel","componentClassName","getOnChange","scope","maxWidth","paddingLeft","border","onSelectLineHandler","log","renderProductImage","renderProductInfo","renderProductPrice","renderProductError","_context$actionContex","_context$request","renderProductDimensions","dimensionsLine","OOS","UNASSORTED","NONE","isObject","toNumber","nativeMax","nativeMin","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","clearTimeout","flush","g","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary","test","trimmedEndIndex","reTrimStart","string","reWhitespace","baseGetTag","isObjectLike","getRawTag","objectToString","symToStringTag","toStringTag","objectProto","prototype","hasOwnProperty","nativeObjectToString","isOwn","unmasked","Invoice","SWIFT","Payment","Home","Other","Business","RemitTo","Statement","FixedAsset","Onetime","Recruit","Lading","Unlading","Reallocation","HeadCompany","StableOrganization","Consignment","ProductionSite"],"sourceRoot":""}