{"version":3,"file":"static/js/16.f3b3098c714ab56d0d10.chunk.js","mappings":"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","sources":["webpack://nile.commerce.online/./src/modules/eve-account-management-address/eve-account-management-address.tsx?fd00","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/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-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/utilities/DefaultAddressTypeMap.ts?8495","webpack://nile.commerce.online/./src/checkout-errors/checkout-errors.ts?a9e0","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-error-alert.tsx?bcde","webpack://nile.commerce.online/./src/common/components/address-select.tsx?c1df","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/./src/common/components/address-ship-multiple.tsx?136d","webpack://nile.commerce.online/./src/modules/checkout-billing-address/checkout-billing-address.tsx?2aa0","webpack://nile.commerce.online/./src/modules/checkout-billing-address/checkout-billing-address.view.tsx?b194","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/checkout-shipping-address/checkout-shipping-address.view.tsx?3386","webpack://nile.commerce.online/./src/validate-cart.ts?cd50","webpack://nile.commerce.online/./src/Common/get-product.ts?0a21","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/cart/cart.view.tsx?d8c2","webpack://nile.commerce.online/./src/invoice-summary-lineitem.tsx?5f61","webpack://nile.commerce.online/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://nile.commerce.online/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://nile.commerce.online/./src/modules/media-gallery/utils/helper.ts?b895","webpack://nile.commerce.online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://nile.commerce.online/./src/order-summary-lineitem.tsx?8a98","webpack://nile.commerce.online/./src/modules/product-collection/product-collection.tsx?4008","webpack://nile.commerce.online/./src/modules/product-collection/product-collection.view.tsx?5d36","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/modules/quick-order/quick-order.view.tsx?a96d","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/search-result-container/search-result-container.view.tsx?b779","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/search.view.tsx?1505","webpack://nile.commerce.online/./src/modules/adventureworks/views/components/product-v2.component.tsx?d155","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/./node_modules/@msdyn365-commerce-modules/quick-order/node_modules/lodash/_Symbol.js?900a","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/_baseTrim.js?2c53","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/_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/_root.js?1a49","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/debounce.js?9c44","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/isObjectLike.js?c958","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/now.js?5c8e","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/search-result-container/node_modules/lodash/_Symbol.js?1ff3","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/_baseTrim.js?5468","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/_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/_root.js?4743","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/debounce.js?3a03","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/isObjectLike.js?fec8","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/isUndefined.js?b9d8","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/toNumber.js?2d98","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/node_modules/lodash/_baseGetTag.js?b488","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/_freeGlobal.js?fb09","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/_root.js?6b7e","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/debounce.js?379f","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/isObjectLike.js?d2e8","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/now.js?05c7","webpack://nile.commerce.online/./node_modules/@msdyn365-commerce-modules/search/node_modules/lodash/toNumber.js?bd21"],"sourcesContent":["/*--------------------------------------------------------------\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> {\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>}\r\n */\r\n@observer\r\nclass AccountManagementAddress extends React.Component> {\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) {\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 => {\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 {\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 {\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,\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): 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 => {\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): 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): 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.\r\n * @param onSuccess - IAddressResponse.\r\n */\r\n private readonly _onAddressUpdate = (response: Promise, 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;\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
\r\n {notification}\r\n
\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 { 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 = ({ AddressDetail, items }) => {\r\n return (\r\n \r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description};\r\n })}\r\n \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 = ({ List, isShowList, heading, items }) => {\r\n if (!isShowList) {\r\n return null;\r\n }\r\n\r\n return (\r\n \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 \r\n \r\n {isShowError && (\r\n \r\n {title}\r\n {message}\r\n \r\n )}\r\n {isShowPrimaryButton && primaryButton}\r\n {editButton}\r\n {removeButton}\r\n \r\n );\r\n })}\r\n \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 = ({\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 \r\n {heading}\r\n {isShowEmptyListMessage && emptyListMessage}\r\n {addButton}\r\n \r\n \r\n \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 = ({\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 \r\n {heading}\r\n {items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n \r\n {label}\r\n {alert}\r\n {input}\r\n \r\n );\r\n })}\r\n {hasError && (\r\n \r\n {error.title}\r\n {error.message}\r\n \r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \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 = props => {\r\n const { AccountAddressManagement, viewState, showAddressList, showAddOrUpdateAddress, screenReaderNotification } = props;\r\n\r\n return (\r\n \r\n {viewState.isShowAddresList && }\r\n {viewState.isShowAddOrUpdateAddress && }\r\n {screenReaderNotification}\r\n \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 { 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 = ({\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
\r\n
\r\n
{title}
\r\n
{itemTitle}
\r\n
\r\n
\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
\r\n \r\n {isShowQty && (\r\n
\r\n )}\r\n \r\n {format(resources.productQuantityInfo, cartLine.quantity, cartLine.imageProps.altText)}\r\n \r\n
\r\n );\r\n })}\r\n
\r\n \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, 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>}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass CheckoutShippingAddress extends React.Component {\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 => {\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 => {\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 {\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 {\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 = ;\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 => {\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 => {\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) => {\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): 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): 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;\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 { 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 = ({ AddressDetail, items }) => {\r\n return (\r\n \r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description};\r\n })}\r\n \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 = ({\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 \r\n {addButton}\r\n {items.map((item: IAddressSelectItem) => {\r\n const SelectItem = item.SelectItem;\r\n return (\r\n \r\n {item.input}\r\n \r\n \r\n );\r\n })}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \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 = ({\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 \r\n {heading}\r\n {items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n \r\n {label}\r\n {alert}\r\n {input}\r\n \r\n );\r\n })}\r\n {hasError && (\r\n \r\n {error.title}\r\n {error.message}\r\n \r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \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 = props => {\r\n const { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress, cartLineImages } = props;\r\n\r\n return (\r\n \r\n {cartLineImages}\r\n {viewState.isShowAddress && }\r\n {viewState.isShowAddresList && }\r\n {viewState.isShowAddOrUpdateAddress && }\r\n \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;\r\n}\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n {emailDelivery && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC = ({\r\n LineItemDeliveryGroup,\r\n LineItemList,\r\n heading,\r\n lineItems,\r\n lineItemWraper,\r\n lineItemWraperIcon\r\n}) => (\r\n \r\n {lineItemWraperIcon}\r\n {lineItemWraper}\r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n \r\n {item}\r\n {emailDelivery && }\r\n \r\n);\r\n\r\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({\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 \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\r\n {itemsGroupWithMulitplePickupMode !== undefined\r\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\r\n return ;\r\n })\r\n : null}\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines, cart }) => (\r\n <>\r\n {heading}\r\n
\r\n
\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
\r\n
\r\n \r\n);\r\n\r\nconst PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\r\n <>\r\n {heading}\r\n
\r\n
\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
\r\n
\r\n \r\n);\r\n\r\nconst CheckoutView: React.FC> = 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(false);\r\n\r\n const renderSubscriptionCheckbox = () => {\r\n const setChecked = (event: React.ChangeEvent) => {\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
\r\n \r\n \r\n
\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('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 \r\n \r\n {!hasSalesOrder && {title}}\r\n {!hasSalesOrder &&\r\n isPaymentVerificationRedirection &&\r\n shouldEnableSinglePaymentAuthorizationCheckout &&\r\n !alert &&\r\n !loading && }\r\n {!hasSalesOrder && (\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n {termsAndConditions}\r\n {/*{shouldShowMailchimp && renderSubscriptionCheckbox()}*/}\r\n \r\n {_renderPlaceOrderBtn()}\r\n {/*{keepShoppingButton}*/}\r\n \r\n \r\n \r\n {!hasInvoiceLine\r\n ? orderSummary && (\r\n \r\n )\r\n : invoicePaymentSummary && }\r\n \r\n {{termsAndConditions}}\r\n {shouldShowMailchimp && renderSubscriptionCheckbox()}\r\n
\r\n {props.resources.checkoutNotCompleteErrText}\r\n
\r\n\r\n {cartHasNoBalance() && _renderPlaceOrderBtn()}\r\n {/*{keepShoppingButton}*/}\r\n
\r\n {lineItems && }\r\n \r\n \r\n {{termsAndConditions}}\r\n {/*{shouldShowMailchimp && renderSubscriptionCheckbox()}*/}\r\n
\r\n {props.resources.checkoutNotCompleteErrText}\r\n
\r\n {_renderPlaceOrderBtn()}\r\n {/*{keepShoppingButton}*/}\r\n
\r\n
\r\n \r\n )}\r\n
\r\n )}\r\n {hasSalesOrder && orderConfirmation}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","export const defaultAddressTypeMap: Record = {\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","/*!\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, ctx: IActionContext): Promise {\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 { 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): void;\n}\n\nexport const AddressBillingCheckbox: React.FC = ({\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 \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 = ({ text }) => (\n

{text}

\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';\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 = ({ title, message, className = 'ms-checkout-payment-instrument' }) => (\n
\n

{title}

\n

{message}

\n
\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): 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 \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
\n \n
\n ),\n shipMultipleAddressesButton: multipleAddressShippingEnabled && onShipMultipleAddresses && (\n \n ),\n isShowSaveButton: !hasExternalSubmitGroup,\n saveButton: (\n \n ),\n isShowCancelButton: !hasExternalSubmitGroup,\n cancelButton: (\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 * 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 {\n public state: IShipMultipleAddressesTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: !this.state.isChecked\n },\n () => {\n this.props.clickHandler(this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n if (!this.props.isMobile) {\n return (\n \n \n \n \n \n {this.props.productNumber}\n {{this.props.productName}}\n {\n \n {this.props.productUnitPrice}\n \n }\n {\n \n {this.props.productQuantity}\n \n }\n {{this.props.productAddress}}\n \n \n );\n } else {\n return (\n \n \n \n \n\n {/* Clear Selection Button */}\n
\n {this.props.clearSelectionButton}\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 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): 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\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 \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
{ItemId}
\n {input.error !== 'NONE' ?
{renderProductError(input)}
: undefined}\n \n ),\n productQuantity: Quantity,\n productAddress: (\n onShippingAddressChange(shipMultipleAddressesLine.cartLine, e)}\n value={ShippingAddress?.RecordId}\n >\n {customerAddresses?.map((address: Address, index: number) => (\n \n {address.FullAddress}\n \n ))}\n \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 \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 =
{name}
;\n const dimensionsLine: string = dimensions.join(', ');\n return (\n
\n
{productName}
\n
{dimensionsLine}
\n
\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 \n \n \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","/*!\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): void;\n onBulkShippingAddressChange(event: React.ChangeEvent): 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 !line.isChecked)\n }}\n />\n )\n };\n\n return ;\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 \n ),\n clearSelectionButton: (\n !line.isChecked)\n }}\n />\n ),\n addressDropdown: (\n onBulkShippingAddressChange(e)}\n defaultValue={''}\n disabled={selectedShippingLines.every(line => !line.isChecked)}\n >\n \n {customerAddresses?.map((address: Address, index: number) => (\n \n ))}\n \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 \n ),\n isShowCancelButton: !hasExternalSubmitGroup,\n cancelButton: (\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\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 { 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 { 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';\nimport groupBy from 'lodash/groupBy';\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 const cartLinesForShipping: CartLine[] = [];\n if (cartLines.length > 0) {\n const getGroupByDelivery = (items: ICheckoutShippingCartLineInfo[]) => groupBy(items, item => item.shippingAddressId);\n cartLinesForShipping.push(getGroupByDelivery(cartLines));\n }\n const renderShipMultiAddressView = isMultipleAddressShippingEnabled && cartLinesForShipping.length > 1;\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._onSelectAddress();\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 const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\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 ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : 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 /**\n * Method get called on select address.\n */\n private readonly _onSelectAddress = () => {\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 { 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 { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\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 MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

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

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

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

\n

{groupTitle}

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

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

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

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

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

\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n ProductPriceForSelectedProductsInput,\n validateCatalogId,\n getProductPriceForSelectedProducts\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productPrices: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || [],\n productPrices: this.productPrices || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n const discountIds = this.props.config.productCollection.discountIds;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const productPrices = this.state.productPrices;\n\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n \n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(\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 { 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 = 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 \n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n \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 \n {heading}\n {seeAllButton}\n {_renderNoProduct(resources)}\n \n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderNoProduct = (resources: IProductCollectionResources): JSX.Element => {\n return (\n \n

{resources.noProductToRenderText}

\n
\n );\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return {productComponent};\n};\n\nexport default ProductCollectionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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\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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n ChannelInventoryConfiguration,\n ProductRefinerSource,\n ProductRefinerValue,\n ProductSearchCriteria,\n SearchSuggestion,\n SearchSuggestionCriteria\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n getInventoryConfigurationAsync,\n getSearchSuggestionsAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nexport enum SuggestionType {\n Category = 'ScopedCategory',\n Keyword = 'Keyword',\n Product = 'Product',\n None = 'None'\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * Input class for auto suggest search input.\n */\nexport class AutoSuggestInput implements IActionInput {\n public searchQuery?: string;\n\n public topResultsCount?: number;\n\n public suggestionType?: string;\n\n public hitPrefix?: string;\n\n public hitSuffix?: string;\n\n public constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\n this.searchQuery = searchText;\n this.topResultsCount = top;\n this.suggestionType = suggestionType;\n this.hitPrefix = hitPrefix;\n this.hitSuffix = hitSuffix;\n }\n\n public getCacheKey = () => 'AutoSuggestSearchSuggestions';\n\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new AutoSuggestInput();\n};\n\n/**\n * Calls the Retail API and returns a auto-suggest suggestions.\n * @param input\n * @param ctx\n */\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise<Autosuggestions | null> {\n // If no input is provided fail out\n if (!input || !input.searchQuery) {\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\n }\n\n const autosuggest: Autosuggestions = {};\n\n const autoSuggestPromises = [_getAutoSuggest(input, autosuggest, ctx)];\n return Promise.all(autoSuggestPromises).then(() => {\n return autosuggest;\n });\n}\n\n/**\n * Returns inventory in stock sortable refiner value.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @param isInStock - The flag indicating whether is getting in-stock refiner or out-of-stock refiner.\n * @returns Refiners.\n */\nconst getInventorySortableRefinerValue = (\n channelInventoryConfiguration: ChannelInventoryConfiguration,\n isInStock: boolean\n): ProductRefinerValue | undefined => {\n if (channelInventoryConfiguration && channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId) {\n return {\n RefinerRecordId: channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId,\n DataTypeValue: AttributeDataType.TrueFalse,\n LeftValueBoundString: isInStock ? 'true' : 'false',\n RightValueBoundString: isInStock ? 'true' : 'false',\n UnitText: '',\n RowNumber: 0,\n Count: 0,\n ExtensionProperties: [],\n RefinerSourceValue: ProductRefinerSource.Attribute\n };\n }\n return undefined;\n};\n\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise<void> {\n const catalogId = getCatalogId(ctx.requestContext);\n let productSearchCriteria: ProductSearchCriteria = {\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n };\n\n if (ctx.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const channelInventoryConfiguration = await getInventoryConfigurationAsync({ callerContext: ctx });\n const isInStockRefiner = true;\n const inventoryRefinerValue = getInventorySortableRefinerValue(channelInventoryConfiguration, isInStockRefiner);\n\n if (inventoryRefinerValue) {\n productSearchCriteria = {\n ...productSearchCriteria,\n Refinement: [inventoryRefinerValue]\n };\n }\n }\n\n const searchCriteria: SearchSuggestionCriteria = {\n ProductSearchCriteria: productSearchCriteria,\n HitPrefix: input.hitPrefix,\n HitSuffix: input.hitSuffix,\n SuggestionType: input.suggestionType\n };\n\n const searchSuggestions = await getSearchSuggestionsAsync(\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\n searchCriteria\n );\n\n if (searchSuggestions && searchSuggestions.length > 0) {\n // Generate image url\n searchSuggestions.map(\n (item: SearchSuggestion) =>\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\n );\n\n autosuggest.AllSearchResults = searchSuggestions;\n } else {\n ctx.telemetry.error(\n `[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`\n );\n }\n}\n\nexport const getSearchSuggestionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\n action: <IAction<Autosuggestions>>getSearchSuggestionsAction,\n input: createInput\n});\n\nexport default getSearchSuggestionsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchCategorySuggestProps {\n searchCategorySuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n searchRefiners: ProductRefiner[] | undefined;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n shouldShowFullPath?: boolean;\n}\n\nexport interface ISearchCategoryViewProps {\n title: React.ReactNode;\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * CategorySuggestionsComponent.\n * @param props\n */\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\n const {\n suggestions,\n searchText,\n autoSuggestProps: {\n resources: { categorySuggestionHeading }\n }\n } = props;\n\n const reactNodes: React.ReactNode[] = [];\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, props));\n });\n\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\n\n return { title: titleNode, text: reactNodes };\n};\n\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\n const categoryAutoSuggestionHeading = categorySuggestionHeading\n ? format(categorySuggestionHeading, searchText)\n : `Search \"${searchText}\" in categories`;\n\n return <li className='msc-autoSuggest__categoryResults-title'>{categoryAutoSuggestionHeading}</li>;\n};\n\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\n const { searchText, hitPrefix, hitSuffix, shouldShowFullPath } = props;\n\n const splitValue = shouldShowFullPath ? item.Value : item.Value && item.Value.split('|').pop();\n const ariaLabel = splitValue\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = item.Value;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n <li className='msc-autoSuggest__categoryResults-item' key={item.Id}>\n <a aria-label={ariaLabel} href={_generateLink(item, searchText, props)} {...attribute}>\n {_generateLink(item, searchText, props) && _getHighlightedText(splitValue ? splitValue : '', hitPrefix, hitSuffix)}\n </a>\n </li>\n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\n};\n\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\n const { searchPageURL, searchQsp, searchRefiners } = props;\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n\n if (searchQsp && searchText) {\n queryUrl.searchParams.set(searchQsp, searchText);\n }\n\n const categoryRefiners = searchRefiners?.find(refiners => {\n return refiners.SourceValue === ProductRefinerSource.Category;\n });\n const refiner = categoryRefiners?.Values?.find(item => {\n return item.RefinerRecordId === Number.parseInt(id, 10);\n });\n\n const encodedRefiner = refiner && JSON.stringify(compressRefiners([refiner]));\n if (encodedRefiner) {\n queryUrl.searchParams.set('refiners', encodedRefiner);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n // eslint-disable-next-line react/no-danger\n return <span dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />;\n};\n\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\n// or move this code to a common place\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchFormProps {\n hideSearchLabel: boolean | undefined;\n isSearchFormExpanded?: boolean | undefined;\n disableSubmitSearch: boolean | undefined;\n searchTextInput: React.RefObject<HTMLInputElement>;\n maxChars: number;\n searchQsp: string;\n searchPlaceholder: string;\n query: string;\n ariaLabelCancel: string;\n ariaLabelSearch: string;\n ariaLabelSubmit: string;\n handleCancelSearchChange(): void;\n handleInputChange(query: string): void;\n}\n\nexport interface ISearchFormViewProps {\n input: React.ReactNode;\n submitBtn: React.ReactNode;\n cancelBtn: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Set updated input value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent<HTMLInputElement>) => {\n handleInputChange(event.target.value || '');\n};\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\n const {\n searchQsp,\n searchPlaceholder,\n hideSearchLabel,\n searchTextInput,\n handleInputChange,\n maxChars,\n disableSubmitSearch,\n handleCancelSearchChange,\n query,\n ariaLabelCancel,\n ariaLabelSearch,\n ariaLabelSubmit\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const inputNode = !hideSearchLabel ? (\n <input\n className='ms-search__form-control'\n type='text'\n aria-label={ariaLabelSearch}\n name={searchQsp}\n placeholder={searchPlaceholder}\n ref={searchTextInput}\n onChange={onInputChange}\n maxLength={maxChars}\n value={query}\n />\n ) : (\n <input\n className='ms-search__form-control'\n type='text'\n aria-label={ariaLabelSearch}\n name={searchQsp}\n placeholder={searchPlaceholder}\n ref={searchTextInput}\n onChange={onInputChange}\n value={query}\n />\n );\n\n const submitBtnNode = !disableSubmitSearch && <Button className='ms-search__form-submitSearch' aria-label={ariaLabelSubmit} />;\n\n const cancelBtNoden = (\n <Button\n className={!disableSubmitSearch ? 'ms-search__form-cancelSearch' : 'ms-search__form-cancelSearchNoSumbit'}\n aria-label={ariaLabelCancel}\n onClick={handleCancelSearchChange}\n type='button'\n />\n );\n\n return { input: inputNode, cancelBtn: cancelBtNoden, submitBtn: submitBtnNode };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchKeywordSuggestProps {\n searchKeywordSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface ISearchKeywordViewProps {\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * KeywordSuggestionsComponent.\n * @param props\n */\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\n const { suggestions, hitPrefix, hitSuffix } = props;\n\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n const reactNodes: React.ReactNode[] = [];\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\n });\n\n return { text: reactNodes };\n};\n\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = ariaLabel;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n <li className='msc-autoSuggest__keywordResults-item' key={item.Id}>\n <a aria-label={ariaLabel} href={_generateLink(item, hitPrefix, hitSuffix, props)} {...attribute}>\n {_generateLink(item, hitPrefix, hitSuffix, props) &&\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\n </a>\n </li>\n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\n const { searchPageURL, searchQsp } = props;\n\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n if (searchQsp && formattedLink) {\n queryUrl.searchParams.set(searchQsp, formattedLink);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n // eslint-disable-next-line react/no-danger\n return <span dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchLabelProps {\n isSearchFormExpanded: boolean;\n searchLabelClass: string;\n searchLabelArialLabel: string;\n searchtext: string;\n searchCollapsedLabel: React.RefObject<HTMLButtonElement>;\n hideSearchLabel?: boolean;\n telemetryContent: ITelemetryContent;\n handleCancelSearchChange(): void;\n}\n\nexport const LabelComponent = (props: ISearchLabelProps) => {\n const {\n searchLabelClass,\n searchLabelArialLabel,\n isSearchFormExpanded,\n searchtext,\n searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange,\n telemetryContent\n } = props;\n const payLoad = getPayloadObject('click', telemetryContent, searchtext, '');\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n\n return (\n <div className={searchLabelClass}>\n <Button\n className='ms-search__icon'\n aria-expanded={isSearchFormExpanded}\n aria-label={searchLabelArialLabel}\n onClick={handleCancelSearchChange}\n innerRef={searchCollapsedLabel}\n {...attributes}\n >\n {!hideSearchLabel && (\n <span className='ms-search__icon-text' aria-hidden>\n {searchtext}\n </span>\n )}\n </Button>\n </div>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\n/**\n * Search product suggest resources.\n */\nexport interface ISearchProductSuggestResources {\n freePriceText: string;\n}\n\nexport interface ISearchProductSuggestProps {\n searchProductSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps<ISearchData>;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetry: ITelemetry;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n resources?: ISearchProductSuggestResources;\n}\n\nexport interface ISearchProductViewProps {\n title: React.ReactNode;\n items: ISearchProductItemViewProps[];\n}\n\nexport interface ISearchProductItemViewProps {\n text: React.ReactNode;\n thumbnail: React.ReactNode;\n price: React.ReactNode;\n LiProduct: INodeProps;\n AProduct: INodeProps;\n id: string | undefined;\n}\n\nlet payLoad: IPayLoad;\nlet telemetryContent: ITelemetryContent | undefined;\n\n/**\n * ProductSuggestionsComponent.\n * @param props\n */\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\n const {\n suggestions,\n hitSuffix,\n hitPrefix,\n autoSuggestProps: {\n context: { actionContext },\n resources: { productSuggestionHeading }\n },\n moduleType,\n moduleId\n } = props;\n const reactNodes: ISearchProductItemViewProps[] = [];\n telemetryContent = props.telemetryContent;\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\n });\n\n const titleNode = _renderTitle(productSuggestionHeading);\n\n return { title: titleNode, items: reactNodes };\n};\n\nconst _renderTitle = (productSuggestionHeading: string) => {\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\n\n return <li className='msc-autoSuggest__productResults-title'>{productAutoSuggestionHeading}</li>;\n};\n\nconst _assembleNode = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps,\n moduleType: string,\n moduleId: string\n): ISearchProductItemViewProps => {\n const altText =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n const price = item.Value3?.Value?.DecimalValue;\n return {\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\n price: !ObjectExtensions.isNullOrUndefined(price) && _renderPrice(price, price, moduleId, moduleType, props),\n LiProduct: _getLiWrapper(),\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext, props),\n id: item.Id\n };\n};\n\nconst _getLiWrapper = () => {\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'li' as NodeTag\n };\n};\n\nconst _getAWrapper = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps\n) => {\n const {\n autoSuggestProps: { context }\n } = props;\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n payLoad.contentAction.recid = item.Id;\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPrice = context.cultureFormatter.formatCurrency(item.Value3!.Value!.DecimalValue!);\n\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'a' as NodeTag,\n 'aria-label': `${ariaLabel!} ${productPrice}`,\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\n ...attribute\n };\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n return suggestion.Value && suggestion.Id\n ? getProductPageUrlSync(formattedLink, (suggestion.Id as unknown) as number, actionContext, undefined)\n : '';\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '<strong>')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '</strong>');\n\n return (\n // eslint-disable-next-line react/no-danger\n <span className='msc-price msc-autoSuggest__productResults-item-text' dangerouslySetInnerHTML={getRichTextHtml(formattedText)} />\n );\n};\n\nconst _renderPrice = (\n adjustedPrice: number,\n basePrice: number,\n moduleId: string,\n moduleType: string,\n props: ISearchProductSuggestProps\n): JSX.Element | null => {\n const {\n autoSuggestProps: { context }\n } = props;\n\n return (\n <PriceComponent\n id={moduleId}\n typeName={moduleType}\n context={context}\n data={{\n price: {\n CustomerContextualPrice: adjustedPrice,\n BasePrice: basePrice\n }\n }}\n className='msc-autoSuggest__productResults-item-price'\n freePriceText={props.resources?.freePriceText}\n />\n );\n};\n\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\n const {\n autoSuggestProps: {\n context: {\n request: { gridSettings }\n },\n config: { imageSettings }\n }\n } = props;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (!suggestion || !suggestion.ImageUrl) {\n props.telemetry.error('Search suggestion content is empty, module wont render.');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=40&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n <Image\n requestContext={props.autoSuggestProps.context.actionContext.requestContext}\n altText={altText}\n className='msc-autoSuggest__productResults-item-img'\n src={suggestion.ImageUrl}\n gridSettings={gridSettings!}\n imageSettings={imageSettings ? imageSettings : defaultImageSettings}\n loadFailureBehavior='empty'\n />\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, getUrlSync } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport * as React from 'react';\n\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\nimport {\n CategorySuggestionsComponent,\n FormComponent,\n ISearchCategoryViewProps,\n ISearchKeywordViewProps,\n ISearchProductViewProps,\n KeywordSuggestionsComponent,\n LabelComponent,\n ProductSuggestionsComponent\n} from './components';\nimport { ISearchData } from './search.data';\nimport { ISearchProps, ISuggestionTypeCriterionData, SuggestionTypeCriterionSuggestionType } from './search.props.autogenerated';\n\nexport interface ISearchState {\n isSearchFormExpanded: boolean;\n searchText: string;\n searchKeywordSuggestClass: string;\n searchProductSuggestClass: string;\n searchCategorySuggestClass: string;\n suggestions: Autosuggestions | undefined;\n searchRefiners?: ProductRefiner[] | undefined;\n autoSuggestAriaLabel: string;\n isInitialState: boolean;\n isLoadingAutoSuggest?: boolean;\n}\n\nexport interface ISearchViewProps extends ISearchProps<ISearchData> {\n Search: IModuleProps;\n AutoSuggestAriaLabel: INodeProps;\n AutoSuggestAriaLabelText: string;\n searchText: string;\n AutoSuggest: INodeProps;\n KeywordSuggest: INodeProps;\n ProductSuggest: INodeProps;\n CategorySuggest: INodeProps;\n SearchForm: INodeProps;\n FormWrapper: INodeProps;\n UlKeyword: INodeProps;\n UlProduct: INodeProps;\n UlCategory: INodeProps;\n label: React.ReactNode;\n form: React.ReactNode;\n autosuggestKeyword?: ISearchKeywordViewProps;\n autosuggestProduct?: ISearchProductViewProps;\n autosuggestCategory?: ISearchCategoryViewProps;\n callbacks: {\n handleCancelSearchChange(): void;\n handleCancelSearchFocused?(): void;\n };\n isSearchFormExpanded: boolean;\n isLoadingAutoSuggest?: boolean;\n isLoadingNode?: React.ReactNode;\n}\n\n/**\n *\n * Search module.\n * @extends {React.Component<ISearchProps<ISearchData>, ISearchState>}\n */\nclass Search extends React.Component<ISearchProps<ISearchData>, ISearchState> {\n private readonly searchTextInput: React.RefObject<HTMLInputElement>;\n\n private readonly searchCollapsedLabel: React.RefObject<HTMLButtonElement>;\n\n private readonly formReference: React.RefObject<HTMLButtonElement>;\n\n private readonly maxChars: number;\n\n private readonly topResultsCount?: number;\n\n private readonly hitPrefix: string = '{';\n\n private readonly hitSuffix: string = '}';\n\n private readonly waitTime: number = 500;\n\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject<HTMLDivElement>;\n\n private readonly autoSuggestResultDiv: React.RefObject<HTMLDivElement>;\n\n private readonly searchFormClass: string;\n\n private readonly searchLabelClass: string;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private loadSuggestionsRequestId?: string;\n\n private inputSuggestionType: ISuggestionTypeCriterionData[];\n\n // @ts-expect-error\n private cancellabelDebounce: debounce;\n\n public constructor(props: ISearchProps<ISearchData>) {\n super(props);\n this.searchTextInput = React.createRef();\n this.searchCollapsedLabel = React.createRef();\n this.autoSuggestResultScreenReaderDiv = React.createRef();\n this.autoSuggestResultDiv = React.createRef();\n this.formReference = React.createRef();\n this.state = {\n isSearchFormExpanded: false,\n searchText: '',\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\n suggestions: undefined,\n searchRefiners: undefined,\n autoSuggestAriaLabel: '',\n isInitialState: true,\n isLoadingAutoSuggest: false\n };\n this.maxChars =\n (this.props.context &&\n this.props.context.app &&\n this.props.context.app.config &&\n this.props.context.app.config.searchInputMaxLength) ||\n 50;\n\n this.inputSuggestionType = [];\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\n this.searchFormClass = 'ms-search__form';\n this.searchLabelClass = 'ms-search__label';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this._initSuggestionTypes();\n }\n\n public async componentDidMount(): Promise<void> {\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\n window && window.addEventListener('keyup', this._keyup);\n }\n\n public componentWillUnmount(): void {\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\n window && window.removeEventListener('keyup', this._keyup, false);\n }\n\n public componentDidUpdate(): void {\n const {\n config: { hideSearchLabel }\n } = this.props;\n const { isSearchFormExpanded, isInitialState } = this.state;\n\n if (!this.props.context.request.params.isEditor) {\n if (!hideSearchLabel && isSearchFormExpanded) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else if (!isInitialState) {\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: ISearchProps<ISearchData>, nextState: ISearchState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- ignore complexity.\n public render(): JSX.Element {\n const {\n context,\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, shouldShowFullCategoryPath, className = '' }\n } = this.props;\n\n const {\n isSearchFormExpanded,\n searchText,\n searchKeywordSuggestClass,\n searchProductSuggestClass,\n searchCategorySuggestClass,\n suggestions,\n searchRefiners,\n isLoadingAutoSuggest\n } = this.state;\n\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\n\n const keywordSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Keyword || suggestion.SuggestionType === SuggestionType.None\n );\n const productSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Product\n );\n const categoryRefiners = searchRefiners?.find(refiner => {\n return refiner.SourceValue === ProductRefinerSource.Category;\n });\n const categorySuggestions = suggestions?.AllSearchResults?.filter(suggestion => {\n if (suggestion.SuggestionType !== SuggestionType.Category) {\n return false;\n }\n const refiner = categoryRefiners?.Values?.find(item => {\n return `${item.RefinerRecordId ?? 0}` === suggestion.Id;\n });\n\n return !ObjectExtensions.isNullOrUndefined(refiner);\n });\n\n const viewProps: ISearchViewProps = {\n ...(this.props as ISearchProps<ISearchData>),\n\n Search: {\n moduleProps: this.props,\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\n },\n AutoSuggestAriaLabel: {\n tag: 'div',\n className: 'msc-autoSuggest__screen-reader',\n 'aria-live': 'assertive',\n ref: this.autoSuggestResultScreenReaderDiv\n },\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\n searchText: this.state.searchText,\n AutoSuggest: {\n ref: this.autoSuggestResultDiv,\n className: 'ms-search__autoSuggest'\n },\n KeywordSuggest: {\n className: searchKeywordSuggestClass\n },\n ProductSuggest: {\n className: searchProductSuggestClass\n },\n CategorySuggest: {\n className: searchCategorySuggestClass\n },\n SearchForm: {\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\n },\n FormWrapper: {\n tag: 'form',\n ref: this.formReference,\n className: 'ms-search__searchForm',\n 'aria-label': 'Search',\n name: 'searchForm',\n role: 'search',\n action: searchURL,\n autoComplete: 'off',\n onSubmit: this._handleSubmit\n },\n UlKeyword: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__keywordResults-items', className)\n },\n UlProduct: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__productResults-items', className)\n },\n UlCategory: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__categoryResults-items', className)\n },\n label: LabelComponent({\n isSearchFormExpanded,\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\n searchtext,\n searchLabelArialLabel,\n searchCollapsedLabel: this.searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange: this._handleCancelSearchChange,\n telemetryContent: this.telemetryContent\n }),\n form: FormComponent({\n ariaLabelCancel: cancelBtnAriaLabel,\n ariaLabelSearch: searchBtnAriaLabel,\n ariaLabelSubmit: submitBtnAriaLabel,\n hideSearchLabel,\n searchTextInput: this.searchTextInput,\n disableSubmitSearch,\n handleInputChange: this._handleInputChange,\n handleCancelSearchChange: this._handleCancelSearchChange,\n maxChars: this.maxChars,\n searchQsp,\n searchPlaceholder,\n query: searchText\n }),\n autosuggestKeyword:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (keywordSuggestions && ArrayExtensions.hasElements(keywordSuggestions)))\n ? KeywordSuggestionsComponent({\n searchKeywordSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: keywordSuggestions,\n telemetryContent: this.telemetryContent\n })\n : undefined,\n autosuggestProduct:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (productSuggestions && ArrayExtensions.hasElements(productSuggestions)))\n ? ProductSuggestionsComponent({\n searchProductSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: productSuggestions,\n telemetry: this.props.telemetry,\n moduleType: this.props.typeName,\n moduleId: this.props.id,\n telemetryContent: this.telemetryContent,\n resources: this.props.resources\n })\n : undefined,\n autosuggestCategory:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (categorySuggestions && ArrayExtensions.hasElements(categorySuggestions)))\n ? CategorySuggestionsComponent({\n searchCategorySuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: categorySuggestions,\n searchRefiners,\n telemetryContent: this.telemetryContent,\n shouldShowFullPath: shouldShowFullCategoryPath\n })\n : undefined,\n callbacks: {\n handleCancelSearchChange: this._handleCancelSearchChange,\n handleCancelSearchFocused: this._handleCancelSearchFocused\n },\n isSearchFormExpanded: this.state.isSearchFormExpanded,\n isLoadingAutoSuggest,\n isLoadingNode: this._isLoadingNode()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initSuggestionTypes() {\n const suggestionTypes = this.props.config.suggestionTypeCriterion;\n\n const suggestions = ArrayExtensions.unique(ArrayExtensions.validValues(suggestionTypes));\n if (!ArrayExtensions.hasElements(suggestions)) {\n this.inputSuggestionType = [\n { SuggestionType: SuggestionTypeCriterionSuggestionType.keyword },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.product },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.scopedCategory }\n ];\n return;\n }\n\n const validSuggestions = suggestions.filter(suggestion => suggestion.SuggestionType);\n if (ArrayExtensions.hasElements(validSuggestions)) {\n this.inputSuggestionType = validSuggestions;\n return;\n }\n\n this.inputSuggestionType = [];\n }\n\n /**\n * Function to create the ReactNode for loading Autosuggest result.\n * @returns ReachNode for loading Autosuggest result.\n */\n private readonly _isLoadingNode = (): React.ReactNode => {\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\n return <Spinner className='msc-autoSuggest__loadingResult' label={loadingText} size={SpinnerSize.medium} labelPosition='right' />;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _focusOutTarget = (e: any): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.target.closest('.ms-search') === null) {\n this._clearAutoSuggestState();\n }\n };\n\n private readonly _keyup = (e: KeyboardEvent): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\n this._clearAutoSuggestState();\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n\n if (\n !(\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\n )\n ) {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n };\n\n private readonly _clearAutoSuggestState = (): void => {\n const {\n context: { actionContext },\n data: { searchState }\n } = this.props;\n\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\n searchState.searchText = '';\n searchState.defaultBasicSearchUrl = '';\n searchState.searchQueryStringParameter = '';\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\n this.searchTextInput.current.value = '';\n }\n\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\n };\n\n private async _getSearchSuggestions(loadSuggestionsRequestId: string, query: string) {\n try {\n const searchSuggestions = await getSearchSuggestionsAction(\n new AutoSuggestInput(query, this.topResultsCount, this._getSuggestionType(), this.hitPrefix, this.hitSuffix),\n this.props.context.actionContext\n );\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n return searchSuggestions;\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n this.setState({ suggestions: undefined, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get auto suggest results');\n return undefined;\n }\n }\n\n private async _updateSearchRefiners(loadSuggestionsRequestId: string, query: string, suggestions: Autosuggestions | undefined) {\n try {\n const refiners = await this._getSearchRefiners(query);\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({\n suggestions,\n searchRefiners: refiners,\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions),\n isLoadingAutoSuggest: false\n });\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({ suggestions, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions) });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get refiners results');\n }\n }\n\n private _loadSuggestions(query: string) {\n this.cancellabelDebounce = debounce(async () => {\n this.setState({ isLoadingAutoSuggest: true });\n const loadSuggestionsRequestId = Random.Guid.generateGuid();\n this.loadSuggestionsRequestId = loadSuggestionsRequestId;\n const searchSuggestions = await this._getSearchSuggestions(loadSuggestionsRequestId, query);\n await this._updateSearchRefiners(loadSuggestionsRequestId, query, searchSuggestions);\n }, this.waitTime);\n\n setTimeout(() => {\n this.cancellabelDebounce();\n }, 0);\n }\n\n private readonly _handleInputChange = (query: string): void => {\n if (!query || query.length <= this.maxChars) {\n this.setState({ searchText: query });\n }\n\n if (this.cancellabelDebounce) {\n this.cancellabelDebounce.cancel();\n }\n\n const {\n context,\n data: { searchState }\n } = this.props;\n\n if (context) {\n if (query && query.length > 0) {\n if (query.length > this.maxChars) {\n return;\n }\n\n if (ArrayExtensions.hasElements(this.inputSuggestionType)) {\n this._loadSuggestions(query);\n }\n\n searchState.searchText = query;\n } else {\n this.setState({ suggestions: undefined, searchRefiners: undefined });\n searchState.searchText = '';\n }\n context.actionContext.update(createSearchStateInput(searchState), searchState);\n }\n };\n\n private _getSuggestionType(): string {\n const distinctSuggestionTypes: string[] = this.inputSuggestionType.map(\n suggestionTypeItem => suggestionTypeItem.SuggestionType!.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType!.slice(1)\n );\n return distinctSuggestionTypes.join(',');\n }\n\n private async _getSearchRefiners(searchText: string): Promise<ProductRefiner[]> {\n const { actionContext: ctx } = this.props.context;\n const catalogId = getCatalogId(ctx.requestContext);\n validateCatalogId(catalogId);\n return ProductsDataActions.getProductSearchRefinersAsync(\n { callerContext: ctx },\n {\n SearchCondition: searchText,\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n }\n );\n }\n\n private readonly _handleSubmit = (\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement> | React.FormEvent<HTMLFormElement>\n ): void => {\n const {\n config: { disableSubmitSearch },\n context: {\n actionContext,\n app: {\n config: { searchQueryStringParameter }\n }\n }\n } = this.props;\n\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\n e.preventDefault();\n\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else {\n const searchQsp = searchQueryStringParameter || 'q';\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\n document.location.href = searchURL;\n }\n };\n\n private readonly _handleCancelSearchChange = (): void => {\n const { isSearchFormExpanded, suggestions } = this.state;\n\n if (!isSearchFormExpanded) {\n this.setState({\n isSearchFormExpanded: true,\n searchText: '',\n isInitialState: false\n });\n } else {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _handleCancelSearchFocused = (): void => {\n const { suggestions } = this.state;\n if (!(suggestions && suggestions.AllSearchResults)) {\n this._clearAutoSuggestState();\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(route, window.location.href);\n if (qsp && query) {\n queryUrl.searchParams.set(qsp, query);\n }\n\n return queryUrl.href;\n };\n\n private readonly _setAutoSuggestResultCount = (result?: Autosuggestions) => {\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\n ariaLiveRegion.innerText =\n result && result.AllSearchResults && result.AllSearchResults.length > 0 ? suggestResultString : emptyResultString;\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\n return ariaLiveRegion.innerText;\n }\n return '';\n };\n}\n\nexport default Search;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\nimport { ISearchViewProps } from './search';\n\nconst SearchView: React.FC<ISearchViewProps> = props => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n CategorySuggest,\n UlKeyword,\n UlProduct,\n UlCategory,\n form,\n autosuggestCategory,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n isLoadingAutoSuggest,\n isLoadingNode\n } = props;\n\n return (\n <Module {...Search}>\n {label}\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\n <Node {...AutoSuggest}>\n {searchText && searchText.length > 0 ? <Node {...AutoSuggestAriaLabel}>{AutoSuggestAriaLabelText}</Node> : ''}\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword, isLoadingAutoSuggest, isLoadingNode)}\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct, isLoadingAutoSuggest, isLoadingNode)}\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory, isLoadingAutoSuggest, isLoadingNode)}\n </Node>\n </Module>\n );\n};\n\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\n return (\n <Node {...SearchForm}>\n <Node {...FormWrapper}>\n {form.input}\n {form.cancelBtn}\n {form.submitBtn}\n </Node>\n </Node>\n );\n};\n\nconst _renderKeywordSuggestions = (\n KeywordSuggest: INodeProps,\n UlKeyword: INodeProps,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n keywordSuggestions && (\n <Node {...KeywordSuggest}>\n <Node {...UlKeyword}>\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n </Node>\n </Node>\n )\n );\n};\n\nconst _renderProductSuggestions = (\n ProductSuggest: INodeProps,\n UlProduct: INodeProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n productSuggestions && (\n <Node {...ProductSuggest}>\n <Node {...UlProduct}>\n {productSuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n <Node {...item.LiProduct} key={item.id || index}>\n <Node {...item.AProduct}>\n {item.thumbnail}\n {item.text}\n {item.price}\n </Node>\n </Node>\n );\n })}\n </Node>\n </Node>\n )\n );\n};\n\nconst _renderCategorySuggestions = (\n CategorySuggest: INodeProps,\n UlCategory: INodeProps,\n categorySuggestions?: ISearchCategoryViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n categorySuggestions && (\n <Node {...CategorySuggest}>\n <Node {...UlCategory}>\n {categorySuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n categorySuggestions.text.map(text => {\n return text;\n })}\n </Node>\n </Node>\n )\n );\n};\n\nexport default SearchView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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<IProductComponentV2Props> {}\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<IDimensionsApp>;\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 <div className='msc-product__unit-of-measure'>\n <span>{unitOfMeasure}</span>\n </div>\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 <div className='msc-product__availability'>\n <span>{inventoryAvailabilityLabel}</span>\n </div>\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<IDimensionsApp>;\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<IProductComponentV2Props> = ({\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<string>(productPageUrlFromSwatch);\n const [productImageUrl, setProductImageUrl] = useState<string | undefined>(productImageUrlFromSwatch);\n React.useEffect(() => {\n setProductPageUrl(productPageUrlFromSwatch);\n setProductImageUrl(productImageUrlFromSwatch);\n }, [productUrl, productPageUrlFromSwatch, productImageUrlFromSwatch]);\n const [selectedSwatchItems] = useState(new Dictionary<DimensionTypes, ISwatchItem>());\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<IDimensionsApp>;\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 <div className='msc-product__dimensions'>\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<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n const dimensionType = dimensionTypeValue as DimensionTypes;\n const swatches =\n item.swatches?.map<ISwatchItem>(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 <ProductComponentV2SwatchComponent\n context={context}\n swatches={swatches}\n onSelectDimension={updatePageAndImageUrl}\n key={item.recordId}\n />\n );\n })}\n </div>\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<IProductDimension>(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 <a\n href={productPageUrl}\n onClick={onTelemetryClick(telemetryContent!, payLoad, product.name!)}\n aria-label={renderLabel(\n product.name,\n context.cultureFormatter.formatCurrency(product.price),\n product.averageRating,\n ratingAriaLabel,\n product.totalRatings,\n ratingCountAriaLabel\n )}\n className='msc-product'\n {...attribute}\n >\n <div className='msc-product__image__description'>\n <div className='msc-product__image'>\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.primaryImageUrl,\n product.name,\n context\n )}\n </div>\n <div className='msc-product__title_description'>\n <h5 className='msc-product__title__text'>{product.name}</h5>\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 </div>\n </div>\n </a>\n ) : (\n <a\n href={productPageUrl}\n onClick={onTelemetryClick(telemetryContent!, payLoad, product.name!)}\n aria-label={renderLabel(\n product.name,\n context.cultureFormatter.formatCurrency(product.price),\n product.averageRating,\n ratingAriaLabel\n )}\n className='msc-product'\n {...attribute}\n >\n <div className='msc-product__image'>\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.primaryImageUrl,\n product.name,\n context\n )}\n </div>\n <div className='msc-product__details'>\n <h5 className='msc-product__title'>{product.name}</h5>\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 </div>\n </a>\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 <p className='msc-product__text'>{description}</p>;\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 <RatingComponent\n context={coreContext}\n id={moduleId}\n typeName={moduleTypeName}\n avgRating={avgRating}\n ratingCount={numberRatings}\n readOnly\n ariaLabel={ratingAriaLabelText}\n ratingCountAriaLabel={ratingCountAriaLabelText}\n data={{}}\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 <PriceComponent\n context={context}\n id={id}\n typeName={typeName}\n data={{ price }}\n savingsText={savingsText}\n freePriceText={freePriceText}\n originalPriceText={originalPriceText}\n isPriceMinMaxEnabled={isPriceMinMaxEnabled}\n priceResources={priceResources}\n />\n );\n}\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n fallbackImageUrl?: string,\n altText?: string,\n context?: ICoreContext<IGeneric<IAny>>\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 <Image\n requestContext={context?.actionContext.requestContext}\n {...img}\n {...imageProps}\n loadFailureBehavior='empty'\n bypassHideOnFailure\n />\n );\n}\n\nexport const ProductComponentV2: React.FunctionComponent<IProductComponentV2Props> = 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 { 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","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\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 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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\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","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","/** 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 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","/**\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","/**\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 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 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","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 root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\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 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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\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","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","/** 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 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","/**\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","/**\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 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","/**\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","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","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 root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\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 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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\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","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","/** 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 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","/**\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","/**\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 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 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","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"],"names":["AccountManagementAddress","React","constructor","props","super","countryRegionId","countryRegions","addressPurposes","_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","_dataInitialize","data","reaction","_data$countryRegions$","_data$addressPurposes","_data$address$result","customerAddresses","_renderAddOrUpdateAddress","AddressAddUpdate","isUpdating","resources","addressType","AddressType","Shipping","defaultCountryRegionId","defaultAddressType","selectedAddress","addressActionResponse","dropdownDisplayData","getPrefilledAddressDropdownData","addressStateDefaultSelectionText","telemetryContent","onInputChange","_onAddressAddUpdateInputChange","onDropdownChange","_onAddressAddUpdateDropdownChange","onSave","_onAddressAddUpdateSubmit","onCancel","_resetView","_renderListAddress","config","heading","text","headingTag","tag","AddressList","addresses","primaryAddressSectionHeading","otherAddressSectionHeading","contextRequest","context","request","handleLineItemHeadingChange","event","target","value","onEditAddress","_goToEditAddress","onRemoveAddress","_onRemoveAddress","onAddAddress","_goToAddAddress","onUpdatePrimaryAddress","_onSubmitUpdatePrimaryAddress","_attachMapAutoSuggest","storeSelectorStateManager","_this$autoSuggest2","isMapApiLoaded","attachAutoSuggest","onAddressAddUpdate","validateAddressFormat","type","checked","replace","RegExp","AddressItemType","AddressTypeValue","_onCountryChange","_onAddressUpdate","response","onSuccess","then","hasError","addressCommon","isAuthenticatedFlow","currentOperation","AddressOperation","Update","updateCustomerAddress","addCustomerAddress","Promise","resolve","_onAddOrUpdateSuccess","_this$autoSuggest3","twoLetterISORegionName","getTwoLetterISORegionName","TwoLetterISORegionName","changeAutoSuggestionCountryCode","_getAddressFormatExcludeList","addressFormatExcludeList","showAddressType","push","IsPrimary","_getStateProvinces","Add","getStateProvinces","some","state","StateId","_updateCurrentOperation","operation","updateCustomerPrimaryAddress","_onUpdatePrimaryAddressSuccess","_objectSpread","Deactivate","removeAddressData","_renderScreenReaderRemoveText","notification","formatNotification","removeAddressNotification","Name","className","_setDefaultCountryRegionId","List","telemetry","AddressCommon","AddressFormat","AddressMetaData","getTelemetryObject","telemetryPageName","friendlyName","_defaultAddressType","defaultAddressTypeMap","Delivery","actionContext","requestContext","channel","autoSuggestionEnabled","autoSuggestOptions","BingMapsApiKey","error","BingMapsEnabled","options","AutoSuggest","ChannelCountryRegionISOCode","DefaultLanguageId","_this$props$data$stor","loadMapApi","_this$autoSuggest4","_loadMapAPI","_this$props$data$stor2","_this$props$data$stor3","_this$autoSuggest5","disposeAutoSuggest","shouldComponentUpdate","nextProps","nextState","render","renderView","viewState","isShowAddresList","isShowAddOrUpdateAddress","AccountAddressManagement","moduleProps","classnames","showAddressList","showAddOrUpdateAddress","screenReaderNotification","market","getDefaultCountryRegionId","__decorate","observable","action","observer","AddressShow","_ref","AddressDetail","items","Node","Object","assign","map","item","description","_ref2","isShowList","Item","key","showItems","isShowPrimaryButton","primaryButton","editButton","removeButton","Error","isShowError","title","message","AddressLists","_ref3","ListAddress","isShowEmptyListMessage","emptyListMessage","addButton","primaryAddressList","otherAddressList","_ref4","AddressForm","isShowSaveButton","saveButton","isShowCancelButton","cancelButton","AddressItem","label","alert","input","AddressError","Module","CheckoutPickupCartLines","moduleClassName","cartLines","itemTitle","ArrayExtensions","hasElements","cartLine","isShowQty","quantity","lineId","Image","imageProps","id","productQuantityInfo","altText","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","quality","CheckoutShippingAddress","_data$featureState$re2","addressListSelectedAddress","multiplePickupStoreSwitchName","retailMultiplePickUpOptionEnabled","_initPickupGroup","pickupCartLines","_getCartLinesforDelivery","_this$props$data$chec","products","_getProductsByCartLines","checkout","checkoutCart","cart","ChannelId","line","product","find","x","RecordId","ProductId","setState","shippingGroups","addressFormatItem","formatAddress","countryStates","_data$countryStates$r","featureState","_data$featureState$re","feature","IsEnabled","_this$props$data$chec2","_this$props$data$chec3","CartLines","filter","_isDelivery","_isNotPickupMode","DeliveryMode","FulfillmentStoreId","deliveryMode","_this$props$context$r","_featureState$result","pickupDeliveryModeCode","PickupDeliveryModeCode","channelDeliveryOptionConfig","_channelDeliveryOptio","pickupDeliveryMode","PickupDeliveryModeCodes","pickupMode","channelId","productInputs","ObjectExtensions","isNullOrUndefined","ProductInput","apiSettings","getSimpleProducts","onSaveHandler","onCancelHandler","hasExternalSubmitGroup","moduleState","onSubmit","onCancelButtonHandler","_renderSelectAddress","onAddAddressHandler","AddressSelect","onAddressOptionChange","_onAddressOptionChange","_onSelectAddress","addressRecordId","currentTarget","toString","_updateModuleState","newAddress","twoLetterIsoRegionName","_getDefaultAddress","length","_initModuleState","init","status","_canShip","onEdit","checkoutState","_checkoutState$checko","defaultAddress","ShippingAddress","isExpressCheckoutApplied","shippingAddressFromExpressCheckout","isEmpty","Show","_setShippingAddress","shippingAddress","_checkout$result$chec","_checkout$result$chec2","emailDeliveryModeCode","EmailDeliveryModeCode","hasInvoiceLine","_channelDeliveryOptio2","newShippingAddress","updateShippingAddress","catch","onReady","onPending","onUpdating","_featureState$result2","headingImages","itemsText","singleItemText","imageSettings","cartlines","_line$cartLine$LineId","_line$product","_line$product$Primary","_line$product2","_line$product3","_line$cartLine$Quanti","LineId","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","gridSettings","loadFailureBehavior","Quantity","itemText","lineImageProps","cartLineImages","isRetailMultiplePickUpOptionEnabled","isShowAddress","showAddress","_renderShowAddress","showAddressSelectHandler","showAddOrUpdateAddressHandler","showAddressSelect","_request$channel","_this$props$data$chec4","computed","withModuleState","SelectAddress","SelectItem","PickUpAtStoreComponent","PickUpAtStore","location","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","index","OrderSummaryComponent","_ref9","lines","subtotal","price","SubtotalAmountWithoutTax","shipping","otherCharge","tax","loyalty","giftCard","orderTotal","PaymentSummaryComponent","_ref10","invoices","_props$data$checkout$","_props$data$checkout$2","isPaymentVerificationRedirection","shouldEnableSinglePaymentAuthorizationCheckout","canShow","checkoutProps","headerProps","hasSalesOrder","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","orderConfirmation","loading","guidedForm","orderSummary","invoicePaymentSummary","placeOrderButton","termsAndConditions","mailchimpSubscriptionStatus","subscribeCheckboxLabel","isMailchimpChecked","newsletterActive","isSignedInUser","user","isAuthenticated","shouldShowMailchimp","isErr","setIsErr","renderSubscriptionCheckbox","onChange","checkbox","changeMailChimpSubscriptionStatusAsync","callerContext","res","Success","htmlFor","checkErr","e","classes","classList","contains","MsDyn365","isBrowser","document","querySelectorAll","btn","disabled","addEventListener","_renderPlaceOrderBtn","_props$data$checkout","isTermsAndConditionChecked","canPlaceOrder","cartHasNoBalance","_orderSummary$lines","orderTotalNode","get","CheckoutProvider","cartHasBalance","mailChimp","Waiting","checkoutNotCompleteErrText","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoAriaLabelFormat","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","typeName","Invoice","SWIFT","Payment","Service","Home","Other","Business","RemitTo","Statement","FixedAsset","Onetime","Recruit","Lading","Unlading","Reallocation","HeadCompany","StableOrganization","Consignment","ProductionSite","focusOnCheckoutError","checkoutErrorRef","ctx","getCheckoutState","exception","current","scrollIntoView","updateCheckoutErrorFocus","newCheckoutErrorFocus","CheckoutModule","None","AddressBillingCheckbox","isChecked","ariaLabel","additionalAttributes","AddressInputComponent","additionalAddributes","AddressBillingHeading","ErrorComponent","role","getInput","_addressPurposes$find","addressTypeDescription","purpose","Description","ichecked","addressChangeCheckboxAriaLabel","getAddressSelectItems","onShipMultipleAddresses","multipleAddressShippingEnabled","AddressButtonComponent","addressAddNewButtonText","addressAddButtonText","addressAddNewButtonAriaLabel","addressAddButtonAriaLabel","onClick","shipMultipleAddressesButton","addressShipMultipleText","addressShipMultipleAriaLabel","addressSaveButtonText","addressSaveButtonAriaLabel","addressCancelButtonText","addressCancelButtonAriaLabel","ShipMultipleAddressesTableHeading","componentClassName","getOnChange","clickHandler","isMobile","scope","style","maxWidth","position","selectAllRowsText","paddingLeft","isAllSelected","border","top","left","transform","clearSelectionButton","productNumber","productName","textAlign","productUnitPrice","productQuantity","productAddress","onSelectLineHandler","shipMultipleAddressesLine","onSelect","ShipMultipleAddressesLineView","shippingLineImage","onShippingAddressChange","console","log","selectLine","productImage","renderProductImage","productInfo","renderProductInfo","productPrice","renderProductPrice","renderProductError","image","fallbackImage","_context$actionContex","_context$request","tabIndex","dimensions","Dimensions","dimension","DimensionValue","Value","renderProductDimensions","dimensionsLine","join","Price","PriceComponent","CustomerContextualPrice","moduleId","moduleTypeName","currencyCode","OOS","outOfStockProductErrorMessage","UNASSORTED","unavailableProductErrorMessage","NONE","AddressShipMultiple","shippingLines","shippingLineImages","selectedShippingLines","onSelectAll","onClear","onBulkShippingAddressChange","onShipSingleAddress","shipMultipleAddressLines","ShipMultipleAddress","shipSingleAddressButton","addressShipSingleText","addressShipSingleAriaLabel","clearSelectionButtonText","clearSelectionButtonAriaLabel","every","addressDropdown","chooseAddressForSelectedItemsText","chooseAddressForSelectedItemsAriaLabel","defaultValue","noAddressSelectedAriaLabel","hidden","ProductsTable","ProductsTableRow","ProductsTableHeading","headers","addressSelectAllRowsText","addressProductNumberText","addressProductText","addressProductUnitPriceText","addressProductQuantityText","addressProductAddressText","_renderProductListHeader","_line$cartLine","currentLineProps","saveAndContinueBtnLabel","CheckoutBillingAddress","_this$addUpdateAddres","Billing","_onSubmitAddress","isBillingAddressRequried","billingAddress","isBillingAddressSameAsShippingAddress","isBillingAddressSameAsShipping","isCartContainsItemsForShipping","_onBillingAddressSameAsShippingChange","setHasError","isPaymentSectionContainerHasError","updateIsBillingAddressHasError","newIsBillingAddressHasError","_setBillingAddress","information","newBillingAddress","updateBillingAddress","additionalProperties","_setErrorMessage","errorMessage","isShowSameAsShippingCheckbox","_this$props$data$chec5","isDisabled","removeBillingAddress","onDisable","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec6","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec7","checkoutErrorFocus","_shouldHideBillingAddressForOBO","addressBillingAddressHeading","errorMessageTitle","sameAsShippingCheckbox","addressSameAsShippingAddressAriaLabel","addressSameAsShippingAddressText","_this$selectedAddress","_request$channel2","_request$channel3","_this$props$data$chec8","_this$props$data$chec9","_this$props$data$chec10","loyaltyAmount","giftCardExtends","reduce","count","Balance","_checkoutState$custom","customerAccountAmount","checkoutResult","paymentTenderType","tokenizedPaymentCard","isPaidByOtherPaymentSource","paymenTenderType","TotalAmount","getGiftCardTotalAmount","getLoyaltyAmount","getCustomerAccountAmount","_this$props$data$chec11","_this$props$data$chec12","shouldPaidByCard","isCheckoutCallFailed","Msdyn365","EnabledPaymentsForOBO","PaymentInstrument","ref","isMultipleAddressShippingEnabled","isMobileCheck","variant","VariantType","Browser","sm","md","isMobileView","cartLinesForShipping","getGroupByDelivery","groupBy","shippingAddressId","renderShipMultiAddressView","headingAfterMultiSelectAddressSelect","updated","shippingLine","_shippingLine$cartLin","updatedCartLine","updateIndividualAddresses","prevState","cartline","_shippingLine$cartLin2","shippingGroupsBuffer","initialShippingLineSelection","CatalogId","_renderShipMultipleAddresses","cartlineImages","_context$request$app","app","OmniChannelMedia","bind","resetSelectedShippingLines","onShipMultipleAddressesHandler","_goToShipMultipleAddresses","_isNewAddress","_clearError","_getAddressFromCartExpressPaymentDetails","expressPaymentDetailsFromCartPage","isExpressAddressAppliedInCartPage","addressFromCartExpress","getExpressAddress","getAddressFromTokenizedPaymentCard","Country","threeLetterIsoRegionName","getThreeLetterIsoRegionName","NameOnCard","Address1","StreetNumber","Address2","Zip","Phone","expressAddress","countryRegion","country","_country$ISOCode","ISOCode","toLowerCase","CountryRegionId","shippingCartLines","updateHasShippingAddress","newHasShippingAddress","Multiple","_setCartLinesShippingAddress","newCartLinesWithShippingAddress","shippingGroup","updateCartLinesShippingAddress","updateCartLineShippingAddress","updatedCartLinesObject","_getViewport","device","Type","window","innerWidth","existingAddress","_address$Name","_address$Street","_address$StreetNumber","_address$City","_address$State","_address$ZipCode","_address$Phone","_address$ThreeLetterI","_address$AddressTypeV","_countItems","_viewport","_updateViewport","_address","componentWillUnmount","removeEventListener","_line$cartLine$LineId2","_line$product4","_line$product$Primary2","_line$product5","_line$product6","_context$request$app2","_line$cartLine$Quanti2","_line$cartLine$Shippi","_line$cartLine$Shippi2","numberOfCartLines","isShowShipMultipleAddress","showShipMultipleAddressesHandler","showShipMultipleAddresses","_this$props$data$cart","_this$props$data$cart2","properties","ExtensionProperties","property","Key","StringValue","JSON","parse","_renderShipMultipleAddressLine","verticalAlign","colSpan","width","display","marginTop","validateCartAsync","propsContext","cartResult","cartVersion","shouldRetry","arguments","Version","warning","debug","AsyncResult","_validationResult$Val","validationResult","CartsDataActions","bypassCache","Id","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","cartLineToUpdate","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","Behavior","MaximumQuantity","cartLineId","newQuantity","updateLineResult","updateCartLineQuantity","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","ProductPickUpOptionsForCartLineItems","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","getCartState","getActiveCartProductsAction","ActiveCartProductsInput","ProductsDataActions","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","createObservableDataAction","inputData","PickUpInStore","_toggleBOPIS","isBopisSelected","storeSelectorModuleId","openDialog","alreadySelectedLocation","OrgUnitNumber","deliveryOptions","onLocationSelected","orgUnitLocation","updateCartLinePickupLocation","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","ContainerProps","_assembleNode","foundProductAvailability","productPickUpOptions","_foundProductAvailabi","_product$Dimensions","_props$cartState","_context$request$chan","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isMultipleCatalogFeatureEnabledInHq","nameOfWishlist","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","IsInvoiceLine","_getErrorMessage","currentQuantity","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","i","ValidationFailures","validation","ErrorContext","onRemoveClickHandler","onRemoveClickFunction","payload","getPayloadObject","TelemetryEvent","RemoveFromCart","attributes","getTelemetryAttributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","isCustomPriceSelected","DimensionTypeValue","productUrl","getProductUrlSync","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","href","searchParams","getInvoiceDetailsPageUrlSync","cartlineId","StringExtensions","isNullOrEmpty","CartLineItemComponent","catalogs","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","priceCurrency","Currency","pickUpInStore","pickitUpText","remove","Button","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","addToOrderTemplate","AddToOrderTemplateComponent","shouldShowButtonFailedTooltip","disableButton","disableTooltip","catalogId","assembleCartlines","reactNodes","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","_assembleGroupInvoiceCartlines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","groupDelivery","cartLinesGroup","entries","deliveryType","groupByDeliveryType","keys","getPromotionData","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","Cart","_isMounted","promotionPopupId","promotionLinkClick","showPromotionDialog","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","validateCart","updateCartlineQuantity","cartlineToUpdate","cartActionResult","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","payLoad","isCartValid","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","_this$props$data$cart3","_cart$cart$CartLines","_this$props$data$prod","_this$props$data$feat","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","RetailMultiplePickupFeatureState","multiplePickUpEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","getCatalogId","validateCatalogId","getCartLinesGroup","contentAction","etext","TelemetryConstant","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","viewProps","cartTitle","CartlinesWrapper","OrderSummaryWrapper","OrderSummaryItems","promoCode","_getPromoCode","_getPromotions","orderSummaryHeading","invoiceSummaryTitle","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","checkoutAsSignInUserButton","checkoutButtonTitle","checkoutAsGuestButton","showGuestCheckoutButton","guestCheckoutButtonTitle","expressCheckoutButton","slots","paymentExpress","ExpressCheckoutSectionWrapper","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","checkoutBlockedDueToUnavailableFunds","storeSelector","waitingComponent","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","OrderSummaryErrors","_getOrderSummaryErrors","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","promotionDialog","Modal","isOpen","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","Wrapper","Alert","color","assertive","outOfStockErrorMessageHeader","header","errors","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","_this$props","_this$props$context$r2","channelConfiguration","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","freePriceText","originalPriceText","currentPriceText","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","enableStockCheck","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","_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","_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","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","amount","Math","min","totalAmountAfterGiftCard","loyaltyLabel","giftcardLabel","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","play","_this$player$current2","pause","getImagesData","skipImageValidation","_this$props$config$im","_this$props$config$im2","source","imageSource","mediaLocations","mediaLocationsForSelectedVariant","mediaLocation","_mediaLocation$Uri","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","editProps","Player","playerData","isEditor","params","_renderEmptyImage","_getCarouselItem","isInPopup","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","getVideoThumbNailItem","_refHandler","divRef","which","KeyCodes","Enter","Space","preventDefault","_renderVideoThumbnail","fullScreenTitleText","openModalDialog","_toggleModal","imageModalSlider","ZoomView","_mapProductToImageData","carouselprops","Carousel","_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","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","stringify","lastUpdate","defaultKey","_getEmptyThumbnailItem","zoomView","curatedImage","mediaToSet","all","getVideoMetadataFromApi","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","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","Number","positionX","clientX","positionY","clientY","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","_this$props$config$da5","onMouseOut","onMouseMoveLensContainer","onMouseOverImageContainer","_product$PrimaryImage","_this$fullScreenOverl","focus","parentDiv","children","querySelector","removeAttribute","removeContainerZoomStyle","_renderThumbnails","thumbnails","_renderThumbnailItem","imageAltText","_context$app","validateMediaLocationAsync","imageData","http","XMLHttpRequest","open","send","_unused","selectedProduct","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","pairs","pair","_actionContext$reques","isPreview","commerceApiRequest","previewImageData","displayOrder","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","commerceVideoMetadataRequest","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","ProductCollection","handleHeadingChange","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","validValues","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","initProductState","productPrices","productCollectionProducts","productCollection","equals","listType","getProductPriceForSelectedProducts","ProductPriceForSelectedProductsInput","p","IsMasterProduct","_getProduct","_this$state$productsD","trace","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","TotalRatings","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","priceResources","priceRangeSeparator","ProductContainer","productComponent","ProductComponent","ratingAriaLabel","quickViewButton","dimensionAvailabilities","dimensionAvailability","_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","_renderCarousel","carouselContainer","_renderProduct","_renderGrid","gridContainer","_renderNoProduct","noProductToRenderText","QuickOrderDrawer","_toggle","isManuallyToggled","collapseProps","drawerGlyphClass","toggleGlyphClassName","animateGlyph","drawerOpenGlyph","openGlyph","closeGlyph","drawerCloseGlyph","drawerClass","toggleButtonProps","block","_generateDrawerButtonInnerMarkup","Collapse","collapseState","drawerButtonTextClass","toggleButtonClassName","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","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","fallbackImageUrl","containerClassName","QuickOrderExtraActionsPopupComponent","isNullOrWhitespace","getProductPageUrlSync","QuickOrderDesktopTableRowCellComponent","_cartLine$LineId","_dimension$DimensionV","dimensionValue","quickOrderProductDimensionsSeparator","UnitOfMeasureSymbol","IncrementalQuantity","max","currentCount","quickOrderInputQuantityAriaLabel","quickOrderDecrementButtonAriaLabel","quickOrderIncrementButtonAriaLabel","isGiftCard","IsGiftCard","quickOrderRemoveItemButtonAriaLabel","QuickOrderMobileTableRowCellComponent","quickOrderQuantityMobileText","QuickOrderTableRowComponent","QuickOrderTableComponent","setIsMobile","quickOrderProducts","updateViewport","headerClassName","quickOrderProduct","QuickOrder","waitTime","dimensionUpdateQueue","FinitePromiseQueue","initializedDimensions","Set","cssClassNameConfigure","quickOrderCallbacks","initializeDimension","initializedDimension","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","productDimensions","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","_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","reject","newProduct","getSelectedVariant","SelectedVariantInput","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","productAvailable","_getDimensionErrorString","dimensionTypeValue","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","renderConfigure","containerProps","dropdowns","renderConfigureDropdown","dropdown","labelContainerProps","select","renderForm","quickOrderProductContent","quickOrderMsgContent","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Decimal","isRangeTypeForInteger","Integer","isCustomRangeTypeIntegerSelected","selectedRefinementCriterion","parentProductRefinerHierarchy","RowNumber","DataTypeValue","DisplayTemplateValue","DisplayTemplate","Range","isSingleSelectRangeTypeIntegerSelected","productRefinerValue","LeftValueBoundString","RightValueBoundString","findMatchingRefinementCriterion","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","parent","RefinerRecordId","RefinerSourceValue","getIntegerRangeName","rangeValue","RightValueBoundLocalizedString","LeftValueBoundLocalizedString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","r","selectedCriterion","isSelecting","rangeStart","rangeEnd","Text","TrueFalse","RefinerTypeValue","RefinerType","SingleSelect","Values","child","matchingIndex","findIndex","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","stopPropagation","clearAll","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","hierarchy","_rangeParentDisplay$","rangeParentDisplay","_getKeyForRefinerValue","rangeDisplayType","clearAllText","choiceAriaLabel","closeAriaLabel","selectedRefinersMap","clearAllAttributes","attribute","newIntRange","urlBuilder","_parent","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","KeyName","_formatPrice","UnitText","filterValue","refiner","currency","cultureFormatter","formatCurrency","selected","ErrorMessage","FeatureSearchResultItem","productRecordId","featureSimilarDescriptionTitle","featureSimilarLooksTitle","onTelemetryClick","imageUrl","img","renderProductPlacementImage","Link","ModalToggle","innerRef","modalNode","autoFocus","applicationNode","returnFocusRef","returnRef","onModalToggle","zIndex","modalHeaderNode","modalTitle","modalFooterNode","modalCloseButtonText","getInventoryLabel","AttributeValues","inventoryAttribute","TextValue","ProductSearchResultItems","moduleType","inventoryLabel","swatchItemAriaLabel","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","componentDidUpdate","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","SourceValue","Rating","_renderRating","productCount","Count","refineMenuItemAriaLabel","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","colorHexCode","SwatchComponent","list","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","RatingComponent","avgRating","ratingCount","hideCount","readOnly","RangeRefineItemInput","_changeMinInputRange","_changeMaxInputRange","_applyCustom","invalidData","updateInputRangerProps","_isUndefined","trim","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpanded","isExpandedOnInitialLoad","expanded","productRefinerHierarchy","hideRating","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","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","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","refiners","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandRefinersCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","channelInventoryConfiguration","isInventorySortableAttribute","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","isInventoryProductAttribute","InventoryProductAttributeRecordId","_getChoiceSummary","_this$props$data$refi","selectedRefiners","rating","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$prod5","shouldAllowBackNavigation","breadCrumbType","shouldAllowBack","isPriceMinMaxFeatureState","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","Paging","Top","Skip","Sorting","recordId","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","createSearchResultModal","modalProps","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","SearchState","SuggestionType","AutoSuggestInput","searchText","suggestionType","hitPrefix","hitSuffix","searchQuery","topResultsCount","_getAutoSuggest","autosuggest","_ctx$requestContext$a","productSearchCriteria","SearchCondition","Context","inventoryRefinerValue","getInventorySortableRefinerValue","isInStock","Attribute","getInventoryConfigurationAsync","Refinement","searchCriteria","ProductSearchCriteria","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","ImageUrl","generateImageUrl","AllSearchResults","autoSuggestPromises","CategorySuggestionsComponent","suggestions","autoSuggestProps","categorySuggestionHeading","_renderTitle","categoryAutoSuggestionHeading","shouldShowFullPath","splitValue","split","pop","_generateLink","_getHighlightedText","suggestion","_getCategoryLink","_categoryRefiners$Val","searchPageURL","searchQsp","searchRefiners","queryUrl","categoryRefiners","Category","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","ProductSuggestionsComponent","productSuggestionHeading","productAutoSuggestionHeading","_item$Value","Value3","DecimalValue","_renderThumbnail","_renderPrice","LiProduct","_getLiWrapper","AProduct","_getAWrapper","recid","adjustedPrice","basePrice","_props$resources","BasePrice","Search","_isLoadingNode","loadingText","autoSuggestResultLoadingMessage","Spinner","SpinnerSize","medium","labelPosition","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","keyCode","Escape","formReference","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","update","createSearchStateInput","cancellabelDebounce","inputSuggestionType","_loadSuggestions","_handleSubmit","searchURL","_appendQueryParams","_handleCancelSearchChange","isInitialState","_handleCancelSearchFocused","route","_setAutoSuggestResultCount","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","autoSuggestAriaLabel","isLoadingAutoSuggest","searchInputMaxLength","searchFormClass","_initSuggestionTypes","body","_suggestions$AllSearc","_suggestions$AllSearc2","_suggestions$AllSearc3","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","shouldShowFullCategoryPath","keywordSuggestions","Keyword","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","_renderForm","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","getDefaultColorSwatchSelected","productData","_colorAttribute$swatc","_colorAttribute$swatc2","_colorAttribute$swatc3","attributeValues","colorAttribute","attributeValue","_attributeValue$keyNa","keyName","defaultSwatch","swatches","isDefault","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","baseUrl","search","pathname","renderProductUnitOfMeasure","unitOfMeasure","renderLabel","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","roundedRating","toFixed","renderPrice","savingsText","AdjustedPrice","_context$app$config","contextConfig","fallbackImageSource","ProductComponentV2","msdyn365Commerce","createComponentOverride","component","_product$name","_product$recordId","_getProductImageUrlFr","_getProductPageUrlFro","isEnabledProductDescription","MIN_VALUE","productImageUrlFromSwatch","dimensionToPreSelectInProductCard","productImageUrls","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","swatchValue","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","updatePageAndImageUrl","swatchItem","setValue","productPageUrlWithSwatch","newUrl","delete","swatchProductImageUrl","newImageUrl","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","averageRating","totalRatings","defaultUnitOfMeasure","_item$keyName$toLocal","_item$keyName","_item$swatches$map","_item$swatches","shouldDisplayDimension","_item$recordId","_swatchItem$swatchVal","_swatchItem$swatchVal2","_dimensionAvailabilit","swatchColorHexCode","swatchImageUrl","_swatchItem$swatchVal3","swatch","ProductComponentV2SwatchComponent","onSelectDimension","numberRatings","renderRating","inventoryAvailabilityLabel","selectedDimensions","getValues","convertDimensionTypeToProductDimensionType","selectedProductId","renderQuickView","renderProductComparisonButton","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","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","Symbol","module","exports","getRawTag","objectToString","symToStringTag","toStringTag","trimmedEndIndex","reTrimStart","string","freeGlobal","g","objectProto","prototype","hasOwnProperty","nativeObjectToString","isOwn","unmasked","freeSelf","self","root","Function","reWhitespace","test","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","baseGetTag","isObjectLike","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary"],"sourceRoot":""}