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

{description}

;\n}\n\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(2);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\nfunction getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\n if (reviewCount && ratingCountAriaLabelText) {\n return format(ratingCountAriaLabelText || '', reviewCount);\n }\n return '';\n}\n\nfunction renderRating(\n coreContext: ICoreContext,\n moduleTypeName: string,\n moduleId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string,\n ratingCountAriaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() || undefined;\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\n\n return (\n \n );\n}\n\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n id: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string,\n currentPriceText?: string,\n isPriceMinMaxEnabled?: boolean,\n priceResources?: IPriceComponentResources\n): JSX.Element | null {\n const price = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n \n );\n}\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n fallbackImageUrl?: string,\n altText?: string,\n context?: ICoreContext>\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Site level config can be of any type.\n const contextConfig = context?.app.config?.placeholderImageName;\n const emptyPlaceHolderImage = contextConfig as string;\n let fallbackImageSource = fallbackImageUrl;\n if (emptyPlaceHolderImage && fallbackImageUrl) {\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : '',\n fallBackSrc: fallbackImageSource\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return (\n \n );\n}\n\nexport const ProductComponentV2: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\n IProductComponentV2\n>('ProductV2', { component: ProductCardV2, ...PriceComponentActions });\n\nexport default ProductComponentV2;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalHeader,\n onTelemetryClick,\n Popover,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\nimport { IHeaderData } from './header.data';\nimport { IHeaderProps, IHeaderResources, IMyAccountLinksData } from './header.props.autogenerated';\n\nexport interface IHeaderState {\n mobileMenuCollapsed: boolean;\n signinPopoverOpen: boolean;\n hasSigninerror?: boolean;\n}\n\nexport interface IHeaderViewProps extends IHeaderProps, IHeaderState {\n logo: React.ReactNode;\n wishListIconDesktop: React.ReactNode;\n wishListIconMobile: React.ReactNode;\n cartIcon: React.ReactNode;\n navIcon: React.ReactNode;\n className: string;\n menuBar: React.ReactNode[];\n search: React.ReactNode[];\n siteOptions: React.ReactNode[];\n HeaderTag: IModuleProps;\n HeaderContainer: INodeProps;\n MobileMenuContainer: INodeProps;\n MobileMenuHeader: React.ReactNode;\n MobileMenuBodyContainer: INodeProps;\n MobileMenuLinksContainer: INodeProps;\n HeaderTopBarContainer: INodeProps;\n Divider: INodeProps;\n\n AccountInfoDropdownParentContainer?: INodeProps;\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\n accountInfoDropdownButton?: React.ReactNode;\n\n signOutLink?: React.ReactNode;\n signInLink?: React.ReactNode;\n switchCustomerLink?: React.ReactNode;\n isOBORequest?: boolean;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n currentDistributor?: React.ReactNode;\n}\n\n/**\n *\n * Header component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Header extends React.PureComponent, IHeaderState> {\n private readonly popOverRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private cart: ICartState | undefined;\n\n private isB2BSite: boolean = false;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return (\n (MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName) ||\n this.props.context.request?.user?.name\n );\n }\n\n /**\n * OBO scenario. The name of worker who shops on behalf of customer.\n */\n @computed public get workerName(): Readonly {\n const worker = this.props.data.employee?.result;\n return worker?.Name;\n }\n\n @computed public get customerName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n if (MsDyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n }\n\n public constructor(props: IHeaderProps) {\n super(props);\n this.popOverRef = React.createRef();\n this._toggleNavbar = this._toggleNavbar.bind(this);\n this._togglePopover = this._togglePopover.bind(this);\n this._keydown = this._keydown.bind(this);\n this.state = {\n mobileMenuCollapsed: true,\n signinPopoverOpen: false,\n hasSigninerror: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isB2BSite = isChannelTypeB2B(this.props.context.request);\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => {\n this.props.data.cart.result;\n },\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: {\n signUpCustomerNotFoundTitle,\n signUpMultipleCustomerFoundTitle,\n signInCustomerNotAuthorizedTitle,\n closeNotificationLabel\n }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(\n user,\n signUpMultipleCustomerFoundTitle,\n signUpCustomerNotFoundTitle,\n signInCustomerNotAuthorizedTitle\n );\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('keydown', this._keydown, false);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n data: { accountInformation, wishlists },\n context: {\n request: { user }\n },\n context,\n resources: { cartLabel, cartQtyLabel }\n } = this.props;\n const { logoLink, logoImage, shouldShowWishlistCount } = this.props.config;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\n const navbarKey = 'header-nav-mobile';\n const customer = accountInformation && accountInformation.result;\n const cartIconSlot = this._getSlot('cartIcon');\n const menuBarSlot = this._getSlot('menuBar');\n const searchSlot = this._getSlot('search');\n let wishlistCount = 0;\n const siteOptionsSlot = this._getSlot('siteOptions');\n const preferredStoreSlot = this._getSlot('storeSelector');\n const currentDistributorSlot = this._getSlot('distributorSelector');\n if (wishlists !== undefined) {\n if (\n !wishlists.result ||\n !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines ||\n !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)\n ) {\n wishlistCount = 0;\n } else {\n wishlistCount = wishlists.result[0].CommerceListLines.length;\n }\n }\n const viewProps: IHeaderViewProps = {\n ...(this.props as IHeaderProps),\n ...this.state,\n logo: (\n \n ),\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: ArrayExtensions.hasElements(cartIconSlot) ? (\n cartIconSlot[0]\n ) : (\n \n ),\n navIcon: (\n \n ),\n menuBar: ArrayExtensions.hasElements(menuBarSlot) ? menuBarSlot : [],\n search: ArrayExtensions.hasElements(searchSlot) ? searchSlot : [],\n siteOptions: ArrayExtensions.hasElements(siteOptionsSlot) ? siteOptionsSlot : [],\n className: headerClassName,\n HeaderTag: {\n moduleProps: this.props,\n className: classnames(headerClassName),\n 'aria-label': this.props.resources.headerAriaLabel,\n tag: 'header'\n },\n HeaderContainer: {\n className: classnames('ms-header__container')\n },\n HeaderTopBarContainer: {\n className: classnames('ms-header__topbar')\n },\n Divider: {\n className: classnames('ms-header__divider')\n },\n MobileMenuContainer: {\n tag: Modal,\n id: navbarKey,\n className: 'ms-header__mobile-hamburger',\n isOpen: !this.state.mobileMenuCollapsed,\n wrapClassName: 'ms-header__modal',\n toggle: this._toggleNavbar\n },\n MobileMenuHeader: ,\n MobileMenuBodyContainer: {\n tag: ModalBody,\n className: 'ms-header__mobile-hamburger-menu-body'\n },\n MobileMenuLinksContainer: {\n className: 'ms-header__mobile-hamburger-menu-links'\n },\n AccountInfoDropdownParentContainer: {\n className: 'ms-header__account-info'\n },\n AccountInfoDropdownPopoverConentContainer: this.displayName\n ? {\n tag: Popover,\n id: 'myprofilePopover',\n className: 'ms-header__account-info-content',\n placement: 'bottom',\n isOpen: this.state.signinPopoverOpen,\n target: this.popOverRef,\n toggle: this._togglePopover\n }\n : undefined,\n signInLink: this._getSigninButton(user, this.props.resources),\n signOutLink: this._getSignOutButton(user, this.props.resources),\n isOBORequest: MsDyn365.isOboRequest(this.props.context.request),\n switchCustomerLink: this._getSwitchCustomerButton(user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(user, this.props.resources),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) && ,\n currentDistributor: this.isB2BSite && ArrayExtensions.hasElements(currentDistributorSlot) ? currentDistributorSlot : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - Link Index.\n * @returns : Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.myAccountLinks?.[linkIndex]) {\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Get the slot.\n * @param slotName - Name of the slot.\n * @returns The slot.\n */\n private _getSlot(slotName: string): React.ReactNode[] | null {\n const { slots } = this.props;\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\n }\n\n /**\n * Renders the sign in button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n !this.displayName && (\n \n \n {resources.signInLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSwitchCustomerButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SwitchCustomer);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const isOBOAccountSelected =\n MsDyn365.isOboRequest(this.props.context.request) && this.props.context.request.cookies.getAccountSelectionCookie();\n return (\n this.displayName &&\n isOBOAccountSelected && (\n this.props.context.request.cookies.removeAccountSelectionCookie()}\n {...attributes}\n >\n
\n
{format(resources.shoppingAsText, this.customerName)}
\n
{resources.switchCustomerLinkText}
\n
\n \n )\n );\n }\n\n private getBusinessPartnerSelectionUrl(): string | undefined {\n const route = MsDyn365.getUrlSync('businessPartnerSelection', this.props.context.actionContext);\n if (!route || !MsDyn365.msdyn365Commerce.isBrowser) {\n return undefined;\n }\n\n // MsDyn365.getUrlSync persists some params in the route and remove other params.\n // Among the persisted params, we need to remove catalogid.\n const persistedParamToRemove = ['catalogid'];\n const url = new URL(route, window.location.href);\n persistedParamToRemove.forEach(param => url.searchParams.delete(param));\n return url.href;\n }\n\n private _getSigninNotification(\n user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string,\n signUpCustomerNotFoundTitle: string,\n signInCustomerNotAuthorizedTitle: string\n ): string | undefined {\n if (!user?.retailServerErrorCode) {\n return undefined;\n }\n\n const { signUpCustomerNotFound, signUpMultipleCustomerFound, signInCustomerNotAuthorized } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n const accountAuthorizationError = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\n\n if (user?.retailServerErrorCode === notFoundError) {\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\n } else if (user?.retailServerErrorCode === multipleAccountError) {\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\n } else if (user?.retailServerErrorCode === accountAuthorizationError) {\n return signInCustomerNotAuthorized !== undefined ? signInCustomerNotAuthorized : signInCustomerNotAuthorizedTitle;\n }\n return user?.retailServerErrorMessage;\n }\n\n private _getAccountInfoDropdownButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n
\n
{this.displayName}
\n {MsDyn365.isOboRequest(this.props.context.request) && this.customerName && (\n
{format(resources.shoppingAsText, this.customerName)}
\n )}\n
\n \n )\n );\n }\n\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\n const { myAccountLinks } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n if (!this.displayName || !myAccountLinks || !ArrayExtensions.hasElements(myAccountLinks)) {\n return undefined;\n }\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\n payLoad.contentAction.etext = cta.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: cta.ariaLabel,\n className: 'ms-signin-info__account-link-button',\n linkText: cta.linkText,\n linkUrl: cta.linkUrl.destinationUrl,\n openInNewTab: cta.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n\n return (\n \n );\n });\n }\n\n private _toggleNavbar(): void {\n this.setState({\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\n });\n }\n\n private _togglePopover(): void {\n this.setState({\n signinPopoverOpen: !this.state.signinPopoverOpen\n });\n }\n\n private _keydown(event: KeyboardEvent): void {\n if (event.keyCode === KeyCodes.Escape) {\n this.setState({ mobileMenuCollapsed: true });\n }\n }\n}\n\nexport default Header;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartComponent, IAddToCartFailureResult, IAddToCartResources, OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { getUrlSync, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { SalesLine } from '@msdyn365-commerce/retail-proxy';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\n/**\n * The data on which the component should operate.\n */\nexport interface IAddToCartSelectedData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * The resources needed to render a buy selected component.\n */\nexport interface IAddToCartSelectedResources {\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n}\n\n/**\n * Configuration of a buy selected component.\n */\nexport interface IAddToCartSelectedProps extends IComponentProps {\n className: string;\n context: ICoreContext;\n\n resources: IAddToCartSelectedResources;\n\n isIcon?: boolean;\n onError?(result: IAddToCartFailureResult): void;\n}\n\n/**\n * Get the dialog strings.\n * @param props - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getDialogStrings = (props: IAddToCartSelectedProps): IAddToCartResources => {\n return {\n goToCartText: props.resources.quickOrderGridGoToCartText ?? '',\n continueShoppingText: props.resources.quickOrderGridDialogCloseText ?? '',\n closeNotificationLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? '',\n headerItemOneText: props.resources.quickOrderGridSingleItemText ?? '',\n headerItemFormatText: props.resources.quickOrderGridMultiLineItemFormatText ?? '',\n headerLinesFormatText: props.resources.quickOrderGridMultiLinesFormatText ?? '',\n headerMessageText: props.resources.quickOrderGridHeaderMessageText ?? '',\n freePriceText: props.resources.freePriceText ?? '',\n originalPriceText: props.resources.originalPriceText ?? '',\n currentPriceText: props.resources.currentPriceText ?? '',\n addedQuantityText: props.resources.addedQuantityText ?? '',\n buyAgainNotificationTitle: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationTitle ?? '',\n buyAgainNotificationCloseAriaLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? ''\n };\n};\n\n/**\n * Get the dialog strings.\n * @param quickOrder - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getOrderDetails = (quickOrder: QuickOrderTemplate): OrderDetailsProduct[] => {\n const orderDetails: OrderDetailsProduct[] = [];\n for (const quickLine of quickOrder.quickOrderTemplateLines) {\n const quantity = quickLine.productListLine.Quantity;\n const salesLine: SalesLine = {\n Quantity: quantity\n };\n const products = new OrderDetailsProduct(salesLine, quickLine.fullProduct?.ProductDetails);\n orderDetails.push(products);\n }\n return orderDetails;\n};\n\n/**\n * Renders a button which adds given products to the cart.\n * @param props - Configuration of the component.\n * @returns A react element or null if no products were given.\n */\nexport const AddToCartProductListComponent: React.FC = (props: IAddToCartSelectedProps): JSX.Element | null => {\n const {\n data: { quickOrderTemplate }\n } = props;\n\n if (quickOrderTemplate?.quickOrderTemplateLines[0].fullProduct?.ProductDetails === undefined) {\n return null;\n }\n const quantity = quickOrderTemplate.quickOrderTemplateLines[0].productListLine.Quantity;\n const buttonLabel = props.resources.quickOrderGridBuySelectedButtonText;\n const buttonAriaLabel = props.resources.quickOrderGridBuySelectedButtonAriaLabel;\n const dialogStrings: IAddToCartResources = getDialogStrings(props);\n const shouldSkipSiteSettings: boolean = true;\n const orderDetailProducts = getOrderDetails(quickOrderTemplate);\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddToCartProductListComponent } from './add-to-list';\nimport { IQuickOrderGridActionsViewProps, IQuickOrderGridState } from './utilities';\n\n/**\n * Interface for quick order grid action data.\n */\nexport interface IQuickOrderGridActionsData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * Interface for quick order grid action props.\n */\nexport interface IQuickOrderGridActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n moduleClassName: string;\n typeName: string;\n handlers: {\n removeProductList(productListId: string): void;\n onErrorMessage(message: string): void;\n };\n quickOrderGridState: IQuickOrderGridState;\n resources: {\n quickOrderGridDeleteButtonText: string;\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n };\n}\n\n/**\n * Remove ProductList Action.\n * @param props -Quick order grid action props.\n */\nconst removeQuickOrderList = (props: IQuickOrderGridActionsProps): void => {\n const {\n data: { quickOrderTemplate },\n handlers\n } = props;\n const { removeProductList } = handlers;\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- Need to check data.\n if (quickOrderTemplate && quickOrderTemplate.productList.Id) {\n removeProductList(quickOrderTemplate.productList.Id);\n }\n};\n\n/**\n * Get Addtobag Button.\n * @param props -Order template action props.\n * @returns QuickOrderGrid actions view props.\n */\nconst getQuickOrderGridAddToCartDialog = (props: IQuickOrderGridActionsProps): React.ReactNode => {\n const {\n data: { quickOrderTemplate },\n context,\n moduleClassName,\n resources,\n typeName\n } = props;\n const buttonId = 'quick-order-grid';\n return (\n {\n if (result.cartActionResult?.errorDetails?.LocalizedMessage) {\n props.handlers.onErrorMessage(result.cartActionResult.errorDetails.LocalizedMessage);\n }\n }}\n />\n );\n};\n\n/**\n * Remove Quick order grid action.\n * @param props -Quick order grid action props.\n * @returns Remove order template.\n */\nconst removeActionHandler = (props: IQuickOrderGridActionsProps) => () => {\n removeQuickOrderList(props);\n};\n\n/**\n * Quick order grid action view.\n * @param props -Quick Order Grid template action props.\n * @returns QuickOrderGrid actions view props.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name needs to be this.\nexport const QuickOrderGridActionsView = (props: IQuickOrderGridActionsProps): IQuickOrderGridActionsViewProps => {\n const { moduleClassName, quickOrderGridState, resources } = props;\n const { quickOrderGridDeleteButtonText } = resources;\n\n const userMessageNode = quickOrderGridState.topStateMessage ? (\n \n \n {quickOrderGridState.topStateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n addProductListToBag: getQuickOrderGridAddToCartDialog(props),\n removeProductList: (\n \n ),\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderGridDrawerProps } from './quick-order-grid-drawer-props';\n\n/**\n * Interface for drawer state.\n */\nexport interface IQuickOrderGridDrawerState {\n isOpen: boolean;\n}\n\n/**\n * Placement of glyph.\n */\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Grid Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\nexport class QuickOrderGridDrawer extends React.Component {\n private readonly _drawerOpenGlyph: string;\n\n private readonly _drawerCloseGlyph: string;\n\n private readonly _drawerGlyphClass: string;\n\n private _isManuallyToggled: boolean;\n\n public constructor(props: IQuickOrderGridDrawerProps) {\n super(props);\n this._isManuallyToggled = false;\n this.state = { isOpen: props.collapseProps?.isOpen ?? false };\n this._drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n const closeGlyph = this.props.closeGlyph ? this.props.closeGlyph : '';\n if (this.props.isAnimateGlyph) {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : closeGlyph);\n this._drawerCloseGlyph = this._drawerOpenGlyph;\n } else {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : '');\n this._drawerCloseGlyph = classnames(this._drawerGlyphClass, closeGlyph);\n }\n }\n\n /**\n * Method to call on click of drawer button.\n * @param event - Product DeliveryOption List.\n */\n public toggle = (event: React.MouseEvent | React.KeyboardEvent): void => {\n event.preventDefault();\n this._isManuallyToggled = true;\n if (this.props.onToggle) {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n this.props.onToggle(this.state);\n } else {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n }\n };\n\n public shouldComponentUpdate(nextProps: IQuickOrderGridDrawerProps, nextState: IQuickOrderGridDrawerState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const collapseProps: ICollapseProps = { ...this.props.collapseProps };\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this._isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className);\n const drawerButtonClassName = `${this.props.className ? this.props.className : ''}__button`;\n this._isManuallyToggled = false;\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen, drawerClass)}\n \n \n
\n );\n }\n\n private _generateDrawerButtonInnerMarkup(isCollapseState: boolean, drawerClass: string): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n const headingDrawerClass = `${drawerClass}-heading`;\n const descriptionDrawerClass = `${drawerClass}-description`;\n return (\n <>\n

{this.props.moduleHeadingText}

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

\n {ariaLabelProduct}\n

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

\n {ariaLabelQuantity}\n

\n \n
\n );\n\n const addToListNode = (\n
\n \n {ariaLabelAddtoCart}\n \n
\n );\n\n const userMessageNode = quickOrderGridState.stateMessage ? (\n \n \n {quickOrderGridState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToListBtn: addToListNode,\n quantity: quantityNode,\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { QuickOrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order grid.\n */\nexport class QuickOrderGridProduct {\n @observable\n public isSelected: boolean;\n\n public readonly productLine: QuickOrderTemplateLine;\n\n public constructor(productLine: QuickOrderTemplateLine) {\n this.productLine = productLine;\n this.isSelected = false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order grid table header resources.\n */\nexport interface IQuickOrderGridTableHeaderResources {\n quickOrderGridProductNumberText: string;\n quickOrderGridProductText: string;\n quickOrderGridUnitPriceText: string;\n quickOrderGridUnitOfMeasureText: string;\n quickOrderGridQuantityText: string;\n quickOrderGridActionsText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderGridTableHeaderResources;\n}\n\n/**\n * Interface for quick order grid table header component.\n */\nexport interface IQuickOrderGridTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order grid header cells for desktop.\n * @param props -- The quick order grid table header props.\n * @returns The list of cells for quick order grid header component in desktop version.\n */\nconst QuickOrderGridDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderGridProductNumberText}\n {resources.quickOrderGridProductText}\n {resources.quickOrderGridUnitPriceText}\n {resources.quickOrderGridUnitOfMeasureText}\n {resources.quickOrderGridQuantityText}\n {resources.quickOrderGridActionsText}\n \n );\n};\n\n/**\n * Get the quick order grid header cells for mobile.\n * @param props -- The quick order grid table header props.\n * @returns The quick order grid header component in desktop version.\n */\nconst QuickOrderGridMobileHeaderCellsComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderGridProductNumberText}\n \n \n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderGridTableHeaderComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductPrice } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { QuickOrderGridProduct } from '../../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../../utilities';\n\n/**\n * Data required to render each quick order grid row.\n */\nexport interface IQuickOrderGridTableRowData {\n product: QuickOrderGridProduct;\n}\n\n/**\n * Resources for quick order grid table rows.\n */\nexport interface IQuickOrderGridTableRowResources {\n quickOrderGridQuantityMobileText: string;\n quickOrderGridProductDimensionsSeparator: string;\n quickOrderGridViewDetailsButtonText: string;\n quickOrderGridViewDetailsButtonAriaLabel: string;\n quickOrderGridRemoveItemButtonAriaLabel: string;\n quickOrderGridInputQuantityAriaLabel: string;\n quickOrderGridDecrementButtonAriaLabel: string;\n quickOrderGridIncrementButtonAriaLabel: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n productListLine: ProductListLine;\n price?: ProductPrice;\n moduleId: string;\n moduleTypeName: string;\n min: number;\n max: number;\n quantity: number;\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderGridTableRowResources;\n index: number;\n callbacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * The default image settings for quick order grid table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order grid row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderGridTableRowProductImageComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const fallbackImageUrl = getFallbackImageUrl(\n product?.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
\n \n
\n );\n};\n\nlet setShowPreviousActions: React.Dispatch> | undefined;\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderProductPrice = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const { context, moduleId, moduleTypeName, resources } = props;\n const price = props.price;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderUnitOfMeasure = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const price = props.price;\n\n if (price) {\n return (\n
\n {StringExtensions.isNullOrEmpty(props.productListLine.UnitOfMeasure) || price.UnitOfMeasure}\n
\n );\n }\n return null;\n};\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (\n orderTemplateLineId: string | undefined,\n quantity: number,\n props?: IQuickOrderGridTableRowProps | undefined\n ) => boolean,\n itemKey: string | undefined,\n props: IQuickOrderGridTableRowProps\n) => (newValue: number) => {\n onChangeQuantity(itemKey, newValue, props);\n return true;\n};\n\n/**\n * On Change function.\n * @param onRemoveItem -On change quantity function.\n * @param quickOrderGridProductKey -QuickOrderGridp Product.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onRemoveHandler = (\n onRemoveItem: (quickOrderGridProduct: QuickOrderGridProduct, props?: IQuickOrderGridTableRowProps | undefined) => void,\n quickOrderGridProductKey: QuickOrderGridProduct,\n props: IQuickOrderGridTableRowProps\n) => () => {\n onRemoveItem(quickOrderGridProductKey, props);\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderGridExtraActionsPopupComponent: React.FC = (\n props: IQuickOrderGridTableRowProps\n): JSX.Element | null => {\n const {\n resources: { quickOrderGridViewDetailsButtonAriaLabel, quickOrderGridViewDetailsButtonText }\n } = props;\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const [shouldShowActions, setShowActions] = useState(false);\n let productUrl = '';\n if (product === undefined) {\n return null;\n }\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n const onClickViewDetails = React.useCallback(() => {\n if (MsDyn365.isBrowser) {\n window.location.href = productUrl;\n }\n }, [productUrl]);\n\n const toggle = React.useCallback(() => {\n const shouldShowActionsNewValue = !shouldShowActions;\n if (shouldShowActionsNewValue) {\n if (setShowPreviousActions) {\n setShowPreviousActions(false);\n }\n setShowActions(shouldShowActionsNewValue);\n setShowPreviousActions = setShowActions;\n } else {\n setShowPreviousActions = undefined;\n setShowActions(shouldShowActionsNewValue);\n }\n }, [shouldShowActions, setShowActions]);\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n const actionsContainerClassName = `${className}__actions-container`;\n\n return (\n
\n \n \n {props.resources.quickOrderGridRemoveItemButtonAriaLabel}\n \n
\n )}\n \n );\n};\n\n/**\n * Renders quick order grid table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for desktop view.\n */\nexport const QuickOrderGridDesktopTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n if (product !== undefined) {\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
\n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderGridProductDimensionsSeparator)}\n \n
\n \n {renderProductPrice(props)}\n {renderUnitOfMeasure(props)}\n \n \n \n \n \n \n \n );\n }\n\n return null;\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for mobile view.\n */\nexport const QuickOrderGridMobileTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n if (product !== undefined) {\n return (\n <>\n \n \n \n \n
\n {product.RecordId}\n \n \n \n
\n \n \n \n \n \n );\n }\n return null;\n};\n\n/**\n * Quick order table row component.\n * @param props - Configuration of the component.\n * @returns React node for the row.\n */\nexport const QuickOrderGridTableRowComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const rowClassName = `${props.className}__row`;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n let headerCells: JSX.Element;\n if (isMobileView) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IComponent, IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport React from 'react';\n\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { QuickOrderGridProduct } from '../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../utilities';\nimport {\n IQuickOrderGridTableHeaderResources,\n IQuickOrderGridTableRowResources,\n QuickOrderGridTableHeaderComponent,\n QuickOrderGridTableRowComponent\n} from './components';\n\n/**\n * Quick order table data interface.\n */\ninterface IQuickOrderGridTableData {\n quickOrderGridProducts: QuickOrderGridProduct[];\n isOrderQuantityLimitsFeatureEnabled: boolean;\n}\n\n/**\n * Quick order table resources.\n */\nexport interface IQuickOrderGridTableResources extends IQuickOrderGridTableHeaderResources, IQuickOrderGridTableRowResources {}\n\n/**\n * Quick order table props.\n */\nexport interface IQuickOrderGridTableProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n moduleId: string;\n moduleTypeName: string;\n\n resources: IQuickOrderGridTableResources;\n isMobileView: boolean;\n imageSettings?: IImageSettings;\n callBacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * Quick order table component.\n */\nexport interface IQuickOrderGridTableComponent extends IComponent {}\n\n/**\n * The quick order table.\n * @param props -- The quick order table props.\n * @returns The quick order table element.\n */\nexport const QuickOrderGridTableComponent: React.FC = (props: IQuickOrderGridTableProps) => {\n const [isMobile, setIsMobile] = React.useState(props.isMobileView);\n const quickOrderGridProducts = props.data.quickOrderGridProducts;\n const isOrderQuantityLimitsFeatureEnabled = props.data.isOrderQuantityLimitsFeatureEnabled;\n\n /**\n * Update the view port.\n */\n const updateViewport = () => {\n setIsMobile(props.isMobileView);\n };\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', updateViewport);\n }\n\n const headerClassName = `${props.className}__header`;\n const rowClassName = `${props.className}__row`;\n\n return (\n \n \n {quickOrderGridProducts.map((quickOrderProduct, index) => {\n let quantity = quickOrderProduct.productLine.productListLine.Quantity!;\n const product = quickOrderProduct.productLine.fullProduct;\n let min: number = 1;\n let max: number = 10;\n const behavior = product?.ProductDetails?.Behavior;\n if (isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(behavior)) {\n if (behavior.MinimumQuantity && behavior.MinimumQuantity > 0) {\n min = behavior.MinimumQuantity;\n }\n if (behavior.MaximumQuantity && behavior.MaximumQuantity > 0) {\n max = behavior.MaximumQuantity;\n }\n quantity = Math.max(quantity, min);\n }\n const price = quickOrderProduct.productLine.fullProduct?.ProductPrice;\n return (\n \n );\n })}\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getProductConfigure,\n IProductDimensionCallbacks,\n IProductDimensionConfigureResources,\n IProductDimensionConfigureViewProps\n} from '@msdyn365-commerce/components';\nimport {\n ProductDimension,\n ProductDimensionType,\n ProductDimensionValue,\n ProductListsDataActions,\n ProductListType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n addItemToProductListAction,\n AddItemToProductListInput,\n ArrayExtensions,\n createProductList,\n CreateProductListInput,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getScanResult,\n GetScanResultInput,\n getSelectedVariant,\n IDimensionForSelectedVariant,\n IPromiseQueue,\n ObjectExtensions,\n QuickOrderTemplate,\n QuickOrderTemplateLine,\n SelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ActiveProductListInput } from './actions';\nimport {\n EcommerceQuantityLimitConfigurationsFeatureName,\n IQuickOrderGridActionsProps,\n IQuickOrderGridActionsViewProps,\n IQuickOrderGridRowCallbacks,\n IQuickOrderGridState,\n QuickOrderGridActionsView,\n QuickOrderGridDrawer,\n QuickOrderGridFormComponent,\n QuickOrderGridProduct,\n QuickOrderGridTableComponent,\n RetailDefaultOrderQuantityLimitsFeatureName\n} from './components';\nimport { IQuickOrderGridData } from './quick-order-grid.data';\nimport { IQuickOrderGridProps, IQuickOrderGridResources } from './quick-order-grid.props.autogenerated';\n\n/**\n * QuickOrder Grid View props.\n */\nexport interface IQuickOrderGridViewProps extends IQuickOrderGridProps {\n header: JSX.Element;\n actions?: INodeProps;\n isB2bCustomer?: boolean;\n isQuickOrderGridFormExpanded: boolean;\n contentProps: INodeProps;\n drawer: INodeProps;\n loading?: React.ReactNode;\n quickOrderGridForm: INodeProps;\n quickOrderGridFormProductContent: INodeProps;\n quickOrderGridFormMsgContent: INodeProps;\n quickOrderGridProps: IModuleProps;\n form: React.ReactNode;\n configure?: IProductDimensionConfigureViewProps;\n isMobileView: boolean;\n container?: JSX.Element;\n orderActions?: IQuickOrderGridActionsViewProps | null;\n bulkPurchase?: React.ReactNode;\n}\n\n/**\n * QuickOrder Grid View port.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * QuickOrderGrid component.\n * @extends {React.PureComponent>}\n */\nclass QuickOrderGrid extends React.PureComponent, IQuickOrderGridState> {\n private readonly _productTextInput: React.RefObject;\n\n private readonly _quantityInput: React.RefObject;\n\n private readonly _waitTime: number = 500;\n\n private readonly _dimensionUpdateQueueMaxLength: number = 2;\n\n private readonly _errorCssClass: string = 'danger';\n\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n\n private readonly _quickOrderGridFormClass: string;\n\n private readonly _quickOrderGridFormProductContent: string;\n\n private readonly _quickOrderGridFormMsgContent: string;\n\n private readonly _telemetryContent: ITelemetryContent;\n\n private readonly _dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(this._dimensionUpdateQueueMaxLength);\n\n private _dimensions: { [id: number]: string } = {};\n\n private _initializedDimensions: Set = new Set();\n\n private readonly _cssClassNameConfigure: string = 'ms-quick-order_grid__content-form-main';\n\n private readonly _className: string = 'ms-quick-order-grid';\n\n // @ts-expect-error: Debouce needs to be used as type.\n private _cancellabelDebounce: debounce;\n\n private _isOrderQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isChannelLimitsFeatureEnabled: boolean = false;\n\n private _applyDefaultOrderSettingsForCartLine: boolean = false;\n\n private readonly _quickOrderGridCallbacks: IProductDimensionCallbacks = {\n initializeDimension: (initializedDimension: string): void => {\n if (initializedDimension) {\n this._initializedDimensions.add(initializedDimension);\n }\n },\n /**\n * Get Dropdown name.\n * @param selectedDimensionId - Dimension type.\n * @param selectedDimensionValueId - Resources.\n * @returns Dropdown name.\n */\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this._dimensions[selectedDimensionId] = selectedDimensionValueId;\n // Only trigger _updateDimensions when all dimensions are initialized\n if (this._initializedDimensions.size === this.state.productDimensions?.length) {\n return this._dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: string) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw new Error(error);\n }\n });\n }\n },\n\n /**\n * Get Dropdown name.\n * @param dimensionType - Dimension type.\n * @param resources - Resources.\n * @returns Dropdown name.\n */\n getDropdownName: (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n\n /**\n * Method to call on dimension change.\n * @param isUpdatingDimension - Flag to update dimension.\n */\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n }\n };\n\n private readonly _quickOrderGridRowCallbacks: IQuickOrderGridRowCallbacks = {\n /**\n * Method to call remove button.\n * @param line - Grid row product.\n */\n onRemoveItem: (line: QuickOrderGridProduct): void => {\n this._removeItemRowFromTable(line.productLine);\n },\n\n /**\n * Method to call on change quantity button.\n * @param productListLineId - Grid row product list line id.\n * @param quantity - Product quantity.\n * @returns - Falg to get confirmation for action.\n */\n onChangeQuantity: (productListLineId: string | undefined, quantity: number): boolean => {\n return this._changeRowQuantity(productListLineId, quantity);\n }\n };\n\n public constructor(props: IQuickOrderGridProps) {\n super(props);\n this._productTextInput = React.createRef();\n this._quantityInput = React.createRef();\n\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.state = {\n isQuickOrderGridFormExpanded: false,\n min: 0,\n max: 10,\n quantity: 1,\n productResponse: undefined,\n productDimensions: undefined,\n productDimensionErrorState: {\n configureErrors: {}\n },\n isMobile: this.isMobile,\n products: [],\n isUpdatingDimension: false,\n productListId: ''\n };\n\n this._quickOrderGridFormClass = 'ms-quick-order-grid__content-form';\n this._quickOrderGridFormProductContent = 'ms-quick-order-grid__content-form-main';\n this._quickOrderGridFormMsgContent = 'ms-quick-order-grid__content-form-msg';\n\n this._isOrderQuantityLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName)\n ?.IsEnabled ?? false;\n\n this._isChannelLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === EcommerceQuantityLimitConfigurationsFeatureName)\n ?.IsEnabled ?? false;\n\n const cartConfiguration = this.props.data.cartConfiguration;\n this._applyDefaultOrderSettingsForCartLine = cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false;\n }\n\n @computed public get isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public render(): JSX.Element | null {\n const { data } = this.props;\n if (!data.customerInformation.result) {\n return null;\n }\n const quickOrderTemplate = data.quickOrderTemplate;\n\n if (quickOrderTemplate?.result !== undefined) {\n this.setState({\n products: quickOrderTemplate.result.quickOrderTemplateLines,\n productListId: quickOrderTemplate.result.productList.Id\n });\n }\n const { className = '', maxQuantity } = this.props.config;\n const customerInfo = this.props.data.customerInformation.result;\n const {\n quickOrderGridModuleHeading,\n quickOrderGridModuleDescription,\n quickOrderGridAddtogrid,\n quickOrderGridProductQuantityInputLabel,\n quickOrderGridProductInputLabel,\n quickOrderGridProductDimensionTypeColor,\n quickOrderGridProductDimensionTypeConfiguration,\n quickOrderGridSelectDimensionFormatString,\n quickOrderGridProductDimensionTypeSize,\n quickOrderGridProductDimensionTypeStyle,\n quickOrderGridProductDimensionTypeAmount,\n quickOrderGridModulePageHeading\n } = this.props.resources;\n\n const productConfigureResources: IProductDimensionConfigureResources = {\n selectDimensionFormatString: quickOrderGridSelectDimensionFormatString,\n productDimensionTypeColor: quickOrderGridProductDimensionTypeColor,\n productDimensionTypeConfiguration: quickOrderGridProductDimensionTypeConfiguration,\n productDimensionTypeSize: quickOrderGridProductDimensionTypeSize,\n productDimensionTypeStyle: quickOrderGridProductDimensionTypeStyle,\n productDimensionTypeAmount: quickOrderGridProductDimensionTypeAmount\n };\n\n const { isQuickOrderGridFormExpanded, productDimensionErrorState, productResponse, productDimensions } = this.state;\n\n const headerClassName = `${this._className}__header`;\n\n const header = (\n
\n \n
\n );\n\n const viewProps: IQuickOrderGridViewProps = {\n ...(this.props as IQuickOrderGridProps),\n\n quickOrderGridProps: { className: classnames('ms-quick-order-grid', className), moduleProps: this.props },\n contentProps: { className: 'ms-quick-order-grid__content' },\n isB2bCustomer: customerInfo?.IsB2b,\n header,\n actions: {\n className: `${this._className}-action-bar`,\n tag: 'div'\n },\n drawer: {\n tag: QuickOrderGridDrawer,\n className: `${this._className}__drawer`,\n collapseProps: { isOpen: this.state.isQuickOrderGridFormExpanded },\n moduleHeadingText: quickOrderGridModuleHeading,\n moduleDescriptionText: quickOrderGridModuleDescription,\n requestContext: this.props.context.request,\n telemetryContent: this._telemetryContent\n },\n bulkPurchase: this._renderBulkPurchase(),\n quickOrderGridForm: {\n className: `${this._quickOrderGridFormClass} ${isQuickOrderGridFormExpanded ? 'qo-show' : 'qo-hide'}`\n },\n quickOrderGridFormProductContent: {\n className: this._quickOrderGridFormProductContent\n },\n quickOrderGridFormMsgContent: {\n className: this._quickOrderGridFormMsgContent\n },\n form: QuickOrderGridFormComponent({\n productTextInput: this._productTextInput,\n quantityTextInput: this._quantityInput,\n isAddtoListDisabled: !productResponse,\n ariaLabelAddtoCart: quickOrderGridAddtogrid,\n ariaLabelProduct: quickOrderGridProductInputLabel,\n ariaLabelQuantity: quickOrderGridProductQuantityInputLabel,\n maxChars: 50,\n minQuantity: this.state.min ?? 0,\n maxQuantity: this.state.max ?? maxQuantity,\n moduleClassName: this._className,\n quickOrderGridState: this.state,\n handleInputChange: this._handleInputChange,\n handleQuantityChange: this._handleQuantityChange,\n handleAddProductListClick: this._addItemToProductListLine\n }),\n configure:\n productResponse && productDimensions\n ? getProductConfigure(\n this._cssClassNameConfigure,\n this.props.context,\n this.props.friendlyName,\n this.props.telemetry,\n quickOrderGridSelectDimensionFormatString,\n productConfigureResources,\n this._quickOrderGridCallbacks,\n productResponse,\n productDimensions,\n productDimensionErrorState\n )\n : undefined,\n isQuickOrderGridFormExpanded: this.state.isQuickOrderGridFormExpanded,\n isMobileView: this.state.isMobile,\n container: ArrayExtensions.hasElements(this.state.products) ? this._renderListContainer() : undefined,\n orderActions: this._renderQuickOrderGridActions(quickOrderTemplate?.result)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderQuickOrderGridActions(quickOrderTemplate: QuickOrderTemplate | undefined): IQuickOrderGridActionsViewProps | null {\n const { typeName, context, resources } = this.props;\n const {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n } = resources;\n if (ArrayExtensions.hasElements(quickOrderTemplate?.quickOrderTemplateLines)) {\n const quickOrderGridActions: IQuickOrderGridActionsProps = {\n data: { quickOrderTemplate },\n moduleClassName: this._className,\n id: 'quick-order-grid',\n typeName,\n context,\n handlers: {\n removeProductList: this._removeProductList,\n onErrorMessage: (message: string) =>\n this.setState({\n topStateMessage: {\n messageText: message,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n })\n },\n quickOrderGridState: this.state,\n resources: {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n }\n };\n\n return QuickOrderGridActionsView(quickOrderGridActions);\n }\n return null;\n }\n\n /**\n * Renders bulk purchase module.\n * @returns Bulk purchase module react node.\n */\n private _renderBulkPurchase(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!ArrayExtensions.hasElements(this.props.slots.bulkPurchaseSlots)) {\n return null;\n }\n\n const containerClass = `${this._className}__bulk-purchase`;\n return (\n
\n {React.cloneElement(this.props.slots.bulkPurchaseSlots[0] as React.ReactElement, {\n productDimensions: this.state.productDimensions\n })}\n
\n );\n }\n\n /**\n * Render list container.\n * @returns JSX element.\n */\n private _renderListContainer(): JSX.Element {\n const containerClass = `${this._className}__table-content`;\n return
{this._renderQuickOrderTable(this._className)}
;\n }\n\n /**\n * Initial the products on quick order.\n * @returns List of quick order products or undefined.\n */\n private _initQuickOrderGridProducts(): QuickOrderGridProduct[] {\n const products: QuickOrderTemplateLine[] = this.state.products;\n\n const quickOrderGridProduct: QuickOrderGridProduct[] = products.map((product: QuickOrderTemplateLine) => {\n return new QuickOrderGridProduct(product);\n });\n\n return ArrayExtensions.validValues(quickOrderGridProduct);\n }\n\n /**\n * Method to call on clear button.\n */\n private readonly _removeProductList = () => {\n const { context, data, telemetry, resources } = this.props;\n const { quickOrderTemplate } = data;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && quickOrderTemplate && quickOrderTemplate.result) {\n ProductListsDataActions.deleteAsync({ callerContext: context.actionContext }, quickOrderTemplate.result.productList)\n .then(() => {\n window.location.reload();\n })\n .catch((error: string) => {\n telemetry.warning('[quick-order-grid] Unable to delete product list.');\n telemetry.error(error);\n this._updateStatusState(\n resources.quickOrderGridDeleteProductListFailedText,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n });\n } else {\n telemetry.warning('[quick-order-grid] Failed to delete product list. Product List was not found');\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param className - Class name.\n * @returns JSX element.\n */\n private _renderQuickOrderTable(className: string): JSX.Element {\n const tableClassName = `${className}__table-list`;\n\n return (\n \n );\n }\n\n private _updateQuantitiesInState(product: SimpleProduct): void {\n const min: number = this._getMinQuantityForCartLineItem(this._isOrderQuantityLimitsFeatureEnabled, product);\n const max: number = this._getMaxQuantityForCartLineItem(\n this._isChannelLimitsFeatureEnabled || this._isOrderQuantityLimitsFeatureEnabled,\n product\n );\n let quantity: number = this._getQuantity(\n this._isOrderQuantityLimitsFeatureEnabled,\n this._applyDefaultOrderSettingsForCartLine,\n product\n );\n quantity = Math.max(quantity, min);\n\n this.setState({\n min,\n max,\n quantity\n });\n }\n\n private _getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isOrderQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MinimumQuantity &&\n product.Behavior.MinimumQuantity > 0\n ) {\n return product.Behavior.MinimumQuantity;\n }\n\n return 1;\n }\n\n private _getMaxQuantityForCartLineItem(isQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MaximumQuantity &&\n product.Behavior.MaximumQuantity > 0\n ) {\n return product.Behavior.MaximumQuantity;\n }\n\n return this.props.context.app.config.maxQuantityForCartLineItem;\n }\n\n /**\n * Retrieves the value of the IgnoreOrderSettings property from the cart configuration.\n * If the property is not present, it defaults to false.\n * @returns {boolean} The value of the IgnoreOrderSettings property.\n */\n private _getIgnoreOrderSettings(): boolean {\n const cartConfiguration = this.props.data.cartConfiguration;\n return !(cartConfiguration?.result?.IgnoreOrderSettings ?? false);\n }\n\n private _getQuantity(\n isOrderQuantityLimitsFeatureEnabled: boolean,\n applyDefaultOrderSettingsForCartLine: boolean,\n product: SimpleProduct\n ): number {\n let defaultQuantity = 1;\n\n if (!isOrderQuantityLimitsFeatureEnabled || !applyDefaultOrderSettingsForCartLine) {\n return defaultQuantity;\n }\n\n if (product?.Behavior?.DefaultQuantity && product.Behavior.DefaultQuantity > 0) {\n defaultQuantity = product.Behavior.DefaultQuantity;\n }\n\n return defaultQuantity;\n }\n\n /**\n * Method to called on product input change.\n * @param query - Product inventory info.\n */\n private readonly _handleInputChange = (query: string): void => {\n const queryMinLength = 4;\n if (!query || query.length > queryMinLength) {\n this.setState({ quantity: 0, productDimensions: [], productResponse: undefined });\n this._updateStatusState('', '', '', false);\n }\n if (this._cancellabelDebounce) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call -- existing code.\n this._cancellabelDebounce.cancel();\n }\n\n const { telemetry, context } = this.props;\n const zeroNumber = 0;\n if (!StringExtensions.isNullOrEmpty(query)) {\n this._cancellabelDebounce = debounce(() => {\n getScanResult(\n new GetScanResultInput(\n context.actionContext.requestContext.apiSettings,\n query,\n context.actionContext.requestContext.apiSettings.channelId\n ),\n this.props.context.actionContext\n )\n .then(results => {\n this.setState({\n productResponse: results?.Product,\n productDimensions: results?.ProductDimensionFull,\n isQuickOrderGridFormExpanded: true\n });\n if (results?.Product) {\n this._updateQuantitiesInState(results.Product);\n }\n })\n .catch((error: Error) => {\n telemetry.exception(error);\n telemetry.debug('Unable to get scan results');\n });\n }, this._waitTime);\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- Existing code.\n this._cancellabelDebounce();\n }, zeroNumber);\n this.setState({ isQuickOrderGridFormExpanded: true });\n } else {\n this.setState({ productResponse: undefined, isQuickOrderGridFormExpanded: true });\n }\n };\n\n /**\n * Method to called on quantity change.\n * @param value - Quantity value.\n */\n private readonly _handleQuantityChange = (value: string): void => {\n let currentValue = Number.parseInt(value, 10);\n const inputElement = this._quantityInput.current instanceof HTMLInputElement && this._quantityInput.current;\n const quantityChangeDebounceTimeout = 200;\n let minimumQuantity = 0;\n let needToUpdateUIValue: boolean = false;\n if (this._isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(this.state.productResponse?.Behavior)) {\n const behavior = this.state.productResponse!.Behavior;\n minimumQuantity = behavior?.MinimumQuantity ?? 0;\n const newCurrentValue = Math.max(currentValue, minimumQuantity);\n if (newCurrentValue !== currentValue) {\n needToUpdateUIValue = true;\n }\n currentValue = newCurrentValue;\n }\n\n this.setState({ quantity: currentValue }, () => {\n debounce(() => {\n if (needToUpdateUIValue && !Number.isNaN(this.state.quantity) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.value = currentValue.toString();\n }\n }, quantityChangeDebounceTimeout)();\n });\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionType - Dimension Type.\n * @param resources - String resources.\n * @returns Dropdwon label.\n */\n private readonly _getDropdownName = (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n const isGiftCard = this.state.productResponse?.IsGiftCard;\n\n switch (dimensionType) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n /**\n * Method to update dimension and product in UI.\n */\n private readonly _updateDimensions = async (): Promise => {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { productDimensions, productResponse } = this.state;\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n if (!productResponse || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this._dimensions };\n this.setState({ isUpdatingDimension: true });\n\n // Step 1: Update state to indicate which dimensions are selected\n if (this.state.productDimensionErrorState.otherError) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const clearOtherErrorState = { ...this.state.productDimensionErrorState };\n clearOtherErrorState.otherError = undefined;\n this.setState({ productDimensionErrorState: clearOtherErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const dimensionKey of Object.keys(dimensionsToUpdate)) {\n if (this.state.productDimensionErrorState.configureErrors[dimensionKey]) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors[dimensionKey] = undefined;\n\n this.setState({ productDimensionErrorState: errorState });\n }\n }\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension.DimensionValue;\n });\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n // eslint-disable-next-line no-async-promise-executor -- existing code\n const selectedProduct = new Promise(async resolve => {\n const newProduct = await getSelectedVariant(\n new SelectedVariantInput(\n productResponse.MasterProductId ? productResponse.MasterProductId : productResponse.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n if (newProduct) {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n ),\n actionContext\n );\n }\n\n resolve(newProduct);\n });\n\n const variantProduct = await selectedProduct;\n this.setState({ productResponse: variantProduct !== null ? variantProduct : undefined });\n };\n\n /**\n * Method to get updated dimension value.\n * @param productDimensionFull - Product dimension full.\n * @param newValueId - New Dimension value.\n * @returns Dimension Value.\n */\n private readonly _updateDimensionValue = (\n productDimensionFull: IDimensionForSelectedVariant,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionTypeValue - Dimension Type.\n * @param resources - String resources.\n * @param isGiftCard - Flag to check if its a giftcard product.\n * @returns Dropdwon error label.\n */\n private readonly _getDimensionErrorString = (\n dimensionTypeValue: number,\n resources: IQuickOrderGridResources,\n isGiftCard?: boolean\n ): string => {\n const amountErrorMessage = resources.quickOrderGridproductDimensionTypeAmountErrorMessage;\n\n switch (dimensionTypeValue) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.quickOrderGridproductDimensionTypeColorErrorMessage;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.quickOrderGridproductDimensionTypeConfigurationErrorMessage;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.quickOrderGridproductDimensionTypeSizeErrorMessage;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? amountErrorMessage : resources.quickOrderGridproductDimensionTypeStyleErrorMessage;\n default:\n return '';\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param productResponse - Simple Product.\n * @param quantity - Product Quantity.\n * @returns Flag to validate productlistline.\n */\n private readonly _validateCart = (productResponse: SimpleProduct, quantity: number): boolean => {\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- existing code\n const missingDimensions = productResponse.Dimensions?.filter(\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\n );\n const minimumQuantity = 0;\n if (ArrayExtensions.hasElements(missingDimensions)) {\n const userMessage = this._getConfigureErrors(missingDimensions, false);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code\n if (this.state.productDimensionErrorState.configureErrors) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors = userMessage;\n\n this.setState({ productDimensionErrorState: errorState });\n return false;\n }\n }\n\n if (quantity <= minimumQuantity) {\n const resources = this.props.resources;\n this._updateStatusState(resources.quickOrderGridWrongQuantityErrorMsg, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n }\n return true;\n };\n\n /**\n * Initial the products on quick order.\n * @param result - Simple Product.\n * @param isGiftCard - Product Quantity.\n * @returns Flag to validate cart.\n */\n private _getConfigureErrors(\n result: ProductDimension[] | undefined,\n isGiftCard?: boolean\n ): { [configureId: string]: string | undefined } {\n if (!result) {\n return {};\n }\n const dimensions: { [configureId: string]: string | undefined } = {};\n const resources = this.props.resources;\n for (const dimension of result) {\n dimensions[dimension.DimensionTypeValue] = this._getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\n }\n return dimensions;\n }\n\n /**\n * Method to call on quantity change in row.\n * @param itemKey - Product Key.\n * @param quantity - Product quantity.\n * @returns Flag to update status.\n */\n private readonly _changeRowQuantity = (itemKey: string | undefined, quantity: number): boolean => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n if (quickOrderTemplate?.result) {\n const quickOrderTemplateLinesData = quickOrderTemplate.result.quickOrderTemplateLines;\n if (ArrayExtensions.hasElements(quickOrderTemplateLinesData)) {\n const orderLineIndex = quickOrderTemplateLinesData.findIndex(\n (lines: QuickOrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...quickOrderTemplateLinesData[orderLineIndex] };\n if (quickOrderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return true;\n }\n const previousQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n ProductListsDataActions.updateProductListLinesAsync(\n { callerContext: context.actionContext },\n quickOrderTemplate.result.productList.Id,\n [line.productListLine]\n )\n .then(list => {\n if (ArrayExtensions.hasElements(list)) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n quickOrderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...quickOrderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedProductList = { ...quickOrderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveProductListInput(context.actionContext.requestContext),\n updatedProductList\n );\n return true;\n }\n\n return false;\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable to update product quantity.');\n telemetry.error(error.message);\n const userMessage = 'Failed to update quantity value.';\n newProductListLine.productListLine.Quantity = previousQuantity;\n this._updateStatusState(userMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n });\n }\n return false;\n }\n\n return false;\n };\n\n /**\n * Method to call on remove item from table.\n * @param line - Order Template Line.\n */\n private readonly _removeItemRowFromTable = (line: QuickOrderTemplateLine): void => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n\n if (quickOrderTemplate?.result) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken) {\n ProductListsDataActions.removeProductListLinesAsync(\n { callerContext: context.actionContext },\n line.productListLine.ProductListId!,\n [line.productListLine]\n )\n .then(() => {\n window.location.reload(false);\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable remove item from product list grid');\n telemetry.error(error.message);\n });\n } else {\n telemetry.warning('[quick-order-grid] Unable remove items from product list grid user token was not found');\n }\n }\n };\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n /**\n * Method to call on add item from form.\n */\n private readonly _addItemToProductListLine = async (): Promise => {\n const {\n context: { actionContext },\n resources,\n telemetry\n } = this.props;\n const {\n quickOrderGridAddedToGridSuccessMessage,\n quickOrderGridAddedToGridFailureMessage,\n quickOrderGridAddedToGridDuplicateError\n } = resources;\n const { productResponse, quantity, productListId } = this.state;\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n\n this._updateStatusState('', '', '', false);\n\n if (productResponse !== undefined && this._validateCart(productResponse, quantity)) {\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n await this._createProductList();\n }\n\n if (StringExtensions.isNullOrWhitespace(this.state.productListId)) {\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return;\n }\n const input = new AddItemToProductListInput(\n this.state.productListId,\n productResponse.RecordId,\n quantity,\n productResponse.DefaultUnitOfMeasure ?? 'ea',\n this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogId\n );\n\n await addItemToProductListAction(input, actionContext)\n .then(result => {\n if (result.ProductListId) {\n this._updateStatusState(quickOrderGridAddedToGridSuccessMessage, 'success', 'fas fa-check', true);\n window.location.reload();\n this.setState({});\n }\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error trying to Update Grid Line from the quick order grid');\n if (error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n this._updateStatusState(\n quickOrderGridAddedToGridDuplicateError,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n } else {\n this._updateStatusState(\n quickOrderGridAddedToGridFailureMessage,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n }\n });\n }\n };\n\n /**\n * Method to create product list.\n * @returns - ProductListId.\n */\n private _createProductList = async (): Promise => {\n const {\n context: { actionContext },\n telemetry,\n resources\n } = this.props;\n const { productListId } = this.state;\n const { quickOrderGridAddedToGridFailureMessage } = resources;\n\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n const input = new CreateProductListInput('', ProductListType.QuickOrder);\n\n await createProductList(input, actionContext)\n .then(result => {\n if (!StringExtensions.isNullOrWhitespace(result.Id)) {\n this.setState({ productListId: result.Id });\n return result.Id;\n }\n return '';\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error on creating productlist from quick order grid');\n telemetry.error(error.message);\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return '';\n });\n return '';\n }\n\n return productListId;\n };\n\n /**\n * Method to create product list.\n * @param messageText - Message Text.\n * @param statusCssString - Css class names.\n * @param messageGlyph - Glyph string.\n * @param isOpen - Flag to show.\n */\n private readonly _updateStatusState = (messageText: string, statusCssString: string, messageGlyph: string, isOpen: boolean): void => {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Showing user message in Form component.\n stateMessage: {\n messageText,\n statusCssString,\n messageGlyph,\n isOpen\n }\n });\n };\n}\nexport default QuickOrderGrid;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IErrorState } from '@msdyn365-commerce/components';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IDimensionForSelectedVariant, OrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { QuickOrderGridProduct } from './quick-order-grid-product';\n\n/**\n * QuickOrderGrid state message Interface.\n */\nexport interface IQuickOrderGridStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * QuickOrderGrid state Interface.\n */\nexport interface IQuickOrderGridState {\n isQuickOrderGridFormExpanded: boolean;\n isUpdatingDimension?: boolean;\n productResponse: SimpleProduct | undefined;\n productDimensions: IDimensionForSelectedVariant[] | undefined;\n min: number | undefined;\n max: number | undefined;\n quantity: number;\n stateMessage?: IQuickOrderGridStateMessage;\n topStateMessage?: IQuickOrderGridStateMessage;\n productDimensionErrorState: IErrorState;\n isMobile: boolean;\n products: OrderTemplateLine[];\n productListId: string;\n}\n\n/**\n * QuickOrder Grid Row view.\n */\nexport interface IQuickOrderGridRowViewModel extends OrderTemplateLine {\n isChecked: boolean;\n}\n\n/**\n * Interface for quick order callbacks.\n */\nexport interface IQuickOrderGridRowCallbacks {\n onRemoveItem(line: QuickOrderGridProduct): void;\n onChangeQuantity(orderTemplateLineId: string | undefined, quantity: number): boolean;\n}\n\n/**\n * Interface for quick order grid action view props.\n */\nexport interface IQuickOrderGridActionsViewProps {\n addProductListToBag: React.ReactNode;\n removeProductList?: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\nexport const RetailDefaultOrderQuantityLimitsFeatureName: string = 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature';\n\nexport const EcommerceQuantityLimitConfigurationsFeatureName: string =\n 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { DimensionTypes } from '@msdyn365-commerce-modules/retail-actions';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * Types of product refiner values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerValueDataTypeValue {\n /**\n * Range slider is used for selections like price.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Range = 1,\n\n /**\n * Range input is a different way to specify ranges and can be expressed with input boxes\n * as well as a set of discrete single-select type values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n RangeInput = 4,\n\n /**\n * This is a discrete list item, either multi-select or single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n List = 5,\n\n /**\n * Boolean types allows only single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Boolean = 6\n}\n\n/**\n * Types of product refiners.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerTypeValue {\n /**\n * Refiner values are single-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Single = 0,\n\n /**\n * Refiner values are multi-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Multi = 1\n}\n\n/**\n * ProductRefinerSource enum type.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerSource {\n /**\n * The None member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n None = 0,\n\n /**\n * The Attribute member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Attribute = 1,\n\n /**\n * The Category member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Category = 2,\n\n /**\n * The Price member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Price = 3,\n\n /**\n * The Rating member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Rating = 4\n}\n\nexport interface IRefineItemData {\n sourceValue?: number;\n swatchImageUrl?: string;\n swatchColorHexCode?: string;\n refinerItemId: number;\n dataTypeValue?: number;\n name: string;\n label: string;\n count?: number;\n isChecked: boolean;\n refineItemUrl?: string;\n minValue?: string;\n maxValue?: string;\n dimensionType?: DimensionTypes;\n rowNumber?: number;\n unitText?: string;\n updatedSliderMaxValue?: string;\n updatedSliderMinValue?: string;\n}\n/**\n * Checks if the data type value corresponds to a slider.\n * @param dataTypeValue\n */\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\n return dataTypeValue === AttributeDataType.Currency || dataTypeValue === AttributeDataType.Decimal;\n}\n\n/**\n * Checks if the data type value corresponds to a range type integer.\n * @param dataTypeValue\n */\nexport function isRangeTypeForInteger(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Checks if the data type value corresponds to a custom input box Range.\n * @param dataTypeValue\n */\nexport function isCustomRangeTypeIntegerSelected(\n selectedRefinementCriterion: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy\n): boolean {\n return (\n selectedRefinementCriterion?.RowNumber !== undefined &&\n selectedRefinementCriterion?.RowNumber !== null &&\n selectedRefinementCriterion?.DataTypeValue === AttributeDataType.Integer &&\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n );\n}\n\n/**\n * Checks if the selectedRefinementCriterion is siingle type with API va;ues or custom type.\n * If custom type then RowNumber is null\n * @param dataTypeValue\n */\nexport function isSingleSelectRangeTypeIntegerSelected(\n selectedRefinementCriterion: ProductRefinerValue,\n productRefinerValue: ProductRefinerValue\n): boolean {\n return (\n productRefinerValue.LeftValueBoundString === selectedRefinementCriterion?.LeftValueBoundString &&\n productRefinerValue.RightValueBoundString === selectedRefinementCriterion?.RightValueBoundString &&\n selectedRefinementCriterion?.RowNumber !== undefined &&\n selectedRefinementCriterion?.RowNumber !== null &&\n selectedRefinementCriterion !== undefined\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n */\nexport function findMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue | undefined {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n * @param refinementCriterion\n */\nexport function isMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriterion: ProductRefinerValue,\n parent?: IProductRefinerHierarchy\n): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n // Distinguish by displaytype also\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n ((parent?.DisplayTemplateValue === DisplayTemplate.Range\n ? isRangeType(refinementCriterion.DataTypeValue)\n : isRangeTypeForInteger(refinementCriterion.DataTypeValue)) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getIntegerRangeName(productRefinerValue: ProductRefinerValue): string {\n let rangeValue = '';\n\n if (productRefinerValue.LeftValueBoundString === '' && productRefinerValue.RightValueBoundString !== '') {\n rangeValue = `< ${productRefinerValue.RightValueBoundLocalizedString || productRefinerValue.RightValueBoundString}`;\n } else if (productRefinerValue.RightValueBoundString === '' && productRefinerValue.LeftValueBoundString !== '') {\n rangeValue = `> ${productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}`;\n } else if (productRefinerValue.RightValueBoundString !== '' && productRefinerValue.LeftValueBoundString !== '') {\n rangeValue = `${productRefinerValue.LeftValueBoundLocalizedString ||\n productRefinerValue.LeftValueBoundString} - ${productRefinerValue.RightValueBoundString ||\n productRefinerValue.RightValueBoundString}`;\n }\n return rangeValue;\n}\n\n/**\n * Get input without formatting.\n * @param input - Input string.\n * @returns - Returns number.\n */\nexport function getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNumber = Number(input);\n if (!Number.isNaN(inputAsNumber)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n // const reverseLookupResult = formattedPriceReverseLookup.get(input);\n // return reverseLookupResult || input;\n return input;\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n\n // Keeping only itemToggled value for integer-range type in currentRefinementCriteria\n if (\n itemToggleNotification.parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n itemToggleNotification.parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n currentRefinementCriteria = currentRefinementCriteria.filter(r => {\n return r.RefinerRecordId !== itemToggleNotification.productRefinerValue.RefinerRecordId;\n });\n }\n\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (\n isMatchingRefinementCriterion(\n itemToggleNotification.productRefinerValue,\n selectedCriterion,\n itemToggleNotification.parentProductRefinerHierarchy\n )\n ) {\n toggledItemFound = true;\n if (itemToggleNotification.isSelecting) {\n const next = {\n ...selectedCriterion,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n selectedCriterion.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n selectedCriterion.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n } // Else the item is being de-selected, so omit it from the refinement criteria\n } else {\n // Keep existing criterion because it is not in the item toggle notification\n updatedRefinementCriteria.push(selectedCriterion);\n }\n });\n\n if (!toggledItemFound) {\n const next = {\n ...itemToggleNotification.productRefinerValue,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n itemToggleNotification.productRefinerValue.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n\n // If single select, then deselect any others in the parent refiner group\n if (\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\n ) {\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\n // Do nothing\n } else {\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(child, criterion, itemToggleNotification.parentProductRefinerHierarchy)\n );\n if (matchingIndex > -1) {\n updatedRefinementCriteria.splice(matchingIndex, 1);\n }\n }\n });\n }\n }\n\n return updatedRefinementCriteria;\n}\n\nexport function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string | undefined,\n telemetry: ITelemetry\n): string {\n if (!amount || !currency) {\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\n return amount || '';\n }\n const priceAmount = (amount && Number(amount)) || 0;\n let result: string;\n\n try {\n result = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0\n }).format(priceAmount);\n } catch (error) {\n result = `${priceAmount} ${currency}`;\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ProductListInventoryFilteringOptions } from '../actions';\nimport { IChoiceSummaryProps } from './choice-summary.props';\nimport { getIntegerRangeName, isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n rangeDisplayType?: number | undefined;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent {\n private readonly closeButtonGlyph: string = 'msi-close-btn';\n\n private readonly payLoad: IPayLoad;\n\n @computed get selectedRefinersMap(): IRefinerMap[] {\n let { selectedChoices } = this.props;\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n selectedChoices = selectedChoices.filter(choice => {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\n );\n return parent && parent.RecordId !== channelInventoryConfigurationId;\n });\n }\n return selectedChoices.map((selectedRefiner: ProductRefinerValue, index) => {\n const rangeParentDisplay = refinerHierarchy.filter(p => p.RecordId === selectedRefiner.RefinerRecordId);\n return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner,\n // parameter to store Display Template type\n rangeDisplayType: rangeParentDisplay[0]?.DisplayTemplateValue || undefined\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\n const items = this.selectedRefinersMap;\n this.payLoad.contentAction.etext = clearAllText;\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
\n {items.length > 0 && label && {label}}\n
    \n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n // Get range value for Range display and integer type only (not for Integer with TextBox(4) display)\n const rangeInteger =\n item.value.DataTypeValue === AttributeDataType.Integer &&\n item.rangeDisplayType &&\n item.rangeDisplayType === DisplayTemplate.Range &&\n item.value.RefinerRecordId !== 0;\n const newIntRange = rangeInteger\n ? item.key\n : item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString || item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString;\n return (\n
  • \n \n {newIntRange}\n \n \n
  • \n );\n })}\n
\n {items.length > 0 && clearAllText && (\n \n {clearAllText}\n \n )}\n
\n );\n }\n\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue, index: string): string {\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\n const overallFormat = choiceFormat || '{1}';\n const rangeFormat = choiceRangeValueFormat;\n let refinerName = '';\n let parent: IProductRefinerHierarchy | undefined;\n if (refinerHierarchy && refinerHierarchy.find) {\n parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\n );\n\n if (!parent) {\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\n } else {\n refinerName = parent.KeyName || '';\n }\n }\n\n let refinerValueName: string;\n if (isRangeType(productRefinerValue.DataTypeValue)) {\n refinerValueName = rangeFormat\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\n } else if (productRefinerValue.RefinerRecordId === 0) {\n const filterValue = refinerValues?.Values.find(\n refiner => refiner.LeftValueBoundString === productRefinerValue.LeftValueBoundString\n );\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\n } else {\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n }\n\n if (refinerName === 'Rating' || refinerName === 'Price') {\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n }\n // Adding integer range format\n if (\n productRefinerValue.DataTypeValue === AttributeDataType.Integer &&\n parent?.DisplayTemplateValue === DisplayTemplate.Range &&\n productRefinerValue.RefinerRecordId !== 0\n ) {\n refinerValueName = getIntegerRangeName(productRefinerValue);\n return refinerValueName;\n }\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}_${index}`);\n }\n\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\n if (!amount || !currency) {\n this.props.telemetry.trace('[choice-summary] could not format price');\n return amount || '';\n }\n let result = amount;\n\n try {\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\n } catch (error) {\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLElement;\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\n\n if (this.props.onChoiceClicked) {\n this.props.onChoiceClicked({\n clearAll,\n itemClicked: target,\n choiceClicked: selectedRefiner,\n nextItemToFocus: target.nextSibling as HTMLElement\n });\n }\n };\n\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\n return (result && result.value) || undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IErrorMessage {\n text?: string;\n}\n\nexport const ErrorMessage: React.FC = ({ text }) => {\n return (\n \n
\n {` `}\n {text}\n {` `}\n
\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\n\ninterface IFeatureSearchResultItem {\n product: SimpleProduct | null;\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n recommendation?: string;\n}\n\nexport const FeatureSearchResultItem: React.FC = ({\n product,\n context,\n imageSettings,\n resources,\n telemetryContent,\n recommendation\n}) => {\n if (product === null) {\n return null;\n }\n\n const productName = product.Name;\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\n const fallbackImage = getFallbackImageUrl(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const heading =\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n
\n \n
\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n
\n \n
\n

{heading}

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

{title}

;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\n \n {' '}\n {text}{' '}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ISearchResultModalViewProps {\n modal: React.ReactElement;\n modalHeader: React.ReactElement;\n modalFooter: React.ReactElement;\n modalBody: React.ReactElement;\n}\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n onClick(): void;\n}\n\nexport interface ISearchResultModalResources {\n modalTitle: string;\n modalCloseButtonText: string;\n}\n\nexport interface ISearchResultModalProps {\n resources: ISearchResultModalResources;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, id } = props;\n return (\n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n \n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\ninterface IProductSearchResultItems {\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities\n}) => {\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return (\n
    \n {products.map((product: ProductSearchResult, index: number) => (\n
  • \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n
  • \n ))}\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n
\n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n
\n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n DisplayTemplate,\n ProductRefinerSource,\n ProductRefinerValue,\n RefinerType\n} from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { getIntegerRangeName, isSingleSelectRangeTypeIntegerSelected } from './utilities';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component {\n private readonly anchorType: React.RefObject;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n if (\n parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n const rangeValue = getIntegerRangeName(productRefinerValue);\n return (\n
  • \n \n \n \n
  • \n );\n } else {\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \n \n
  • \n );\n }\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n \n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n \n \n \n \n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n \n \n \n );\n }\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isUndefined } from 'lodash';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport { IRefineItemState } from './refine-item';\nimport { isCustomRangeTypeIntegerSelected } from './utilities';\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\nexport type RangeRefineItemInputType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemInputProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n rangeType: RangeRefineItemInputType;\n\n /**\n * The telemetry content\n */\n onToggle(notfication: Readonly): void;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemInputState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n invalidData: boolean | undefined;\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItemInput extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n public constructor(props: IRangeRefineItemInputProps) {\n super(props);\n this._changeMinInputRange = this._changeMinInputRange.bind(this);\n this._changeMaxInputRange = this._changeMaxInputRange.bind(this);\n this._applyCustom = this._applyCustom.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n let initialMin = '';\n let initialMax = '';\n const { selectedRefinementCriterion, parentProductRefinerHierarchy } = this.props;\n if (selectedRefinementCriterion) {\n initialMin = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\n ? ''\n : selectedRefinementCriterion?.LeftValueBoundString || '';\n initialMax = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\n ? ''\n : selectedRefinementCriterion?.RightValueBoundString || '';\n }\n\n this.state = {\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n invalidData: !(initialMin && initialMax),\n isChecked: false\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemInputProps, nextState: IRangeRefineItemInputState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n nextState.invalidData = !(nextState.selectedMin && nextState.selectedMax);\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemInputProps): void {\n if (previousProps !== this.props) {\n this.updateInputRangerProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n return undefined;\n }\n\n // /**\n // * Function to update slider props.\n // */\n private updateInputRangerProps(): void {\n const selectedMin = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\n ? ''\n : this.props.selectedRefinementCriterion?.LeftValueBoundString;\n const selectedMax = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\n ? ''\n : this.props.selectedRefinementCriterion?.RightValueBoundString;\n this.setState({ selectedMin, selectedMax });\n }\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n return (\n
  • \n
    \n
    \n \n {' - '}\n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n
    \n
    \n \n
    \n
    \n
  • \n );\n }\n\n private _applyCustom(event: React.MouseEvent): void {\n const selectedMinValue = this._getInputWithoutFormatting(this.state.selectedMin || '');\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const { onToggle, parentProductRefinerHierarchy } = this.props;\n const max = this.state.selectedMax;\n\n const maxNum = max ? Number(max) : undefined;\n const productRefinerValue: ProductRefinerValue = {\n RefinerRecordId: parentProductRefinerHierarchy.Values[0].RefinerRecordId,\n LeftValueBoundString: this.state.selectedMin,\n RightValueBoundString: this.state.selectedMax,\n DataTypeValue: parentProductRefinerHierarchy.DataTypeValue,\n RefinerSourceValue: parentProductRefinerHierarchy.Values[0].RefinerSourceValue\n };\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true\n });\n }\n }\n\n private _changeMinInputRange(event: React.ChangeEvent): void {\n this.setState({\n selectedMin: event.target.value.trim()\n });\n }\n\n private _changeMaxInputRange(event: React.ChangeEvent): void {\n this.setState({\n selectedMax: event.target.value.trim()\n });\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n DisplayTemplate,\n ProductRefinerSource,\n ProductRefinerValue,\n RefinerType\n} from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeTypeForInteger } from './utilities';\nimport RangeRefineItemInput from './range-refine-item-input';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n const isExpanded = this.props.isExpandedOnInitialLoad;\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n
    \n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n
    \n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (\n productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n // Check if is of integer range type\n if (isRangeTypeForInteger(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n let selectedRefinementCriterion: ProductRefinerValue | undefined = {};\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n {productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range && (\n \n )}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n
  • \n \n
  • \n );\n });\n return
      {listItems}
    ;\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC = ({ text, className }) => (\n \n {` `}\n {text}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport {\n ChannelInventoryConfiguration,\n format,\n ProductPrice,\n ProductRefinerValue,\n SortColumn,\n StoreOperationsDataActions,\n TextValueTranslation\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput,\n ObjectExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n IFullProductsSearchResultsWithCount,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n private _isMounted: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n channelInventoryConfiguration: undefined\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n this._isMounted = true;\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: this.props.context.actionContext\n });\n if (this._isMounted) {\n this.setState({ channelInventoryConfiguration });\n }\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n await this._updateVariantAvailability();\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n await this._updateVariantAvailability();\n }\n\n public componentWillUnmount(): void {\n this._isMounted = false;\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n /**\n * Get products variants dimension availabilities.\n * @returns Void.\n */\n private readonly _updateVariantAvailability = async (): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n await this._getProductsDimensionsAvailabilities();\n }\n };\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n @action\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query?.skip &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n };\n\n /**\n * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n }\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n\n const dropdown = (\n <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\n />\n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = !ObjectExtensions.isNullOrUndefined(listPageState?.currentPageNumber)\n ? listPageState!.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\n />\n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n const { channelInventoryConfiguration } = this.state;\n const isInventorySortableAttribute =\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\n\n const isInventoryProductAttribute =\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\n\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n isInventorySortableAttribute ||\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n isInventoryProductAttribute)\n );\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const { channelInventoryConfiguration } = this.state;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\n return (\n <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\n refinerValues={refinerValueName}\n />\n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation }\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n return (\n <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\n />\n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\n !actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\n );\n };\n}\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { format as formatNotification, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { action, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { AutoSuggest } from '@msdyn365-commerce-modules/address';\r\nimport { IAutoSuggestOptions } from '@msdyn365-commerce-modules/address';\r\nimport { AddressCommon } from '@msdyn365-commerce-modules/address';\r\nimport { AddressFormat } from '@msdyn365-commerce-modules/address';\r\nimport { AddressItemType } from '@msdyn365-commerce-modules/address';\r\nimport { AddressMetaData } from '@msdyn365-commerce-modules/address';\r\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '@msdyn365-commerce-modules/address';\r\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '@msdyn365-commerce-modules/address';\r\nimport { AddressList, IAddressListProps } from '@msdyn365-commerce-modules/address';\r\nimport { IB2bAccountManagementAddressData } from './b2b-account-management-address.data';\r\nimport { IB2bAccountManagementAddressProps } from './b2b-account-management-address.props.autogenerated';\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<IB2bAccountManagementAddressProps<IB2bAccountManagementAddressData>> {\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 shouldRenderEditAddressButton: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Address component.\r\n * @extends {React.Component<IB2bAccountManagementAddressProps<IB2bAccountManagementAddressData>>}\r\n */\r\n@observer\r\nclass AccountManagementAddress extends React.Component<IB2bAccountManagementAddressProps<IB2bAccountManagementAddressData>> {\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 = 6; // Default to Home\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private autoSuggest?: AutoSuggest;\r\n\r\n public constructor(props: IB2bAccountManagementAddressProps<IB2bAccountManagementAddressData>) {\r\n super(props);\r\n const { context, data, resources, telemetry } = 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 // Filter out the Invoice address for the add/update form\r\n this.addressPurposes.filter((address: AddressPurpose) => address.AddressType !== 1)\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\r\n /**\r\n * On Suggestion Selected Function.\r\n * @param result - Microsoft.Maps.ISuggestionResult.\r\n */\r\n @action\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise<void> => {\r\n this._clearAddressFields();\r\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\r\n set(this.addUpdateAddress, { Street: '' });\r\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\r\n set(this.addUpdateAddress, { CountyName: address.CountyName });\r\n set(this.addUpdateAddress, { City: address.City });\r\n set(this.addUpdateAddress, { State: address.State });\r\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\r\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\r\n\r\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\r\n setTimeout(() => {\r\n set(this.addUpdateAddress, { Street: address.Street });\r\n }, 0);\r\n };\r\n\r\n /**\r\n * Clear Address Fields.\r\n */\r\n @action\r\n private readonly _clearAddressFields = (): void => {\r\n const addressFormatItem = this.addressFormat.getAddressFormat(\r\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n );\r\n addressFormatItem.forEach(format => {\r\n if (this.addUpdateAddress[format.name] !== undefined && !this.autoSuggest?.excludedAddressFields.includes(format.name)) {\r\n this.addressFormat[format.name] = '';\r\n }\r\n });\r\n this._clearValidation();\r\n };\r\n\r\n /**\r\n * Clear Validation Function.\r\n */\r\n @action\r\n private readonly _clearValidation = (): void => {\r\n this.validationError = {};\r\n };\r\n\r\n public async componentDidMount(): Promise<void> {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled, autoSuggestOptions }\r\n } = this.props;\r\n\r\n // Initializing data props\r\n this._dataInitialize(this.props);\r\n\r\n void this.props.data.countryRegions.then(() => {\r\n this._setDefaultCountryRegionId();\r\n });\r\n\r\n reaction(\r\n () => this.countryRegionId,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.currentOperation,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n if (autoSuggestionEnabled) {\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\r\n this.autoSuggest = new AutoSuggest(\r\n telemetry,\r\n options,\r\n channel?.BingMapsApiKey,\r\n channel?.ChannelCountryRegionISOCode,\r\n channel?.DefaultLanguageId\r\n );\r\n\r\n reaction(\r\n () =>\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi !== undefined &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\r\n async () => {\r\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n );\r\n\r\n reaction(\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\r\n },\r\n async () => {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Component did mount function.\r\n */\r\n public async componentDidUpdate(): Promise<void> {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n } else {\r\n this.autoSuggest?.disposeAutoSuggest();\r\n }\r\n }\r\n\r\n /**\r\n * Should component update function.\r\n * @param nextProps - Account management address props.\r\n * @param nextState - Next state.\r\n * @returns - True if component should update, false otherwise.\r\n */\r\n public shouldComponentUpdate(\r\n nextProps: IB2bAccountManagementAddressProps<IB2bAccountManagementAddressData>,\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 shouldRenderEditAddressButton: this.props.config.enableEditAddress\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: IB2bAccountManagementAddressProps<IB2bAccountManagementAddressData>): void => {\r\n const { data } = props;\r\n\r\n reaction(\r\n () => data.countryRegions.result,\r\n () => {\r\n this.countryRegions = data.countryRegions.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.addressPurposes.result,\r\n () => {\r\n this.addressPurposes = data.addressPurposes.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.address.result,\r\n () => {\r\n this.customerAddresses = data.address.result ?? [];\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Render Add Or Update Address Function.\r\n * @returns - AddressAddUpdate.\r\n */\r\n private readonly _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\r\n return AddressAddUpdate({\r\n isUpdating: this.isUpdating,\r\n resources: this.resources,\r\n addressType: AddressType.Shipping,\r\n addressFormat: this.addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n defaultAddressType: this.defaultAddressType,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(\r\n this.resources.addressStateDefaultSelectionText,\r\n this.stateProvinceInfo\r\n ),\r\n telemetryContent: this.telemetryContent,\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n onSave: this._onAddressAddUpdateSubmit,\r\n onCancel: this._resetView\r\n });\r\n };\r\n\r\n /**\r\n * Render List Address Function.\r\n * @returns - AddressList.\r\n */\r\n private readonly _renderListAddress = (): IAddressListProps => {\r\n const { config } = this.props;\r\n\r\n /**\r\n * Render Address ttitle.\r\n * @param event - Msdyn365.ContentEditableEvent.\r\n */\r\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\r\n config.heading!.text = event.target.value;\r\n };\r\n const heading = config.heading && {\r\n text: config.heading.text,\r\n headingTag: config.heading.tag\r\n };\r\n\r\n return AddressList({\r\n isUpdating: this.isUpdating,\r\n selectedAddress: this.selectedAddress,\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n addressPurposes: this.addressPurposes,\r\n resources: this.resources,\r\n heading,\r\n primaryAddressSectionHeading: config.primaryAddressSectionHeading,\r\n otherAddressSectionHeading: config.otherAddressSectionHeading,\r\n contextRequest: this.props.context.request,\r\n telemetryContent: this.telemetryContent,\r\n handleLineItemHeadingChange,\r\n onEditAddress: this._goToEditAddress,\r\n onRemoveAddress: this._onRemoveAddress,\r\n onAddAddress: this._goToAddAddress,\r\n onUpdatePrimaryAddress: this._onSubmitUpdatePrimaryAddress\r\n });\r\n };\r\n\r\n /**\r\n * Attach Map Auto Suggest Function.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise<void> => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\r\n }\r\n };\r\n\r\n /**\r\n * On Address Add Update Function.\r\n * @param name - String.\r\n * @param value - String | Boolean | Number.\r\n */\r\n private readonly onAddressAddUpdate = (name: string, value: string | boolean | number) => {\r\n set(this.addUpdateAddress, { [name]: value });\r\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\r\n };\r\n\r\n /**\r\n * On Address Add Update Input Change.\r\n * @param event - Input Change Event.\r\n */\r\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n if (event.target.type === 'checkbox') {\r\n this.onAddressAddUpdate(event.target.name, event.target.checked);\r\n } else {\r\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n this.onAddressAddUpdate(event.target.name, value);\r\n }\r\n };\r\n\r\n /**\r\n * On Address Add Update Dropdown Change.\r\n * @param event - Dropdown Change Event.\r\n */\r\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent<HTMLSelectElement>): void => {\r\n if (event.target.name === AddressItemType[AddressItemType.AddressTypeValue]) {\r\n this.onAddressAddUpdate(event.target.name, +event.target.value);\r\n } else {\r\n this.onAddressAddUpdate(event.target.name, event.target.value);\r\n }\r\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\r\n this._onCountryChange(event.target.value);\r\n }\r\n };\r\n\r\n /**\r\n * On Address Update Function.\r\n * @param response - Promise<IAddressResponse>.\r\n * @param onSuccess - IAddressResponse.\r\n */\r\n private readonly _onAddressUpdate = (response: Promise<IAddressResponse>, onSuccess: (response: IAddressResponse) => void): void => {\r\n this.isUpdating = true;\r\n response.then(\r\n (result: IAddressResponse) => {\r\n if (result.address) {\r\n this.hasError = false;\r\n onSuccess(result);\r\n } else {\r\n this.hasError = true;\r\n this.addressActionResponse = result;\r\n }\r\n this.isUpdating = false;\r\n },\r\n () => {\r\n this.hasError = true;\r\n this.isUpdating = false;\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * On Address Add Update Submit Function.\r\n */\r\n private readonly _onAddressAddUpdateSubmit = (): void => {\r\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\r\n return;\r\n }\r\n let response: Promise<IAddressResponse>;\r\n if (this.addressCommon.isAuthenticatedFlow()) {\r\n response =\r\n this.currentOperation === AddressOperation.Update\r\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\r\n : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\r\n } else {\r\n response = Promise.resolve({ address: this.addUpdateAddress });\r\n }\r\n\r\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\r\n };\r\n\r\n /**\r\n * On Country Change Function.\r\n * @param countryRegionId - String.\r\n */\r\n private readonly _onCountryChange = (countryRegionId: string) => {\r\n this.countryRegionId = countryRegionId;\r\n const twoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\r\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\r\n set(this.addUpdateAddress, { TwoLetterISORegionName: twoLetterISORegionName });\r\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterISORegionName);\r\n this._clearAddressFields();\r\n };\r\n\r\n /**\r\n * Get Address Format Exclude List Function.\r\n * @returns - Address Format Exclude List.\r\n */\r\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\r\n const { config } = this.props;\r\n const addressFormatExcludeList: AddressItemType[] = [];\r\n\r\n if (!config.showAddressType) {\r\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\r\n }\r\n\r\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\r\n\r\n return addressFormatExcludeList;\r\n };\r\n\r\n /**\r\n * Get State Provinces Function.\r\n */\r\n private readonly _getStateProvinces = (): void => {\r\n if (\r\n !this.countryRegionId ||\r\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n return;\r\n }\r\n\r\n void this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\r\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\r\n\r\n // Reset state if selected state not found in the list.\r\n if (!stateInfo) {\r\n set(this.addUpdateAddress, { State: '' });\r\n }\r\n this.stateProvinceInfo = result;\r\n });\r\n };\r\n\r\n private _setDefaultCountryRegionId(): void {\r\n const { request } = this.props.context;\r\n const market = request && request.channel && request.channel.ChannelCountryRegionISOCode;\r\n\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n /**\r\n * Update CurrentOperation Function.\r\n * @param operation - AddressOperation.\r\n */\r\n private readonly _updateCurrentOperation = (operation: AddressOperation) => {\r\n this.currentOperation = operation;\r\n this._clearAddressFields();\r\n };\r\n\r\n /**\r\n * On Submit Update Primary Address Function.\r\n * @param address - Address.\r\n */\r\n private readonly _onSubmitUpdatePrimaryAddress = (address: Address): void => {\r\n this.selectedAddress = address;\r\n const response = this.addressCommon.updateCustomerPrimaryAddress(address);\r\n this._onAddressUpdate(response, this._onUpdatePrimaryAddressSuccess);\r\n };\r\n\r\n /**\r\n * Go To Edit Address Function.\r\n * @param address - Address.\r\n */\r\n private readonly _goToEditAddress = (address: Address): void => {\r\n this.addUpdateAddress = { ...address };\r\n this.countryRegionId = this.addUpdateAddress.ThreeLetterISORegionName || 'USA';\r\n this._updateCurrentOperation(AddressOperation.Update);\r\n };\r\n\r\n /**\r\n * On Remove Address Function.\r\n * @param address - Address.\r\n */\r\n private readonly _onRemoveAddress = (address: Address): void => {\r\n address.Deactivate = true;\r\n this.removeAddressData = address;\r\n const response = this.addressCommon.updateCustomerAddress(address);\r\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\r\n };\r\n\r\n /**\r\n * Renders Notification screen reader text for removed address.\r\n * @param address - Address input.\r\n * @returns Notification for removed address.\r\n */\r\n private readonly _renderScreenReaderRemoveText = (address: Address): React.ReactNode => {\r\n const notification = formatNotification(this.resources.removeAddressNotification!, `${address.Name!}`);\r\n return (\r\n <div className='remove-address-screen-reader' aria-live='polite'>\r\n {notification}\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * Go To Add Address Function.\r\n */\r\n private readonly _goToAddAddress = (): void => {\r\n this.addUpdateAddress = {};\r\n this._setDefaultCountryRegionId();\r\n set(this.addUpdateAddress, { ThreeLetterISORegionName: this.countryRegionId });\r\n set(this.addUpdateAddress, { AddressTypeValue: this.defaultAddressType });\r\n this._setDefaultCountryRegionId();\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n };\r\n\r\n /**\r\n * On Add Or Update Success Function.\r\n * @param response - IAddressResponse.\r\n */\r\n private readonly _onAddOrUpdateSuccess = (response: IAddressResponse): void => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n this._resetView();\r\n };\r\n\r\n /**\r\n * On Update Primary Address Success Function.\r\n * @param response - IAddressResponse.\r\n */\r\n private readonly _onUpdatePrimaryAddressSuccess = (response: IAddressResponse): void => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n };\r\n\r\n /**\r\n * Reset view function.\r\n */\r\n private readonly _resetView = (): void => {\r\n this.selectedAddress = undefined;\r\n this._updateCurrentOperation(AddressOperation.List);\r\n };\r\n}\r\n\r\nexport default AccountManagementAddress;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\r\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n AddressBillingHeading,\r\n AddressCommon,\r\n AddressFormat,\r\n AddressItemType,\r\n AddressMetaData,\r\n AddressOperation,\r\n AddressShow,\r\n IAddressAddUpdateProps,\r\n IAddressResponse,\r\n IAddressShowProps\r\n} from '@msdyn365-commerce-modules/address';\r\nimport { IB2bCheckoutBillingAddressData } from './b2b-checkout-billing-address.data';\r\nimport { IB2bCheckoutBillingAddressProps } from './b2b-checkout-billing-address.props.autogenerated';\r\n\r\n/**\r\n * Props interface.\r\n */\r\nexport interface IProps extends IB2bCheckoutBillingAddressProps<IB2bCheckoutBillingAddressData>, IModuleStateProps {}\r\n\r\nexport interface ICheckoutState {\r\n errorMessage: string | undefined;\r\n}\r\n\r\n/**\r\n * Checkout billing address view state interface.\r\n */\r\nexport interface ICheckoutBillingAddressViewState {\r\n isShowAddress: boolean;\r\n isError: boolean;\r\n}\r\n\r\n/**\r\n * Checkout billing address view props interface.\r\n */\r\nexport interface ICheckoutBillingAddressViewProps extends IProps {\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 validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: ICheckoutBillingAddressViewState;\r\n CheckoutBillingAddress: IModuleProps;\r\n sameAsShippingCheckbox: React.ReactNode;\r\n heading: React.ReactNode;\r\n showAddress: IAddressShowProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n error: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutBillingAddress component.\r\n * @extends {React.PureComponent<IB2bCheckoutBillingAddressProps<IB2bCheckoutBillingAddressData>>}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass CheckoutBillingAddress extends React.Component<IProps, ICheckoutState> {\r\n @observable private currentOperation: AddressOperation;\r\n\r\n @observable private isBillingAddressSameAsShipping: boolean;\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 validationError: object;\r\n\r\n @observable private readonly addressActionResponse?: IAddressResponse;\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 addresses: Address[];\r\n\r\n private readonly defaultAddressType: number = 6; // Default to Home\r\n\r\n public constructor(props: IProps) {\r\n super(props);\r\n this.state = { errorMessage: undefined };\r\n const { context, data, resources, telemetry } = this.props;\r\n\r\n this.addUpdateAddress = {};\r\n this.validationError = {};\r\n this.isBillingAddressSameAsShipping = false;\r\n this.currentOperation = AddressOperation.List;\r\n this.addressPurposes = data.addressPurposes.result || [];\r\n this.addresses = data.address.result || [];\r\n this.countryRegions = data.countryRegions.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 }\r\n\r\n public async componentDidMount(): Promise<void> {\r\n // Initializing data props\r\n\r\n this._dataInitialize(this.props);\r\n\r\n void 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 reaction(\r\n () => this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress,\r\n shippingAddress => {\r\n if (this.props.moduleState.isUpdating) {\r\n if (shippingAddress && this.isBillingAddressSameAsShipping) {\r\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\r\n } else if (shippingAddress && this.isBillingAddressSameAsShipping) {\r\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\r\n }\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.isBillingAddressRequried,\r\n isBillingAddressRequried => {\r\n if (!isBillingAddressRequried) {\r\n this.props.data.checkout.result?.removeBillingAddress({});\r\n this.props.moduleState.onDisable();\r\n }\r\n }\r\n );\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IProps, nextState: ICheckoutState): 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.isBillingAddressRequried) {\r\n return null;\r\n }\r\n\r\n const { resources } = this.props;\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.props.moduleState.hasError ? undefined : this.selectedAddress,\r\n addUpdateAddress: this.props.moduleState.hasError ? undefined : this.addUpdateAddress,\r\n countryRegionId: this.countryRegionId,\r\n stateProvinceInfo: this.stateProvinceInfo,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n className: config.className,\r\n viewState: {\r\n isShowAddress: this.selectedAddress && this.currentOperation === AddressOperation.Show && !this.props.moduleState.hasError,\r\n isError: this.props.moduleState.hasError\r\n },\r\n CheckoutBillingAddress: {\r\n moduleProps: this.props,\r\n className: classnames('ms-checkout-billing-address', config.className)\r\n },\r\n heading: <AddressBillingHeading {...{ text: resources.addressBillingAddressHeading }} />,\r\n showAddress: this._renderShowAddress(),\r\n error: this.renderErrorMessage()\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: IProps): 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.countryStates.result,\r\n () => {\r\n this.stateProvinceInfo = data.countryStates.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.address.result,\r\n () => {\r\n this.addresses = data.address.result ?? [];\r\n }\r\n );\r\n\r\n this._setBillingAddress();\r\n };\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 * Gets address format for exclude list.\r\n * @returns - Address item type.\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 * Gets 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 void 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 /**\r\n * Initialize module state.\r\n */\r\n private readonly _initModuleState = (): void => {\r\n this.props.moduleState.init({\r\n status: this.isBillingAddressRequried ? 'updating' : 'disabled'\r\n });\r\n\r\n const { billingAddress, isBillingAddressSameAsShippingAddress } = this.props.data.checkout.result ?? {};\r\n\r\n if (this.isBillingAddressRequried) {\r\n if (billingAddress) {\r\n this.isBillingAddressSameAsShipping = isBillingAddressSameAsShippingAddress ?? false;\r\n this._updateCurrentOperation(AddressOperation.Show, billingAddress);\r\n this._updateModuleState();\r\n } else if (this.isCartContainsItemsForShipping) {\r\n this.isBillingAddressSameAsShipping = false;\r\n this._updateCurrentOperation(AddressOperation.Show, undefined);\r\n\r\n const {\r\n resources: { noBillingErrorMessage }\r\n } = this.props;\r\n\r\n this.setError(noBillingErrorMessage, true);\r\n } else {\r\n this.isBillingAddressSameAsShipping = false;\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Sets 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\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n @computed private get isCartContainsItemsForShipping(): boolean {\r\n const { request } = this.props.context;\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\r\n const pickupDeliveryModeCode = request.channel?.PickupDeliveryModeCode;\r\n const emailDeliveryModeCode = request.channel?.EmailDeliveryModeCode;\r\n\r\n // If hasInvoiceLine is true, there are only invoices no items in cart and return false here\r\n return this.props.data.checkout.result?.checkoutCart.hasInvoiceLine\r\n ? false\r\n : retailMultiplePickUpOptionEnabled\r\n ? ((this.props.data.checkout.result && this.props.data.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 : ((this.props.data.checkout.result && this.props.data.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 @computed private get getLoyaltyAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n return checkoutState?.loyaltyAmount ? checkoutState.loyaltyAmount : 0;\r\n }\r\n\r\n @computed private get getGiftCardTotalAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n if (!checkoutState || !checkoutState.giftCardExtends) {\r\n return 0;\r\n }\r\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\r\n return count + (giftCard.Balance || 0);\r\n }, 0);\r\n }\r\n\r\n @computed private get getCustomerAccountAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n const defaultAmount = 0;\r\n\r\n return checkoutState?.customerAccountAmount ?? defaultAmount;\r\n }\r\n\r\n @computed private get shouldPaidByCard(): boolean {\r\n const {\r\n data: { checkout },\r\n config\r\n } = this.props;\r\n if (!checkout.result) {\r\n return false;\r\n }\r\n\r\n const checkoutResult = checkout.result;\r\n const cart = checkoutResult.checkoutCart.cart;\r\n if (!cart || !cart.CartLines || cart.CartLines.length === 0) {\r\n return false;\r\n }\r\n\r\n const { paymentTenderType, tokenizedPaymentCard } = checkoutResult;\r\n const isPaidByOtherPaymentSource = config.paymenTenderType !== paymentTenderType && tokenizedPaymentCard;\r\n\r\n // Use payment card when it is not free or gift card balance + Loyalty amount can not cover the total amount\r\n const amountDue = (cart.TotalAmount || 0) - this.getGiftCardTotalAmount - this.getLoyaltyAmount - this.getCustomerAccountAmount;\r\n\r\n return amountDue > 0 && !isPaidByOtherPaymentSource;\r\n }\r\n\r\n @computed private get isBillingAddressRequried(): boolean {\r\n return this.shouldPaidByCard;\r\n }\r\n\r\n private readonly setError = (errorMessage: string | undefined, hasError: boolean): void => {\r\n this.props.moduleState.setHasError(hasError);\r\n this.setState({ errorMessage });\r\n };\r\n\r\n private renderErrorMessage = (): React.ReactNode => (\r\n <div className={'ms-checkout-po-number__error'}>\r\n <p className={'ms-checkout-po-number__error-message'}>{this.state.errorMessage}</p>\r\n </div>\r\n );\r\n\r\n /**\r\n * Sets billing address.\r\n * @param address - The address.\r\n */\r\n private readonly _setBillingAddress = (): void => {\r\n if (this.props.data.checkout.result) {\r\n const addressTypeId = 1;\r\n const addressCount = this.addresses.filter((address: Address) => address.AddressTypeValue === addressTypeId).length;\r\n\r\n // Only set billing address if there is one Invoice address\r\n if (addressCount === 1) {\r\n const address = this.addresses.find(address => address.AddressTypeValue === addressTypeId);\r\n this.selectedAddress = address ? address : this.selectedAddress;\r\n\r\n const newBillingAddress: Address = { ...address };\r\n\r\n if (address?.ThreeLetterISORegionName && !newBillingAddress.TwoLetterISORegionName) {\r\n newBillingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(\r\n address?.ThreeLetterISORegionName\r\n );\r\n }\r\n\r\n void this.props.data.checkout.result.updateBillingAddress({\r\n newBillingAddress,\r\n additionalProperties: {\r\n isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShipping\r\n }\r\n });\r\n\r\n this.setError(undefined, false);\r\n } else {\r\n // Remove the billing address and set appropriate error message\r\n this.selectedAddress = undefined;\r\n void this.props.data.checkout.result.removeBillingAddress({\r\n additionalProperties: {\r\n isBillingAddressSameAsShippingAddress: false\r\n }\r\n });\r\n\r\n const {\r\n resources: { noBillingErrorMessage, multipleBillingErrorMessage }\r\n } = this.props;\r\n\r\n this.setError(addressCount === 0 ? noBillingErrorMessage : multipleBillingErrorMessage, true);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Update current operation.\r\n * @param operation - 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, { AddressTypeValue: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType });\r\n }\r\n };\r\n\r\n /**\r\n * Updates the 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 {\r\n this.props.moduleState.onUpdating();\r\n }\r\n };\r\n}\r\n\r\nexport default CheckoutBillingAddress;\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, IRequestContext } 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, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IEveCheckoutShippingAddressResources } from '../eve-checkout-shipping-address.props.autogenerated';\r\n\r\n/**\r\n * The cartline product interface.\r\n */\r\nexport interface ICartLineWithProduct {\r\n cartLine: CartLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * The checkout shipping cartline interface.\r\n */\r\nexport interface ICheckoutShippingCartLineInfo {\r\n lineId: string;\r\n imageProps: IImageProps;\r\n quantity: number;\r\n}\r\n\r\n/**\r\n * The checkout shipping cartline props.\r\n */\r\nexport interface ICheckoutShippingCartLinesProps {\r\n moduleClassName: string;\r\n cartLines: ICheckoutShippingCartLineInfo[];\r\n title: string;\r\n itemTitle: string;\r\n resources: IEveCheckoutShippingAddressResources;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Following as per module\r\nexport const CheckoutPickupCartLines: React.FC<ICheckoutShippingCartLinesProps> = ({\r\n moduleClassName,\r\n cartLines,\r\n title,\r\n itemTitle,\r\n resources\r\n}) => {\r\n const context = ({\r\n gridSettings: {\r\n xs: { w: 767 },\r\n sm: { w: 991 },\r\n md: { w: 1199 },\r\n lg: { w: 1599 },\r\n xl: { w: 1600 }\r\n }\r\n } as unknown) as IRequestContext;\r\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\r\n const isMobileView = isMobileCheck === 'xs' || isMobileCheck === 'sm';\r\n\r\n if (!ArrayExtensions.hasElements(cartLines)) {\r\n return null;\r\n }\r\n const quantity = 1;\r\n return (\r\n <div className={`${moduleClassName}__group-images`}>\r\n <div className={`${moduleClassName}__group-images-header`}>\r\n <div className={`${moduleClassName}__group-images-header-main`}>{title}</div>\r\n <div className={`${moduleClassName}__group-images-header-item`}>{itemTitle}</div>\r\n </div>\r\n <div className={`${moduleClassName}__group-images-lines`}>\r\n {cartLines.map((cartLine: ICheckoutShippingCartLineInfo) => {\r\n const isShowQty = cartLine.quantity > quantity;\r\n let className = `${moduleClassName}__group-images-lines-product`;\r\n const role = 'text';\r\n if (isShowQty) {\r\n className = classnames(className, ' product-image-wide');\r\n }\r\n return (\r\n <div className={className} key={cartLine.lineId}>\r\n <Image {...cartLine.imageProps} />\r\n {isMobileView\r\n ? isShowQty && (\r\n <div\r\n role={role}\r\n aria-label={format(resources.productQuantityInfo, cartLine.quantity, cartLine.imageProps.altText)}\r\n className={`${moduleClassName}__group-images-lines-line-quantity`}\r\n >\r\n {cartLine.quantity}\r\n </div>\r\n )\r\n : isShowQty && (\r\n <div\r\n aria-labelledby={cartLine.lineId}\r\n aria-hidden='true'\r\n className={`${moduleClassName}__group-images-lines-line-quantity`}\r\n >\r\n {cartLine.quantity}\r\n </div>\r\n )}\r\n {!isMobileView && isShowQty && (\r\n <span id={cartLine.lineId} className='msc-line__quantity sr-only'>\r\n {format(resources.productQuantityInfo, cartLine.quantity, cartLine.imageProps.altText)}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * The checkout shipping cartline image settings.\r\n */\r\nexport const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\r\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\r\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\r\n },\r\n lazyload: true,\r\n quality: 80\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n Address,\r\n AddressPurpose,\r\n CartLine,\r\n CountryRegionInfo,\r\n SimpleProduct,\r\n StateProvinceInfo,\r\n TenderLine,\r\n TokenizedPaymentCard\r\n} 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\n\r\n/**\r\n * The checkout address props interface.\r\n */\r\nexport interface ICheckoutAddressProps extends IEveCheckoutShippingAddressProps<IEveCheckoutShippingAddressData>, IModuleStateProps {}\r\n\r\n/**\r\n * The checkout shipping address view state.\r\n */\r\nexport interface ICheckoutShippingAddressViewState {\r\n isShowAddress: boolean;\r\n isShowAddresList: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n}\r\n\r\n/**\r\n * The checkout shipping address state.\r\n */\r\nexport interface ICheckoutAddresState {\r\n shippingGroups: ICartLineWithProduct[];\r\n}\r\n\r\n/**\r\n * The checkout shipping address view props.\r\n */\r\nexport interface ICheckoutShippingAddressViewProps extends ICheckoutAddressProps {\r\n className: string;\r\n currentOperation: AddressOperation;\r\n selectedAddress?: Address;\r\n addUpdateAddress: Address;\r\n addressListSelectedAddress: Address;\r\n countryRegionId: string;\r\n stateProvinceInfo?: StateProvinceInfo[];\r\n customerAddresses: Address[];\r\n validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: ICheckoutShippingAddressViewState;\r\n CheckoutShippingAddress: IModuleProps;\r\n isUpdating: boolean;\r\n hasError: boolean;\r\n showAddress: IAddressShowProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n cartLineImages?: React.ReactNode;\r\n showAddressSelect: IAddressSelectProps;\r\n showAddOrUpdateAddressHandler?(onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps;\r\n showAddressSelectHandler?(\r\n onAddAddressHandler?: () => void,\r\n onSaveHandler?: () => void,\r\n onCancelHandler?: () => void\r\n ): IAddressSelectProps;\r\n}\r\n\r\n/**\r\n * IExpressPaymentDetail interface.\r\n */\r\ninterface IExpressPaymentDetails {\r\n email?: string;\r\n tenderLine?: TenderLine;\r\n tokenizedPaymentCard?: TokenizedPaymentCard;\r\n paymentTenderType?: string;\r\n address?: Address;\r\n isExpressCheckoutAppliedInCartPage: boolean;\r\n isExpressAddressAppliedInCartPage?: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Address component.\r\n * @extends {React.Component<IEveCheckoutShippingAddressProps<IEveCheckoutShippingAddressData>>}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass CheckoutShippingAddress extends React.Component<ICheckoutAddressProps, ICheckoutAddresState> {\r\n @observable private currentOperation: AddressOperation;\r\n\r\n @observable private selectedAddress?: Address;\r\n\r\n @observable private addUpdateAddress: Address;\r\n\r\n @observable private countryRegionId: string = 'USA';\r\n\r\n @observable private stateProvinceInfo?: StateProvinceInfo[];\r\n\r\n @observable private customerAddresses: Address[] = [];\r\n\r\n @observable private validationError: object;\r\n\r\n @observable private addressActionResponse?: IAddressResponse;\r\n\r\n @observable private isUpdating?: boolean;\r\n\r\n @observable private hasError?: boolean;\r\n\r\n @observable private addressListSelectedAddress: Address = {};\r\n\r\n private readonly addressCommon: AddressCommon;\r\n\r\n private addressFormat!: AddressFormat;\r\n\r\n private countryRegions: CountryRegionInfo[] = [];\r\n\r\n private addressPurposes: AddressPurpose[] = [];\r\n\r\n private readonly resources: IAddressResource;\r\n\r\n private readonly defaultAddressType: number = 6; // Default to Home\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 { context, data, resources, telemetry } = this.props;\r\n\r\n this.addUpdateAddress = {};\r\n this.resources = resources;\r\n this.currentOperation = AddressOperation.List;\r\n this.countryRegions = data.countryRegions.result || [];\r\n this.addressPurposes = data.addressPurposes.result || [];\r\n this.customerAddresses = data.address.result || [];\r\n this.stateProvinceInfo = data.countryStates.result || [];\r\n this.addressCommon = new AddressCommon(context, resources, telemetry);\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n this.validationError = {};\r\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\r\n feature => feature.Name === this.multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n }\r\n\r\n /**\r\n * Initialize pickup group.\r\n */\r\n @action\r\n private readonly _initPickupGroup = async (): Promise<void> => {\r\n const pickupCartLines: CartLine[] = this._getCartLinesforDelivery();\r\n const cartLines: ICartLineWithProduct[] = [];\r\n\r\n try {\r\n const products = await this._getProductsByCartLines(\r\n this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0,\r\n pickupCartLines\r\n );\r\n for (const line of pickupCartLines) {\r\n const product: SimpleProduct | undefined = products.find(x => x.RecordId === line.ProductId);\r\n cartLines.push({ cartLine: line, product });\r\n }\r\n this.setState({ shippingGroups: cartLines });\r\n } catch (error) {\r\n this.props.telemetry.error(error as string);\r\n this.setState({ shippingGroups: [] });\r\n }\r\n };\r\n\r\n /**\r\n * On suggestion selected.\r\n * @param result - Suggestion result interface.\r\n */\r\n @action\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise<void> => {\r\n this._clearAddressFields();\r\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\r\n const timeout = 0;\r\n set(this.addUpdateAddress, { Street: '' });\r\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\r\n set(this.addUpdateAddress, { CountyName: address.CountyName });\r\n set(this.addUpdateAddress, { City: address.City });\r\n set(this.addUpdateAddress, { State: address.State });\r\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\r\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\r\n\r\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\r\n setTimeout(() => {\r\n set(this.addUpdateAddress, { Street: address.Street });\r\n }, timeout);\r\n };\r\n\r\n /**\r\n * Method to clear address fields.\r\n */\r\n @action\r\n private readonly _clearAddressFields = (): void => {\r\n const addressFormatItem = this.addressFormat.getAddressFormat(\r\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n );\r\n for (const formatAddress of addressFormatItem) {\r\n if (\r\n this.addUpdateAddress[formatAddress.name] !== undefined &&\r\n !this.autoSuggest?.excludedAddressFields.includes(formatAddress.name)\r\n ) {\r\n this.addressFormat[formatAddress.name] = '';\r\n }\r\n }\r\n this._clearValidation();\r\n };\r\n\r\n /**\r\n * Method to clear validation.\r\n */\r\n @action\r\n private readonly _clearValidation = (): void => {\r\n this.validationError = {};\r\n };\r\n\r\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const properties =\r\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\r\n ?.StringValue ?? '';\r\n\r\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\r\n }\r\n\r\n public async componentDidMount(): Promise<void> {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled, autoSuggestOptions },\r\n resources\r\n } = this.props;\r\n\r\n // Initializing data props\r\n this._dataInitialize(this.props);\r\n\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n\r\n this.props.data.checkout.then(() => {\r\n this._setDefaultCountryRegionId();\r\n this._initModuleState();\r\n });\r\n\r\n reaction(\r\n () => this.countryRegionId,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.currentOperation,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result?.shippingAddressFromExpressCheckout,\r\n () => {\r\n if (!this.expressPaymentDetailsFromCartPage && this._canShip()) {\r\n let address = this.props.data.checkout.result?.shippingAddressFromExpressCheckout;\r\n\r\n if (address?.TwoLetterISORegionName) {\r\n const threeLetterIsoRegionName = this.getThreeLetterIsoRegionName(address.TwoLetterISORegionName);\r\n\r\n address = { ...address, ThreeLetterISORegionName: threeLetterIsoRegionName };\r\n\r\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n this._onCountryChange(threeLetterIsoRegionName);\r\n }\r\n }\r\n\r\n this._updateCurrentOperation(AddressOperation.Add, address);\r\n this._onAddressAddUpdateSubmit();\r\n }\r\n }\r\n );\r\n\r\n if (autoSuggestionEnabled) {\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\r\n this.autoSuggest = new AutoSuggest(\r\n telemetry,\r\n options,\r\n channel?.BingMapsApiKey,\r\n channel?.ChannelCountryRegionISOCode,\r\n channel?.DefaultLanguageId\r\n );\r\n\r\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\r\n if (\r\n this.props.data.storeSelectorStateManager.result &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n await this.autoSuggest._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n\r\n reaction(\r\n () =>\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\r\n async () => {\r\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\r\n async () => {\r\n await this._attachMapAutoSuggest();\r\n }\r\n );\r\n }\r\n await this._initPickupGroup();\r\n }\r\n\r\n public async componentDidUpdate(): Promise<void> {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n } else {\r\n this.autoSuggest?.disposeAutoSuggest();\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: ICheckoutAddressProps, nextState: ICheckoutAddresState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!this._canShip()) {\r\n return null;\r\n }\r\n\r\n const { config, context, renderView, resources } = this.props;\r\n const { headingImages, itemsText, singleItemText } = resources;\r\n const { imageSettings } = config;\r\n\r\n // Line images\r\n const cartlines: ICheckoutShippingCartLineInfo[] = this.state.shippingGroups\r\n .filter(x => !ObjectExtensions.isNullOrUndefined(x.product))\r\n .map(line => ({\r\n lineId: line.cartLine.LineId ?? '',\r\n imageProps: {\r\n requestContext: context.actionContext.requestContext,\r\n className: 'ms-checkout-shipping-address__group-images-lines-line-image',\r\n altText: line.product?.Name,\r\n src: line.product?.PrimaryImageUrl ?? '',\r\n fallBackSrc: getFallbackImageUrl(line.product?.ItemId, context.actionContext.requestContext.apiSettings),\r\n gridSettings: context.request.gridSettings!,\r\n imageSettings: imageSettings ?? defaultImageSettings,\r\n loadFailureBehavior: 'empty'\r\n },\r\n quantity: line.cartLine.Quantity ?? 0\r\n }));\r\n\r\n const quantity = 1;\r\n const itemText = cartlines.length > quantity ? itemsText : singleItemText;\r\n\r\n const lineImageProps: ICheckoutShippingCartLinesProps = {\r\n moduleClassName: 'ms-checkout-shipping-address',\r\n cartLines: cartlines.filter(x => !ObjectExtensions.isNullOrUndefined(x)),\r\n itemTitle: `(${format(itemText, cartlines.length)})`,\r\n title: headingImages,\r\n resources: this.props.resources\r\n };\r\n\r\n const cartLineImages: React.ReactNode = <CheckoutPickupCartLines {...lineImageProps} />;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const { featureState } = this.props.data;\r\n const isRetailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n currentOperation: this.currentOperation,\r\n selectedAddress: this.selectedAddress,\r\n addUpdateAddress: this.addUpdateAddress,\r\n addressListSelectedAddress: this.addressListSelectedAddress,\r\n countryRegionId: this.countryRegionId,\r\n stateProvinceInfo: this.stateProvinceInfo,\r\n customerAddresses: this.customerAddresses,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n isUpdating: this.isUpdating,\r\n hasError: this.hasError,\r\n className: config.className,\r\n viewState: {\r\n isShowAddress: this.currentOperation === AddressOperation.Show && this.selectedAddress,\r\n isShowAddresList: this.currentOperation === AddressOperation.List && this.customerAddresses.length > 0,\r\n isShowAddOrUpdateAddress:\r\n this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update\r\n },\r\n CheckoutShippingAddress: {\r\n moduleProps: this.props,\r\n className: classnames('ms-checkout-shipping-address', config.className)\r\n },\r\n showAddress: this._renderShowAddress(),\r\n\r\n /**\r\n * Show address select.\r\n * @param onAddAddressHandler - On add address click function.\r\n * @param onSaveHandler - On save click function.\r\n * @param onCancelHandler - On cancel click function.\r\n * @returns - Renders select address.\r\n */\r\n showAddressSelectHandler: (onAddAddressHandler?: () => void, onSaveHandler?: () => void, onCancelHandler?: () => void) =>\r\n this._renderSelectAddress(onAddAddressHandler, onSaveHandler, onCancelHandler),\r\n\r\n /**\r\n * Show add/update address.\r\n * @param onSaveHandler - On save click function.\r\n * @param onCancelHandler - On cancel click function.\r\n * @returns - Renders select address.\r\n */\r\n showAddOrUpdateAddressHandler: (onSaveHandler?: () => void, onCancelHandler?: () => void) =>\r\n this._renderAddOrUpdateAddress(onSaveHandler, onCancelHandler),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\r\n cartLineImages: isRetailMultiplePickUpOptionEnabled ? cartLineImages : undefined,\r\n showAddressSelect: this._renderSelectAddress()\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Method data initialization.\r\n * @param props -The checkout address properties.\r\n */\r\n private readonly _dataInitialize = (props: ICheckoutAddressProps): void => {\r\n const { data } = props;\r\n\r\n reaction(\r\n () => data.countryRegions.result,\r\n () => {\r\n this.countryRegions = data.countryRegions.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.addressPurposes.result,\r\n () => {\r\n this.addressPurposes = data.addressPurposes.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.address.result,\r\n () => {\r\n this.customerAddresses = data.address.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.countryStates.result,\r\n () => {\r\n this.stateProvinceInfo = data.countryStates.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.featureState.result,\r\n () => {\r\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\r\n feature => feature.Name === this.multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Method to get cart lines for delivery.\r\n * @returns The cart line collection.\r\n */\r\n private readonly _getCartLinesforDelivery = (): CartLine[] => {\r\n return this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(line => this._isDelivery(line)) ?? [];\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param line -The cart line.\r\n * @returns True/false as per cart line delivery mode.\r\n */\r\n private readonly _isDelivery = (line: CartLine): boolean => {\r\n return this._isNotPickupMode(line.DeliveryMode) && (line.FulfillmentStoreId === undefined || line.FulfillmentStoreId === '');\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param deliveryMode -The delivery mode.\r\n * @returns True/false as per cart line delivery mode.\r\n */\r\n private readonly _isNotPickupMode = (deliveryMode: string | undefined): boolean => {\r\n const pickupDeliveryModeCode = this.props.context.request.channel?.PickupDeliveryModeCode;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const { channelDeliveryOptionConfig, featureState } = this.props.data;\r\n const retailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\r\n const pickupDeliveryMode = channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.some(\r\n pickupMode => pickupMode !== deliveryMode\r\n );\r\n return pickupDeliveryMode !== undefined ? pickupDeliveryMode : false;\r\n }\r\n return deliveryMode !== undefined && pickupDeliveryModeCode !== undefined && deliveryMode !== pickupDeliveryModeCode;\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param channelId - The channelId.\r\n * @param cartLines - Cart line collections.\r\n * @returns Collection of SimpleProduct.\r\n */\r\n private readonly _getProductsByCartLines = async (channelId: number, cartLines: CartLine[]): Promise<SimpleProduct[]> => {\r\n const actionContext = this.props.context.actionContext;\r\n const productInputs = cartLines\r\n .filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId))\r\n .map(\r\n line =>\r\n new ProductInput(\r\n line.ProductId || 0,\r\n actionContext.requestContext.apiSettings,\r\n channelId,\r\n undefined,\r\n actionContext.requestContext\r\n )\r\n );\r\n return getSimpleProducts(productInputs, actionContext);\r\n };\r\n\r\n /**\r\n * Method to render add/update address.\r\n * @param onSaveHandler -- Handles onsave functionality.\r\n * @param onCancelHandler -- Handles oncancel functionality.\r\n * @returns Address app/update props.\r\n */\r\n private readonly _renderAddOrUpdateAddress = (onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps => {\r\n const addressFormat =\r\n this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow()\r\n ? this.addressFormat\r\n : this.addressFormat;\r\n\r\n /**\r\n * On Cancel Button Function.\r\n */\r\n const onCancelButtonHandler = () => {\r\n this._resetView();\r\n onCancelHandler?.();\r\n };\r\n return AddressAddUpdate({\r\n isUpdating: this.isUpdating,\r\n resources: this.resources,\r\n addressType: AddressType.Shipping,\r\n addressFormat: addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n defaultAddressType: this.defaultAddressType,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n hasError: this.hasError,\r\n addressActionResponse: this.addressActionResponse,\r\n telemetryContent: this.telemetryContent,\r\n dropdownDisplayData: addressFormat.getPrefilledAddressDropdownData(\r\n this.resources.addressStateDefaultSelectionText,\r\n this.stateProvinceInfo\r\n ),\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n\r\n /**\r\n * On Save Function.\r\n */\r\n onSave: () => {\r\n this.onSubmit();\r\n onSaveHandler?.();\r\n },\r\n\r\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => {} : onCancelButtonHandler\r\n });\r\n };\r\n\r\n /**\r\n * Method to render select address.\r\n * @param onAddAddressHandler - To handle add address button click.\r\n * @param onSaveHandler - To handle save button click.\r\n * @param onCancelHandler - To handle cancel button click.\r\n * @returns Select address props.\r\n */\r\n private readonly _renderSelectAddress = (\r\n onAddAddressHandler?: () => void,\r\n onSaveHandler?: () => void,\r\n onCancelHandler?: () => void\r\n ): IAddressSelectProps => {\r\n /**\r\n * On Cancel Button Function.\r\n */\r\n const onCancelButtonHandler = () => {\r\n this._resetView();\r\n onCancelHandler?.();\r\n };\r\n return AddressSelect({\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n resources: this.resources,\r\n addressPurposes: this.addressPurposes,\r\n selectedAddress: this.addressListSelectedAddress,\r\n onAddressOptionChange: this._onAddressOptionChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n telemetryContent: this.telemetryContent,\r\n\r\n /**\r\n * On Add Address Function.\r\n */\r\n onAddAddress: () => {\r\n this._goToAddAddress();\r\n onAddAddressHandler?.();\r\n },\r\n\r\n /**\r\n * On Save Function.\r\n */\r\n onSave: () => {\r\n this._onSelectAddress();\r\n onSaveHandler?.();\r\n },\r\n\r\n onCancel: !this.selectedAddress ? () => {} : onCancelButtonHandler\r\n });\r\n };\r\n\r\n /**\r\n * Method to render show address.\r\n * @returns Show address props.\r\n */\r\n private _renderShowAddress(): IAddressShowProps | null {\r\n if (this.selectedAddress) {\r\n return AddressShow({\r\n address: this.selectedAddress,\r\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || ''),\r\n addressPurposes: this.addressPurposes\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to render map auto suggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise<void> => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\r\n }\r\n };\r\n\r\n /**\r\n * Method gets called on address option change.\r\n * @param event - To get current option.\r\n */\r\n private readonly _onAddressOptionChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const addressRecordId = event.currentTarget.value;\r\n const selectedAddress = this.customerAddresses.find(address => (address.RecordId || '').toString() === addressRecordId);\r\n if (selectedAddress) {\r\n this.addressListSelectedAddress = selectedAddress;\r\n }\r\n };\r\n\r\n /**\r\n * Method to render map auto suggest.\r\n * @param name - Address name field.\r\n * @param value - Address name value field.\r\n */\r\n private readonly onAddressAddUpdate = (name: string, value: string | boolean) => {\r\n set(this.addUpdateAddress, { [name]: value });\r\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\r\n };\r\n\r\n /**\r\n * Method to get called on address update change.\r\n * @param event - Input element.\r\n */\r\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n if (event.target.type === 'checkbox') {\r\n this.onAddressAddUpdate(event.target.name, event.target.checked);\r\n } else {\r\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n this.onAddressAddUpdate(event.target.name, value);\r\n }\r\n };\r\n\r\n /**\r\n * Method to get called on address update dropdown change.\r\n * @param event - Select element.\r\n */\r\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent<HTMLSelectElement>): void => {\r\n this.onAddressAddUpdate(event.target.name, event.target.value);\r\n\r\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\r\n this._onCountryChange(event.target.value);\r\n }\r\n };\r\n\r\n /**\r\n * Method to get called on address update submit.\r\n */\r\n private readonly _onAddressAddUpdateSubmit = (): void => {\r\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\r\n return;\r\n }\r\n\r\n let response: Promise<IAddressResponse>;\r\n if (this.addressCommon.isAuthenticatedFlow() && this._isNewAddress(this.addUpdateAddress)) {\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 let newAddress = (result.customerAddresses || []).find(\r\n add =>\r\n this.addUpdateAddress.Name === add.Name &&\r\n this.addUpdateAddress.Street === add.Street &&\r\n this.addUpdateAddress.State === add.State &&\r\n this.addUpdateAddress.City === add.City &&\r\n this.addUpdateAddress.ZipCode === add.ZipCode\r\n );\r\n if (!newAddress) {\r\n newAddress = result.address;\r\n newAddress = { ...newAddress, ...this.addUpdateAddress };\r\n }\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 get address from express payment details from cart page.\r\n * @returns - Address.\r\n */\r\n private readonly _getAddressFromCartExpressPaymentDetails = (): Address | undefined => {\r\n if (this.expressPaymentDetailsFromCartPage) {\r\n const { tokenizedPaymentCard, address, isExpressAddressAppliedInCartPage } = this.expressPaymentDetailsFromCartPage;\r\n\r\n let addressFromCartExpress: Address | undefined;\r\n\r\n if (isExpressAddressAppliedInCartPage) {\r\n addressFromCartExpress = address ? this.getExpressAddress(address) : undefined;\r\n } else {\r\n addressFromCartExpress = tokenizedPaymentCard ? this.getAddressFromTokenizedPaymentCard(tokenizedPaymentCard) : undefined;\r\n }\r\n\r\n return addressFromCartExpress;\r\n }\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Get address from tokenizedPaymentCard.\r\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\r\n * @returns The address.\r\n */\r\n private readonly getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\r\n const twoLetterIsoRegionName = tokenizedPaymentCard.Country;\r\n\r\n const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\r\n\r\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n this._onCountryChange(threeLetterIsoRegionName);\r\n }\r\n\r\n const address: Address = {\r\n TwoLetterISORegionName: twoLetterIsoRegionName,\r\n Name: tokenizedPaymentCard.NameOnCard,\r\n Street: tokenizedPaymentCard.Address1,\r\n StreetNumber: tokenizedPaymentCard.Address2,\r\n City: tokenizedPaymentCard.City,\r\n State: tokenizedPaymentCard.State,\r\n ZipCode: tokenizedPaymentCard.Zip,\r\n Phone: tokenizedPaymentCard.Phone,\r\n ThreeLetterISORegionName: threeLetterIsoRegionName,\r\n AddressTypeValue: this.defaultAddressType\r\n };\r\n\r\n return address;\r\n };\r\n\r\n /**\r\n * Get address from expressAddress.\r\n * @param expressAddress -- The expressAddress.\r\n * @returns The address.\r\n */\r\n private readonly getExpressAddress = (expressAddress: Address): Address => {\r\n const twoLetterIsoRegionName = expressAddress.TwoLetterISORegionName;\r\n\r\n const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\r\n\r\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n this._onCountryChange(threeLetterIsoRegionName);\r\n }\r\n\r\n const address: Address = {\r\n ...expressAddress,\r\n ThreeLetterISORegionName: threeLetterIsoRegionName,\r\n AddressTypeValue: this.defaultAddressType\r\n };\r\n\r\n return address;\r\n };\r\n\r\n /**\r\n * Get three letter ISO region name from two letter ISO region name.\r\n * @param twoLetterIsoRegionName -- The three letter ISO region name.\r\n * @returns The three letter ISO region name.\r\n */\r\n private readonly getThreeLetterIsoRegionName = (twoLetterIsoRegionName: string): string | undefined => {\r\n const countryRegion = this.countryRegions.find(country => {\r\n return country.ISOCode?.toLowerCase() === twoLetterIsoRegionName.toLowerCase();\r\n });\r\n\r\n return countryRegion?.CountryRegionId;\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 let defaultAddress;\r\n\r\n if (checkoutState?.checkoutCart.cart.ShippingAddress) {\r\n defaultAddress = checkoutState.checkoutCart.cart.ShippingAddress;\r\n } else if (this._getAddressFromCartExpressPaymentDetails()) {\r\n defaultAddress = this._getAddressFromCartExpressPaymentDetails();\r\n } else if (this._getDefaultAddress()) {\r\n defaultAddress = this._getDefaultAddress();\r\n } else {\r\n defaultAddress = checkoutState?.isExpressCheckoutApplied ? checkoutState.shippingAddressFromExpressCheckout : undefined;\r\n }\r\n\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 checkoutState?.updateHasShippingAddress({ newHasShippingAddress: true });\r\n } else {\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n checkoutState?.updateHasShippingAddress({ newHasShippingAddress: false });\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\n * Method to check if the customer already has the address.\r\n * @param address - The address.\r\n */\r\n private readonly _isNewAddress = (address: Address): boolean => {\r\n for (const existingAddress of this.customerAddresses) {\r\n if (\r\n (address.Name ?? '') === existingAddress.Name &&\r\n (address.Street ?? '') === existingAddress.Street &&\r\n (address.StreetNumber ?? '') === existingAddress.StreetNumber &&\r\n (address.City ?? '') === existingAddress.City &&\r\n (address.State ?? '') === existingAddress.State &&\r\n (address.ZipCode ?? '') === existingAddress.ZipCode &&\r\n (address.Phone ?? '') === existingAddress.Phone &&\r\n (address.ThreeLetterISORegionName ?? '') === existingAddress.ThreeLetterISORegionName &&\r\n (address.AddressTypeValue ?? '') === existingAddress.AddressTypeValue\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport default CheckoutShippingAddress;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/// <reference types=\"bingmaps\" />\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\r\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IModuleProps,\r\n ITelemetryContent\r\n} 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, IAddressShowProps } 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\n// import { AddressBillingCheckbox } from '@msdyn365-commerce-modules/address';\r\nimport { AddressBillingHeading } from '@msdyn365-commerce-modules/address';\r\nimport { AddressShow } from '@msdyn365-commerce-modules/address';\r\nimport { IGdnCheckoutBillingAddressData } from './gdn-checkout-billing-address.data';\r\nimport { IGdnCheckoutBillingAddressProps } from './gdn-checkout-billing-address.props.autogenerated';\r\nimport { ErrorComponent } from '@msdyn365-commerce-modules/address';\r\nimport { focusOnCheckoutError } from '@msdyn365-commerce-modules/address';\r\n\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nexport interface IAddressBillingCheckbox {\r\n isChecked: boolean;\r\n value: string;\r\n ariaLabel: string;\r\n text: string;\r\n telemetryContent?: ITelemetryContent;\r\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\r\n}\r\n\r\nexport interface IAdressInput {\r\n id?: string;\r\n name?: string;\r\n className: string;\r\n type: string;\r\n value: string;\r\n maxLength?: number;\r\n autoFocus?: boolean;\r\n additionalAddributes?: object;\r\n telemetryContent?: ITelemetryContent;\r\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\r\n}\r\n\r\n/**\r\n * Props interface.\r\n */\r\nexport interface IProps extends IGdnCheckoutBillingAddressProps<IGdnCheckoutBillingAddressData>, IModuleStateProps {}\r\n\r\n/**\r\n * Checkout billing address view state interface.\r\n */\r\n\r\nexport interface ICheckoutBillingAddressViewState {\r\n isShowAddress: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n isShowRadioButtons: boolean;\r\n errorMessage?: string;\r\n selectedBillingOption: string;\r\n}\r\n\r\n/**\r\n * Checkout billing address view props interface.\r\n */\r\nexport interface ICheckoutBillingAddressViewProps extends IProps {\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 validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: ICheckoutBillingAddressViewState;\r\n CheckoutBillingAddress: IModuleProps;\r\n sameAsShippingRadioButton: React.ReactNode;\r\n primaryAccountAddressRadioButton: React.ReactNode;\r\n newAddressRadioButton: React.ReactNode;\r\n heading: React.ReactNode;\r\n showAddress: IAddressShowProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n alert?: React.ReactNode;\r\n checkoutErrorRef?: React.RefObject<HTMLElement>;\r\n selectedBillingAddressOption: string;\r\n}\r\n\r\nexport interface IAddressShowItem {\r\n key: string;\r\n description: React.ReactNode;\r\n}\r\n\r\nexport enum BillingAddressOption {\r\n SameAsShipping = 'sameAsShipping',\r\n PrimaryAccount = 'primaryAccount',\r\n NewAddress = 'newAddress'\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutBillingAddress component.\r\n * @extends {React.PureComponent<IGdnCheckoutBillingAddressProps<IGdnCheckoutBillingAddressData>>}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass CheckoutBillingAddress extends React.Component<IProps, ICheckoutBillingAddressViewState> {\r\n @observable private currentOperation: AddressOperation;\r\n\r\n @observable private isBillingAddressSameAsShipping: boolean;\r\n\r\n @observable private isPrimaryAccountAddress: boolean;\r\n\r\n @observable private isAddNewAddress: boolean;\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 validationError: object;\r\n\r\n @observable private readonly addressActionResponse?: IAddressResponse;\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 = 6;\r\n\r\n // private addRenderRef: React.RefObject<AddressAdd>;\r\n private readonly telemetryContent?: ITelemetryContent;\r\n\r\n private autoSuggest?: AutoSuggest;\r\n\r\n private readonly checkoutErrorRef: React.RefObject<HTMLElement> = React.createRef();\r\n\r\n public constructor(props: IProps) {\r\n super(props);\r\n const { context, data, resources, telemetry } = this.props;\r\n\r\n this.addUpdateAddress = {};\r\n this.validationError = {};\r\n this.isBillingAddressSameAsShipping = false;\r\n this.isAddNewAddress = false;\r\n this.isPrimaryAccountAddress = false;\r\n this.resources = resources;\r\n this.currentOperation = AddressOperation.List;\r\n this.addressPurposes = data.addressPurposes.result || [];\r\n this.countryRegions = data.countryRegions.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.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 this.state = {\r\n isShowAddress: false,\r\n isShowAddOrUpdateAddress: false,\r\n isShowRadioButtons: false,\r\n errorMessage: '',\r\n selectedBillingOption: ''\r\n };\r\n\r\n // This.addRenderRef = React.createRef();\r\n }\r\n\r\n public async componentDidMount(): Promise<void> {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled, autoSuggestOptions }\r\n } = this.props;\r\n\r\n const initialBillingOption = this.props.config.billingAddressOption || BillingAddressOption.SameAsShipping;\r\n\r\n this.setState({ selectedBillingOption: initialBillingOption }, () => {\r\n this._onBillingAddressOptionChange({\r\n currentTarget: { value: initialBillingOption }\r\n } as React.ChangeEvent<HTMLInputElement>);\r\n });\r\n\r\n // Initializing data props\r\n this._dataInitialize(this.props);\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 reaction(\r\n () => this.props.data.checkout.result?.shippingAddress,\r\n shippingAddress => {\r\n if (shippingAddress && this.isBillingAddressSameAsShipping) {\r\n this.isBillingAddressSameAsShipping = true;\r\n this.isAddNewAddress = false;\r\n this.isPrimaryAccountAddress = false;\r\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\r\n } else if (this.getPrimaryAddress && this.isPrimaryAccountAddress) {\r\n this._updateCurrentOperation(AddressOperation.Show, this.getPrimaryAddress);\r\n this.isBillingAddressSameAsShipping = false;\r\n this.isAddNewAddress = false;\r\n this.isPrimaryAccountAddress = true;\r\n } else if (this.isAddNewAddress) {\r\n this.isBillingAddressSameAsShipping = false;\r\n this.isAddNewAddress = true;\r\n this.isPrimaryAccountAddress = false;\r\n this._updateCurrentOperation(AddressOperation.Update, this.billingAddress);\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.isBillingAddressRequried,\r\n isBillingAddressRequried => {\r\n if (isBillingAddressRequried) {\r\n if (this.props.moduleState.isDisabled) {\r\n this.onEdit();\r\n }\r\n } else {\r\n this.props.data.checkout.result?.removeBillingAddress({});\r\n this.props.moduleState.onDisable();\r\n }\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\r\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutError,\r\n checkoutError => {\r\n if (\r\n checkoutError &&\r\n checkoutError.errorLocation === ErrorLocation.CheckoutBillingAddress &&\r\n checkoutError.errorMessage\r\n ) {\r\n this._setErrorMessage(checkoutError.errorMessage);\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result?.checkoutErrorFocus,\r\n checkoutErrorFocus => {\r\n if (checkoutErrorFocus === CheckoutModule.CheckoutBillingAddress) {\r\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n public async componentDidUpdate(): Promise<void> {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n } else {\r\n this.autoSuggest?.disposeAutoSuggest();\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(\r\n nextProps: IGdnCheckoutBillingAddressProps<IGdnCheckoutBillingAddressData>,\r\n nextState: ICheckoutBillingAddressViewState\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 /**\r\n * Address input.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\n public AddressInputFunctionComponent: React.FC<IAdressInput> = (props: IAdressInput) => {\r\n const {\r\n id: itemId,\r\n name,\r\n className,\r\n type,\r\n value,\r\n maxLength,\r\n additionalAddributes,\r\n autoFocus: shouldUseAutoFocus,\r\n telemetryContent,\r\n onChange\r\n } = props;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, name!);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n return (\r\n <input\r\n name={name}\r\n id={itemId}\r\n className={`${className}__input ${className}__input-${type}`}\r\n type={type}\r\n autoFocus={shouldUseAutoFocus}\r\n value={value}\r\n maxLength={maxLength}\r\n {...(additionalAddributes || {})}\r\n {...attributes}\r\n onChange={onChange}\r\n />\r\n );\r\n };\r\n\r\n public AddressBillingCheckbox: React.FC<IAddressBillingCheckbox> = ({\r\n isChecked,\r\n value,\r\n ariaLabel,\r\n text,\r\n telemetryContent,\r\n onChange\r\n }) => {\r\n const additionalAttributes = {\r\n checked: isChecked,\r\n 'aria-checked': isChecked\r\n };\r\n\r\n return (\r\n <label className='ms-checkout-billing-address__shipping-address-label'>\r\n <this.AddressInputFunctionComponent\r\n {...{\r\n type: 'radio',\r\n className: 'ms-checkout-billing-address',\r\n value,\r\n onChange,\r\n additionalAddributes: additionalAttributes,\r\n telemetryContent\r\n }}\r\n />\r\n <span className='ms-checkout-billing-address__shipping-address-checkbox-text'>{text}</span>\r\n </label>\r\n );\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n if (!this.isBillingAddressRequried || this._shouldHideBillingAddressForOBO) {\r\n return null;\r\n }\r\n\r\n const {\r\n resources,\r\n moduleState: { hasError }\r\n } = this.props;\r\n\r\n const { renderView, config } = this.props;\r\n\r\n const errorMessage = this.state.errorMessage;\r\n const selectedBillingAddressOption = this.state.selectedBillingOption;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n currentOperation: this.currentOperation,\r\n selectedAddress: this.selectedAddress,\r\n selectedBillingAddressOption: selectedBillingAddressOption,\r\n addUpdateAddress: this.addUpdateAddress,\r\n countryRegionId: this.countryRegionId,\r\n stateProvinceInfo: this.stateProvinceInfo,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n className: config.className,\r\n viewState: {\r\n isShowAddress: this.selectedAddress && this.currentOperation === AddressOperation.Show,\r\n isShowAddOrUpdateAddress: this.currentOperation !== AddressOperation.Show,\r\n isShowRadioButtons: this.isCartContainsItemsForShipping && this.props.moduleState.isUpdating\r\n },\r\n CheckoutBillingAddress: {\r\n moduleProps: this.props,\r\n className: classnames('ms-checkout-billing-address', config.className)\r\n },\r\n heading: <AddressBillingHeading {...{ text: resources.addressBillingAddressHeading }} />,\r\n alert: hasError && errorMessage && <ErrorComponent {...{ title: resources.errorMessageTitle, message: errorMessage }} />,\r\n checkoutErrorRef: this.checkoutErrorRef,\r\n\r\n sameAsShippingRadioButton: (\r\n <this.AddressBillingCheckbox\r\n {...{\r\n isChecked: this.state.selectedBillingOption === BillingAddressOption.SameAsShipping,\r\n value: BillingAddressOption.SameAsShipping,\r\n ariaLabel: resources.addressSameAsShippingAddressAriaLabel,\r\n text: resources.addressSameAsShippingAddressText,\r\n telemetryContent: this.telemetryContent,\r\n onChange: this._onBillingAddressOptionChange\r\n }}\r\n />\r\n ),\r\n primaryAccountAddressRadioButton: this.getPrimaryAddress ? (\r\n <this.AddressBillingCheckbox\r\n {...{\r\n isChecked: this.state.selectedBillingOption === BillingAddressOption.PrimaryAccount,\r\n value: BillingAddressOption.PrimaryAccount,\r\n ariaLabel: resources.usePrimaryAccountAddressAsBillingAddressAriaLabel,\r\n text: resources.usePrimaryAccountAddressAsBillingAddressText,\r\n telemetryContent: this.telemetryContent,\r\n onChange: this._onBillingAddressOptionChange\r\n }}\r\n />\r\n ) : null,\r\n newAddressRadioButton: (\r\n <this.AddressBillingCheckbox\r\n {...{\r\n isChecked: this.state.selectedBillingOption === BillingAddressOption.NewAddress,\r\n value: BillingAddressOption.NewAddress,\r\n ariaLabel: resources.addNewAddressAriaLabel,\r\n text: resources.addNewAddressText,\r\n telemetryContent: this.telemetryContent,\r\n onChange: this._onBillingAddressOptionChange\r\n }}\r\n />\r\n ),\r\n showAddress: this._renderShowAddress(),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * On suggestion selected.\r\n * @param result - The suggestion result.\r\n */\r\n @action\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise<void> => {\r\n this._clearAddressFields();\r\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\r\n set(this.addUpdateAddress, { Street: '' });\r\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\r\n set(this.addUpdateAddress, { CountyName: address.CountyName });\r\n set(this.addUpdateAddress, { City: address.City });\r\n set(this.addUpdateAddress, { State: address.State });\r\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\r\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\r\n\r\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\r\n setTimeout(() => {\r\n set(this.addUpdateAddress, { Street: address.Street });\r\n }, 0);\r\n };\r\n\r\n /**\r\n * Clear address fields.\r\n */\r\n @action\r\n private readonly _clearAddressFields = (): void => {\r\n const addressFormatItem = this.addressFormat.getAddressFormat(\r\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n );\r\n addressFormatItem.forEach(format => {\r\n // @ts-ignore\r\n if (this.addUpdateAddress[format.name] !== undefined && !this.autoSuggest?.excludedAddressFields.includes(format.name)) {\r\n // @ts-ignore\r\n this.addressFormat[format.name] = '';\r\n }\r\n });\r\n this._clearValidation();\r\n };\r\n\r\n /**\r\n * Clear validation.\r\n */\r\n @action\r\n private readonly _clearValidation = (): void => {\r\n this.validationError = {};\r\n };\r\n\r\n /**\r\n * On address update.\r\n * @param name - Name.\r\n * @param value - Value.\r\n */\r\n private readonly onAddressAddUpdate = (name: string, value: string) => {\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 data initialization.\r\n * @param props -The checkout address properties.\r\n */\r\n private readonly _dataInitialize = (props: IProps): 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.countryStates.result,\r\n () => {\r\n this.stateProvinceInfo = data.countryStates.result ?? [];\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Render add or update address function.\r\n * @returns - Address add update props.\r\n */\r\n private readonly _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\r\n return AddressAddUpdate({\r\n resources: this.resources,\r\n addressType: AddressType.Billing,\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 hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n onSave: this._onSubmitAddress,\r\n onCancel: this._resetView\r\n });\r\n };\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 * On country region change function.\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 * Gets address format for exclude list.\r\n * @returns - Address item type.\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 * Attach map auto suggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise<void> => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.autoSuggest?.attachAutoSuggest('#billing_addressstreet', '#billing_addressstreet_container', this._onSuggestionSelected);\r\n }\r\n };\r\n\r\n /**\r\n * On address add update input change.\r\n * @param event - The event.\r\n */\r\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\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 * On address add update dropdown change.\r\n * @param event - The event.\r\n */\r\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent<HTMLSelectElement>): void => {\r\n this.onAddressAddUpdate(event.target.name, event.target.value);\r\n\r\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\r\n this._onCountryChange(event.target.value);\r\n }\r\n };\r\n\r\n /**\r\n * Gets 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 this.stateProvinceInfo = result;\r\n });\r\n };\r\n\r\n /**\r\n * Initialize module state.\r\n */\r\n private readonly _initModuleState = (): void => {\r\n this.props.moduleState.init({\r\n status: this.isBillingAddressRequried ? 'updating' : 'disabled',\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel,\r\n onSubmit: this.onSubmit\r\n });\r\n\r\n const { billingAddress, isBillingAddressSameAsShippingAddress } = this.props.data.checkout.result ?? {};\r\n\r\n if (this.isBillingAddressRequried) {\r\n if (billingAddress) {\r\n this.isBillingAddressSameAsShipping = isBillingAddressSameAsShippingAddress ?? false;\r\n this._updateCurrentOperation(AddressOperation.Show, billingAddress);\r\n this._updateModuleState();\r\n } else if (this.isCartContainsItemsForShipping) {\r\n this.isBillingAddressSameAsShipping = true;\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n } else {\r\n this.isBillingAddressSameAsShipping = false;\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Sets 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\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n /**\r\n * On change - Billing address same as shipping.\r\n * @param event - The event.\r\n */\r\n private _onBillingAddressOptionChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const selectedOption = event.currentTarget.value;\r\n this.setState({ selectedBillingOption: selectedOption });\r\n\r\n // Reset flags\r\n this.isBillingAddressSameAsShipping = false;\r\n this.isAddNewAddress = false;\r\n this.isPrimaryAccountAddress = false;\r\n\r\n if (selectedOption === BillingAddressOption.SameAsShipping && this.shippingAddress) {\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n this.isBillingAddressSameAsShipping = true;\r\n } else if (selectedOption === BillingAddressOption.NewAddress) {\r\n this._updateCurrentOperation(AddressOperation.Add, this.billingAddress);\r\n this.isAddNewAddress = true;\r\n } else if (selectedOption === BillingAddressOption.PrimaryAccount) {\r\n const primaryAddress = this.getPrimaryAddress;\r\n if (!primaryAddress) {\r\n return;\r\n }\r\n if (primaryAddress) {\r\n this._updateCurrentOperation(AddressOperation.Show, primaryAddress);\r\n this.selectedAddress = primaryAddress;\r\n this.isPrimaryAccountAddress = true;\r\n } else {\r\n console.error('No primary address found.');\r\n }\r\n }\r\n };\r\n\r\n @computed private get isCartContainsItemsForShipping(): boolean {\r\n const { request } = this.props.context;\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\r\n const pickupDeliveryModeCode = request.channel?.PickupDeliveryModeCode;\r\n const emailDeliveryModeCode = request.channel?.EmailDeliveryModeCode;\r\n\r\n // If hasInvoiceLine is true, there are only invoices no items in cart and return false here\r\n return this.props.data.checkout.result?.checkoutCart.hasInvoiceLine\r\n ? false\r\n : retailMultiplePickUpOptionEnabled\r\n ? ((this.props.data.checkout.result && this.props.data.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 : ((this.props.data.checkout.result && this.props.data.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 @computed private get billingAddress(): Address | undefined {\r\n return this.props.data.checkout.result?.billingAddress;\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 @computed private get getLoyaltyAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n return checkoutState?.loyaltyAmount ? checkoutState.loyaltyAmount : 0;\r\n }\r\n\r\n @computed private get getGiftCardTotalAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n if (!checkoutState || !checkoutState.giftCardExtends) {\r\n return 0;\r\n }\r\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\r\n return count + (giftCard.Balance || 0);\r\n }, 0);\r\n }\r\n\r\n @computed\r\n private get getPrimaryAddress(): Address | undefined {\r\n return this.props.data.address.result?.find((address: Address) => address.IsPrimary);\r\n }\r\n\r\n @computed private get getCustomerAccountAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n const defaultAmount = 0;\r\n\r\n return checkoutState?.customerAccountAmount ?? defaultAmount;\r\n }\r\n\r\n @computed private get shouldPaidByCard(): boolean {\r\n const {\r\n data: { checkout },\r\n config\r\n } = this.props;\r\n if (!checkout.result) {\r\n return false;\r\n }\r\n\r\n const checkoutResult = checkout.result;\r\n const cart = checkoutResult.checkoutCart.cart;\r\n if (!cart || !cart.CartLines || cart.CartLines.length === 0) {\r\n return false;\r\n }\r\n\r\n const { paymentTenderType, tokenizedPaymentCard } = checkoutResult;\r\n const isPaidByOtherPaymentSource = config.paymenTenderType !== paymentTenderType && tokenizedPaymentCard;\r\n\r\n // Use payment card when it is not free or gift card balance + Loyalty amount can not cover the total amount\r\n const amountDue = (cart.TotalAmount || 0) - this.getGiftCardTotalAmount - this.getLoyaltyAmount - this.getCustomerAccountAmount;\r\n\r\n return amountDue > 0 && !isPaidByOtherPaymentSource;\r\n }\r\n\r\n @computed private get isBillingAddressRequried(): boolean {\r\n return (\r\n this.shouldPaidByCard &&\r\n (!this.props.data.checkout?.result?.isPaymentVerificationRedirection ||\r\n !!this.props.data.checkout?.result?.isCheckoutCallFailed)\r\n );\r\n }\r\n\r\n @computed private get _shouldHideBillingAddressForOBO(): boolean {\r\n return Msdyn365.isOboRequest(this.props.context.request) && EnabledPaymentsForOBO.PaymentInstrument === 0;\r\n }\r\n\r\n /**\r\n * On submit address.\r\n */\r\n private readonly _onSubmitAddress = (): void => {\r\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\r\n this.props.moduleState.setHasError(true);\r\n\r\n if (\r\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\r\n this.props.data.checkout.result?.isPaymentSectionContainerHasError\r\n ) {\r\n this.props.data.checkout.result.updateIsBillingAddressHasError({ newIsBillingAddressHasError: true });\r\n }\r\n\r\n return;\r\n }\r\n\r\n this._setBillingAddress(this.addUpdateAddress);\r\n this._updateCurrentOperation(AddressOperation.Show, this.addUpdateAddress);\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * On submit.\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.props.telemetry.information('Billing address submit for Add or Update operation.');\r\n this._onSubmitAddress();\r\n break;\r\n case AddressOperation.Show:\r\n this.props.telemetry.information('Billing address submit for Show operation.');\r\n if (this.selectedAddress) {\r\n this._setBillingAddress(this.selectedAddress);\r\n this._updateCurrentOperation(AddressOperation.Show, this.selectedAddress);\r\n this._updateModuleState();\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 * 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.props.telemetry.information('Billing address cancel for Add or Update operation.');\r\n this._resetView();\r\n this._clearAddressFields();\r\n break;\r\n case AddressOperation.Show:\r\n this.props.telemetry.information('Billing address cancel for Show operation.');\r\n this._resetView();\r\n break;\r\n default:\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n /**\r\n * On edit.\r\n */\r\n private readonly onEdit = (): void => {\r\n this.props.telemetry.information('Billing address onEdit is called.');\r\n\r\n if (this.isBillingAddressSameAsShipping && this.shippingAddress && this.isCartContainsItemsForShipping) {\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n } else if (this.isPrimaryAccountAddress && this.getPrimaryAddress) {\r\n this._updateCurrentOperation(AddressOperation.Show, this.selectedAddress);\r\n } else {\r\n this._updateCurrentOperation(AddressOperation.Add, this.billingAddress);\r\n }\r\n this.props.moduleState.onUpdating();\r\n };\r\n\r\n /**\r\n * Sets billing address.\r\n * @param address - The address.\r\n */\r\n private readonly _setBillingAddress = (address: Address): void => {\r\n if (this.props.data.checkout.result) {\r\n const newBillingAddress = { ...address };\r\n\r\n if (address.ThreeLetterISORegionName && !newBillingAddress.TwoLetterISORegionName) {\r\n newBillingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(address.ThreeLetterISORegionName);\r\n }\r\n\r\n this.props.data.checkout.result.updateBillingAddress({\r\n newBillingAddress,\r\n additionalProperties: {\r\n isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShipping\r\n }\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Reset view.\r\n */\r\n private readonly _resetView = () => {\r\n this._updateCurrentOperation(AddressOperation.Show, this.billingAddress);\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Update current operation.\r\n * @param operation - 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 ? { ...this.selectedAddress } : {};\r\n set(this.addUpdateAddress, {\r\n ThreeLetterISORegionName: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n });\r\n set(this.addUpdateAddress, { AddressTypeValue: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType });\r\n }\r\n };\r\n\r\n /**\r\n * Updates the 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 {\r\n this.props.moduleState.onUpdating();\r\n }\r\n };\r\n\r\n @action\r\n private readonly _setErrorMessage = (errorMessage: string): void => {\r\n this.props.telemetry.error(errorMessage);\r\n this.props.moduleState.setHasError(true);\r\n this.props.moduleState.onUpdating();\r\n this.setState({\r\n errorMessage\r\n });\r\n };\r\n}\r\n\r\nexport default CheckoutBillingAddress;\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 } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n IAddressAddItem,\r\n IAddressAddUpdateProps\r\n} from '@msdyn365-commerce-modules/address/src/modules/account-management-address/../../common/components/address-add';\r\nimport {\r\n IAddressList,\r\n IAddressListItem,\r\n IAddressListProps\r\n} from '@msdyn365-commerce-modules/address/src/modules/account-management-address/../../common/components/address-list';\r\nimport {\r\n IAddressShowItem,\r\n IAddressShowProps\r\n} from '@msdyn365-commerce-modules/address/src/modules/account-management-address/../../common/components/address-show';\r\nimport { IAccountManagementAddressViewProps } from './b2b-account-management-address';\r\n// import { IAccountManagementAddressViewProps } from '@msdyn365-commerce-modules/address/src/modules/account-management-address/./account-management-address';\r\n// import { AddressDetailItemComponent } from '@msdyn365-commerce-modules/address/src/common/components/address-detail-item';\r\n\r\ninterface IAddressListPropsExt extends IAddressListProps {\r\n shouldRenderEditAddressButton: boolean;\r\n}\r\n\r\ninterface IAddressListExt extends IAddressList {\r\n shouldRenderEditAddressButton: boolean;\r\n}\r\n\r\n/**\r\n * Address show component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressDetail - Address detail.\r\n * @param param0.items - IAddressShowItem[].\r\n * @returns - Address Node.\r\n */\r\nconst AddressShow: React.FC<IAddressShowProps> = ({ AddressDetail, items }) => {\r\n return (\r\n <Node {...AddressDetail}>\r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description}</>;\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address List Component.\r\n * @param param0 - Root param.\r\n * @param param0.List - Address list.\r\n * @param param0.isShowList - Boolean.\r\n * @param param0.heading - Address heading.\r\n * @param param0.items - IAddressListItem[].\r\n * @returns - AddressListComponent Node.\r\n */\r\nconst AddressList: React.FC<IAddressListExt> = ({ List, isShowList, heading, items, shouldRenderEditAddressButton }) => {\r\n if (!isShowList) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Node {...List}>\r\n {heading}\r\n {items.map((item: IAddressListItem) => {\r\n const { Item, key, error, showItems, isShowPrimaryButton, primaryButton, editButton, removeButton } = item;\r\n const { Error, isShowError, title, message } = error;\r\n\r\n // const component = showItems.items.find(address => address.key === \"AddressTypeValue\")?.description;\r\n\r\n return (\r\n <Node {...Item} key={key}>\r\n <AddressShow {...showItems} />\r\n {isShowError && (\r\n <Node {...Error}>\r\n {title}\r\n {message}\r\n </Node>\r\n )}\r\n {isShowPrimaryButton && primaryButton}\r\n <div className={`${shouldRenderEditAddressButton ? '' : 'no-edit-button'}`}>\r\n {shouldRenderEditAddressButton && editButton}\r\n {removeButton}\r\n </div>\r\n </Node>\r\n );\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address Lists Component.\r\n * @param param0 - Root param.\r\n * @param param0.ListAddress - List address.\r\n * @param param0.heading - List heading.\r\n * @param param0.isShowEmptyListMessage - Boolean.\r\n * @param param0.emptyListMessage - Empty list message.\r\n * @param param0.addButton - Add button.\r\n * @param param0.primaryAddressList - Primary address.\r\n * @param param0.otherAddressList - Other address.\r\n * @returns Address Lists Component Node.\r\n */\r\nconst AddressLists: React.FC<IAddressListPropsExt> = ({\r\n ListAddress,\r\n heading,\r\n isShowEmptyListMessage,\r\n emptyListMessage,\r\n addButton,\r\n primaryAddressList,\r\n otherAddressList,\r\n shouldRenderEditAddressButton\r\n}) => {\r\n return (\r\n <Node {...ListAddress}>\r\n {heading}\r\n {isShowEmptyListMessage && emptyListMessage}\r\n {addButton}\r\n <AddressList {...primaryAddressList} shouldRenderEditAddressButton={shouldRenderEditAddressButton} />\r\n <AddressList {...otherAddressList} shouldRenderEditAddressButton={shouldRenderEditAddressButton} />\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * AddressAddUpdateComponent.\r\n * @param param0 - Root param.\r\n * @param param0.AddressForm - Address form.\r\n * @param param0.heading - Address heading.\r\n * @param param0.items - IAddressAddItem[].\r\n * @param param0.hasError - Boolean.\r\n * @param param0.error - Error message.\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns Address add update component node.\r\n */\r\nconst AddressAddUpdate: React.FC<IAddressAddUpdateProps> = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n <Node {...AddressForm}>\r\n {heading}\r\n {items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n <Node {...AddressItem} key={key}>\r\n {label}\r\n {alert}\r\n {input}\r\n </Node>\r\n );\r\n })}\r\n {hasError && (\r\n <Node {...error.AddressError}>\r\n {error.title}\r\n {error.message}\r\n </Node>\r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Account Management Address View Component.\r\n * @param props - Props.\r\n * @returns - AccountAddressManagement Module.\r\n */\r\nconst AccountManagementAddressView: React.FC<IAccountManagementAddressViewProps> = props => {\r\n const {\r\n AccountAddressManagement,\r\n viewState,\r\n showAddressList,\r\n showAddOrUpdateAddress,\r\n screenReaderNotification,\r\n shouldRenderEditAddressButton\r\n } = props;\r\n\r\n console.log(shouldRenderEditAddressButton);\r\n // Remove buttons from Invoice address\r\n const invoiceAddressId = 1;\r\n const addressId = props.customerAddresses.slice().find(address => address.AddressTypeValue === invoiceAddressId)?.RecordId;\r\n const invoiceAddress = showAddressList.otherAddressList.items.find(address => address.key === addressId);\r\n if (invoiceAddress) {\r\n invoiceAddress.editButton = undefined;\r\n invoiceAddress.primaryButton = undefined;\r\n invoiceAddress.removeButton = undefined;\r\n }\r\n\r\n return (\r\n <Module {...AccountAddressManagement}>\r\n {viewState.isShowAddresList && (\r\n <AddressLists {...showAddressList} shouldRenderEditAddressButton={shouldRenderEditAddressButton} />\r\n )}\r\n {viewState.isShowAddOrUpdateAddress && <AddressAddUpdate {...showAddOrUpdateAddress} />}\r\n {screenReaderNotification}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default AccountManagementAddressView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n IAddressShowItem,\r\n IAddressShowProps\r\n} from '@msdyn365-commerce-modules/address/src/modules/checkout-billing-address/../../common/components/address-show';\r\nimport { ICheckoutBillingAddressViewProps } from './b2b-checkout-billing-address';\r\n\r\n/**\r\n * Address show component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressDetail - Address detail.\r\n * @param param0.items - IAddressShowItem[].\r\n * @returns - Address Node.\r\n */\r\nconst AddressShow: React.FC<IAddressShowProps> = ({ AddressDetail, items }) => {\r\n return (\r\n <Node {...AddressDetail}>\r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description}</>;\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Checkout Billing Address View Component.\r\n * @param props - Props.\r\n * @returns - CheckoutBillingAddress Module.\r\n */\r\nconst CheckoutBillingAddressView: React.FC<ICheckoutBillingAddressViewProps> = props => {\r\n const { CheckoutBillingAddress, viewState, showAddress, error } = props;\r\n\r\n return (\r\n <Module {...CheckoutBillingAddress}>\r\n {viewState.isShowAddress && <AddressShow {...showAddress} />}\r\n {viewState.isError && error}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default CheckoutBillingAddressView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IAddressAddItem, IAddressAddUpdateProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressSelectItem, IAddressSelectProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressShowItem, IAddressShowProps } from '@msdyn365-commerce-modules/address';\r\nimport { ICheckoutShippingAddressViewProps } from './eve-checkout-shipping-address';\r\n\r\n/**\r\n * Address show component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressDetail - Address detail.\r\n * @param param0.items - IAddressShowItem[].\r\n * @returns - Address Node.\r\n */\r\nconst AddressShow: React.FC<IAddressShowProps> = ({ AddressDetail, items }) => {\r\n return (\r\n <Node {...AddressDetail}>\r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description}</>;\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address Select Component.\r\n * @param param0 - Root param.\r\n * @param param0.SelectAddress - Select address.\r\n * @param param0.addButton - Add button.\r\n * @param param0.items - IAddressSelectItem[].\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns - SelectAddress Node.\r\n */\r\nconst AddressSelect: React.FC<IAddressSelectProps> = ({\r\n SelectAddress,\r\n addButton,\r\n items,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n <Node {...SelectAddress}>\r\n {addButton}\r\n {items.map((item: IAddressSelectItem) => {\r\n const SelectItem = item.SelectItem;\r\n return (\r\n <Node {...SelectItem} key={item.key}>\r\n {item.input}\r\n <AddressShow {...item.showItems} />\r\n </Node>\r\n );\r\n })}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address Add Update Component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressForm - Address form.\r\n * @param param0.heading - Address heading.\r\n * @param param0.items - IAddressAddItem[].\r\n * @param param0.hasError - Boolean.\r\n * @param param0.error - Error message.\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns Address add update component node.\r\n */\r\nconst AddressAddUpdate: React.FC<IAddressAddUpdateProps> = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n <Node {...AddressForm}>\r\n {heading}\r\n {items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n <Node {...AddressItem} key={key}>\r\n {label}\r\n {alert}\r\n {input}\r\n </Node>\r\n );\r\n })}\r\n {hasError && (\r\n <Node {...error.AddressError}>\r\n {error.title}\r\n {error.message}\r\n </Node>\r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Checkout Shipping Address View Component.\r\n * @param props - Props.\r\n * @returns - CheckoutShippingAddress Module.\r\n */\r\nconst CheckoutShippingAddressView: React.FC<ICheckoutShippingAddressViewProps> = props => {\r\n const { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress, cartLineImages } = props;\r\n\r\n return (\r\n <Module {...CheckoutShippingAddress}>\r\n {cartLineImages}\r\n {viewState.isShowAddress && <AddressShow {...showAddress} />}\r\n {viewState.isShowAddresList && <AddressSelect {...showAddressSelect} />}\r\n {viewState.isShowAddOrUpdateAddress && <AddressAddUpdate {...showAddOrUpdateAddress} />}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default CheckoutShippingAddressView;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IGdnCheckoutBillingAddress contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum billingAddressOption {\r\n sameAsShipping = 'sameAsShipping',\r\n primaryAccount = 'primaryAccount',\r\n newAddress = 'newAddress'\r\n}\r\n\r\nexport interface IGdnCheckoutBillingAddressConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n billingAddressOption?: billingAddressOption;\r\n showAddressType?: boolean;\r\n paymenTenderType?: string;\r\n autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IGdnCheckoutBillingAddressResources {\r\n addressChangeCheckboxAriaLabel: string;\r\n addressBillingAddressHeading: string;\r\n addressSameAsShippingAddressAriaLabel: string;\r\n addressSameAsShippingAddressText: string;\r\n addressAddButtonText: string;\r\n addressAddButtonAriaLabel: string;\r\n addressAddNewButtonText: string;\r\n addressAddNewButtonAriaLabel: string;\r\n addressPrimaryButtonText: string;\r\n addressPrimaryButtonAriaLabel: string;\r\n addressEditButtonText: string;\r\n addressEditButtonAriaLabel: string;\r\n addressRemoveButtonText: string;\r\n addressRemoveButtonAriaLabel: string;\r\n addressSaveButtonText: string;\r\n addressSaveButtonAriaLabel: string;\r\n addressCancelButtonText: string;\r\n addressCancelButtonAriaLabel: string;\r\n addressStateDefaultSelectionText: string;\r\n addressNameLabel: string;\r\n addressNameRequiredErrorMessage: string;\r\n addressPhoneLabel: string;\r\n addressPhoneRequiredErrorMessage: string;\r\n addressPhoneFormatErrorMessage: string;\r\n addressZipCodeLabel: string;\r\n addressAddressTypeValueLabel: string;\r\n addressZipCodeRequiredErrorMessage: string;\r\n addressCityLabel: string;\r\n addressCityRequiredErrorMessage: string;\r\n addressCountyLabel: string;\r\n addressCountyRequiredErrorMessage: string;\r\n addressStateLabel: string;\r\n addressStateRequiredErrorMessage: string;\r\n addressThreeLetterISORegionNameLabel: string;\r\n addressThreeLetterISORegionNameRequiredErrorMessage: string;\r\n addressStreetLabel: string;\r\n addressStreetRequiredErrorMessage: string;\r\n addressDistrictLabel: string;\r\n addressDistrictNameLabel: string;\r\n addressDistrictRequiredErrorMessage: string;\r\n addressStreetNumberLabel: string;\r\n addressStreetNumberRequiredErrorMessage: string;\r\n addressBuildingComplimentLabel: string;\r\n addressBuildingComplimentRequiredErrorMessage: string;\r\n addressPostboxLabel: string;\r\n addressPostboxRequiredErrorMessage: string;\r\n addressHouseRULabel: string;\r\n addressHouseRURequiredErrorMessage: string;\r\n addressFlatRULabel: string;\r\n addressFlatRURequiredErrorMessage: string;\r\n addressCountryOKSMCodeRULabel: string;\r\n addressCountryOKSMCodeRURequiredErrorMessage: string;\r\n addressErrorMessageTitle: string;\r\n addressGenericErrorMessage: string;\r\n addressEmptyListAddressMessage: string;\r\n errorMessageTitle: string;\r\n addNewAddressText: string;\r\n usePrimaryAccountAddressAsBillingAddressText: string;\r\n addNewAddressAriaLabel: string;\r\n usePrimaryAccountAddressAsBillingAddressAriaLabel: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface IAutoSuggestOptionsData {\r\n maxResults?: number;\r\n}\r\n\r\nexport interface IGdnCheckoutBillingAddressProps<T> extends Msdyn365.IModule<T> {\r\n resources: IGdnCheckoutBillingAddressResources;\r\n config: IGdnCheckoutBillingAddressConfig;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IAddressAddItem, IAddressError } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressShowItem } from '@msdyn365-commerce-modules/address';\r\nimport { ICheckoutBillingAddressViewProps } from './gdn-checkout-billing-address';\r\nimport { billingAddressOption } from './gdn-checkout-billing-address.props.autogenerated';\r\n\r\nexport interface IAddressShowProps {\r\n AddressDetail: INodeProps;\r\n items: IAddressShowItem[];\r\n addressBillingAddressHeading: string;\r\n selectedBillingAddressOption: string;\r\n}\r\n\r\nexport interface IAddressAddUpdateProps {\r\n AddressForm: INodeProps;\r\n heading: React.ReactNode;\r\n items: IAddressAddItem[];\r\n hasError: boolean;\r\n error: IAddressError;\r\n isShowSaveButton: boolean;\r\n saveButton: React.ReactNode;\r\n isShowCancelButton: boolean;\r\n cancelButton: React.ReactNode;\r\n addressBillingAddressHeading: string;\r\n selectedBillingAddressOption: string;\r\n}\r\n\r\nenum billingAddressOptions {\r\n sameAsShipping = 'Same as Shipping Address',\r\n primaryAccount = 'Primary Account Address',\r\n newAddress = 'New Address'\r\n}\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 * @param param0.addressBillingAddressHeading - The heading text for the billing address section.\r\n * @param param0.selectedBillingAddressOption - The selected billing address option, which must be a key of billingAddressOptions.\r\n * @returns - Address Node.\r\n */\r\nconst AddressShow: React.FC<IAddressShowProps> = ({ AddressDetail, items, addressBillingAddressHeading, selectedBillingAddressOption }) => {\r\n return (\r\n <Node {...AddressDetail}>\r\n <p className='msc-address-detail__billing-heading'>\r\n {addressBillingAddressHeading} ({billingAddressOptions[selectedBillingAddressOption as keyof typeof billingAddressOptions]})\r\n </p>\r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description}</>;\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Address 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 - IAddressError.\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 - AddressForm Node.\r\n */\r\nconst AddressAddUpdate: React.FC<IAddressAddUpdateProps> = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton,\r\n selectedBillingAddressOption,\r\n addressBillingAddressHeading\r\n}) => {\r\n return (\r\n <Node {...AddressForm}>\r\n <p className='msc-address-form__billing-heading'>\r\n {' '}\r\n {addressBillingAddressHeading} ({billingAddressOptions[selectedBillingAddressOption as keyof typeof billingAddressOptions]})\r\n </p>\r\n {heading}\r\n {items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n <Node {...AddressItem} key={key}>\r\n {label}\r\n {alert}\r\n {input}\r\n </Node>\r\n );\r\n })}\r\n {hasError && (\r\n <Node {...error.AddressError}>\r\n {error.title}\r\n {error.message}\r\n </Node>\r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Checkout Billing Address View Component.\r\n * @param props - Props.\r\n * @returns - CheckoutBillingAddress Module.\r\n */\r\nconst CheckoutBillingAddressView: React.FC<ICheckoutBillingAddressViewProps> = props => {\r\n const {\r\n CheckoutBillingAddress,\r\n checkoutErrorRef,\r\n alert,\r\n viewState,\r\n // heading,\r\n sameAsShippingRadioButton,\r\n showAddress,\r\n showAddOrUpdateAddress,\r\n newAddressRadioButton,\r\n primaryAccountAddressRadioButton,\r\n resources,\r\n selectedBillingAddressOption,\r\n config\r\n } = props;\r\n const { addressBillingAddressHeading } = resources;\r\n\r\n const customShowAddressProps = {\r\n ...showAddress,\r\n addressBillingAddressHeading,\r\n selectedBillingAddressOption\r\n };\r\n\r\n const customUpdateAddressProps = {\r\n ...showAddOrUpdateAddress,\r\n addressBillingAddressHeading,\r\n selectedBillingAddressOption\r\n };\r\n\r\n const radioButtons = [\r\n { option: billingAddressOption.sameAsShipping, component: sameAsShippingRadioButton },\r\n { option: billingAddressOption.primaryAccount, component: primaryAccountAddressRadioButton },\r\n { option: billingAddressOption.newAddress, component: newAddressRadioButton }\r\n ];\r\n\r\n const orderedRadioButtons = radioButtons\r\n .sort((a, b) => {\r\n if (a.option === config.billingAddressOption) {\r\n return -1;\r\n }\r\n if (b.option === config.billingAddressOption) {\r\n return 1;\r\n }\r\n return 0;\r\n })\r\n .map(button => button.component);\r\n\r\n return (\r\n <Module {...CheckoutBillingAddress} ref={checkoutErrorRef}>\r\n {alert}\r\n {viewState.isShowRadioButtons && orderedRadioButtons}\r\n {viewState.isShowAddress && <AddressShow {...customShowAddressProps} />}\r\n {viewState.isShowAddOrUpdateAddress && <AddressAddUpdate {...customUpdateAddressProps} />}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default CheckoutBillingAddressView;\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// @ts-ignore\r\nimport {ICartLineItemViewProps, ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors} from \"@msdyn365-commerce-modules/cart\";\r\nimport { IInvoiceSummaryLines } from \"@msdyn365-commerce-modules/invoice-payment-summary\";\r\nimport { IOrderSummaryLines } from \"@msdyn365-commerce-modules/order-summary-utilities\";\r\nimport { ArrayExtensions } from \"@msdyn365-commerce-modules/retail-actions\";\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n ITelemetryContent,\r\n Node,\r\n TelemetryConstant\r\n} from \"@msdyn365-commerce-modules/utilities\";\r\nimport * as React from \"react\";\r\n\r\nimport { ICartProps as ICartExtensionProps } from \"../definition-extensions/cart.ext.props.autogenerated\";\r\n\r\n/**\r\n * Toggle Bopis Function.\r\n * @param cartLine -CartLine.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Toggle Bopis.\r\n */\r\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * Change Store Function.\r\n * @param cartLine -CartLine.\r\n * @returns Toggle Bopis.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const {\r\n shipInsteadDisplayText,\r\n shipToAddressDisplayText,\r\n pickItUpDisplayText,\r\n pickUpAtStoreWithLocationText,\r\n changeStoreDisplayText\r\n } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject(\"click\", telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <Node {...cartLine.pickUpInStore.ContainerProps}>\r\n <div className=\"msc-cart-line__bopis-method\">\r\n {isBopisSelected ? <span className=\"pick-up\">\r\n {pickUpAtStoreWithLocationText}\r\n </span> : <span className=\"ship\">\r\n {shipToAddressDisplayText}\r\n </span>}\r\n </div>\r\n {\r\n isBopisSelected &&\r\n <div className=\"msc-cart-line__bopis-fullfilment\">\r\n <span className=\"msc-cart-line__bopis-fullfilment-store\">\r\n {cartLine.pickUpInStore.orgUnitName}\r\n </span>\r\n <Button\r\n role=\"link\" className=\"msc-cart-line__bopis-changestore\"\r\n onClick={onChangeStoreHandler(cartLine)}>\r\n {changeStoreDisplayText}\r\n </Button>\r\n </div>\r\n }\r\n <Button className=\"msc-cart-line__bopis-btn\" {...puckUpinStoreAttribute}\r\n onClick={toggleBopisHandler(cartLine, isBopisSelected)}>\r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n </Button>\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderGroupBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject(\"click\", telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ?\r\n <Button role=\"link\" className=\"msc-cart-line__remove-item msc-btn\" onClick={onChangeStoreHandler(cartLine)}>\r\n {changeStoreDisplayText}\r\n </Button> : null}\r\n <Button\r\n role=\"link\" className=\"msc-cart-line__remove-item msc-btn\" {...puckUpinStoreAttribute}\r\n onClick={toggleBopisHandler(cartLine, isBopisSelected)}>\r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n </Button>\r\n </>\r\n );\r\n};\r\n\r\nconst renderCartLineComment = (cartLineComment: React.ReactNode, comment: string, cartLineId: string, cartProductTitle?: string) => {\r\n if (!cartLineComment) {\r\n return null;\r\n }\r\n return React.cloneElement(cartLineComment[0] as React.ReactElement, { comment, cartLineId, cartProductTitle})\r\n}\r\n\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param cartLineComment - Cart line comment element\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLine = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n cartLineComment: React.ReactNode | undefined, telemetryContent?: ITelemetryContent,\r\n isMultiplePickUp?: boolean, emailDeliveryModeCode?: string): JSX.Element => {\r\n const comment = cartLine.data?.cartline.Comment || '';\r\n const cartLineProductTitle = cartLine.data?.product?.Name;\r\n if (cartLine.error === resources.outOfStockErrorMessage) {\r\n return (\r\n <Node className=\"msc-cart-line__actions\">\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n </Node>\r\n );\r\n }\r\n\r\n if (isMultiplePickUp) {\r\n return (\r\n <Node className=\"msc-cart-line-group__extra-actions\">\r\n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n </Node>\r\n );\r\n }\r\n\r\n if (cartLine.addToOrderTemplate) {\r\n return (\r\n <Node className=\"msc-cart-line__extra-actions\">\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n </Node>\r\n );\r\n }\r\n\r\n return (\r\n <Node className=\"msc-cart-line__actions\">\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlinesInternal = (isPrintView: boolean, cartLines: ICartlinesViewProps[], resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, cartLineComment: React.ReactNode | undefined, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n return (\r\n cartLines.map((cartLine, index) => {\r\n const itemIndex = index;\r\n return (\r\n <div className={`msc-cart-lines-item ${isPrintView ? \"gar-cart-line__print-view\" : \"\"}`} key={itemIndex}>\r\n {cartLine.cartline}\r\n <span className=\"msc-cart-lines-button-container\">\r\n {isMultiplePickUp ? null : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {\r\n renderCartLine(cartLine, resources, storeSelector, cartLineComment, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n }\r\n </span>\r\n </div>\r\n );\r\n }));\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param props - The cart line props.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param waitingComponent - Waiting component element.\r\n * @param cartLoadingStatus - Cart loading status string.\r\n * @param isCartDataResult - Flag to check if there is cart data.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (isPrintView: boolean, props: ICartViewProps & ICartExtensionProps<{}>, cartLines: ICartlinesViewProps[] | undefined, resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string, isCartDataResult: boolean, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n const { slots: { cartLineComment, orderLevelComment } } = props;\r\n if (cartLoadingStatus) {\r\n return (<>\r\n {cartLoadingStatus}\r\n </>);\r\n }\r\n\r\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\r\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\r\n if (cartLines) {\r\n return props.multiplePickUpEnabled ? (\r\n renderCartlinesInternal(isPrintView, cartLines, resources, storeSelector, cartLineComment, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n ) : (\r\n <Node {...props.CartlinesWrapper}>\r\n {renderCartlinesInternal(isPrintView, cartLines, resources, storeSelector, cartLineComment, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\r\n {renderOrderLevelComment(isPrintView, orderLevelComment)}\r\n </Node>\r\n );\r\n }\r\n\r\n return (isCartDataResult ? (\r\n <div className=\"msc-cart__empty-cart\">\r\n <div className=\"msc-cart-line\">\r\n {props.slots.emptyCart}\r\n </div>\r\n </div>\r\n ) : <>\r\n {waitingComponent}\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const itemCountOne: number = 1;\r\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\r\n const countTitle = `(${count} ${suffix})`;\r\n return (\r\n <>\r\n <Node className=\"msc-cart-lines-group-wrapper__bopis-heading-title\">\r\n {isBopisSelected ? <p className=\"msc-cart-lines-group-wrapper__bopis-heading-title-st\">\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {\", \"}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n </p> : null}\r\n <p className=\"msc-cart-lines-group-wrapper__bopis-heading-title-ct\">\r\n {countTitle}\r\n </p>\r\n </Node>\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupHeader = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number, emailDeliveryModeCode?: string) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n <div className=\"msc-cart-lines-group-wrapper__bopis-heading\">\r\n <p\r\n className={`msc-cart-lines-group-wrapper__bopis-heading-${groupTitle.toLowerCase().replace(\" \", \"-\")}-icon`} />\r\n <p className={`msc-cart-lines-group-wrapper__bopis-heading-${groupTitle.toLowerCase().replace(\" \", \"-\")}`}>\r\n {groupTitle}\r\n </p>\r\n {renderCartLinesGroupTitle(cartLine, resources, count)}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Returns count of products.\r\n * @param cartLine - The cart line view props.\r\n * @returns Number of products.\r\n */\r\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n const defaultItemCount = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\r\n\r\n }, defaultItemCount);\r\n return countItem;\r\n};\r\n\r\n/**\r\n * Render Cart Lines group.\r\n * @param props - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroup = (isPrintView: boolean, props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\r\n return (\r\n <div className=\"msc-cart-lines-group\">\r\n {props.cartLinesGroup.map(cartlines => {\r\n return (<div key={cartlines[0].cartlineId} className=\"msc-cart-lines-group-wraper\">\r\n {renderCartLinesGroupHeader(cartlines[0], resources, countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n {renderCartlines(isPrintView, props, cartlines, props.resources, props.storeSelector,\r\n props.waitingComponent, props.cartLoadingStatus, props.cartDataResult,\r\n props.telemetryContent, props.multiplePickUpEnabled, props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n </div>);\r\n })}\r\n </div>\r\n );\r\n }\r\n return (props.cartDataResult ? (\r\n <div className=\"msc-cart__empty-cart\">\r\n <div className=\"msc-cart-line\">\r\n {props.slots.emptyCart}\r\n </div>\r\n </div>\r\n ) : <>\r\n {props.waitingComponent}\r\n </>\r\n );\r\n\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param errorData - Error component.\r\n * @returns JSX Element.\r\n */\r\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\r\n return null;\r\n }\r\n return (\r\n <Node {...errorData.Wrapper}>\r\n {errorData.header}\r\n {errorData.errors}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render invoice summary.\r\n * @param invoiceSummaryLines - Invoice summary component.\r\n * @param orderSummaryItems - Order summary component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderInvoiceSummarylines = (invoiceSummaryLines: IInvoiceSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error(\"InvoiceSummary content is empty, module wont render\");\r\n return null;\r\n }\r\n return (\r\n <Node {...orderSummaryItems}>\r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render order summary.\r\n * @param orderSummaryLines - Order summary component.\r\n * @param orderSummaryItems - Order summary items component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummarylines = (orderSummaryLines: IOrderSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n props.context.telemetry.error(\"OrderSummary content is empty, module wont render\");\r\n return null;\r\n }\r\n return (\r\n <Node {...orderSummaryItems}>\r\n {orderSummaryLines.subtotal}\r\n {/* {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null} */}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.orderTotal}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param promotions - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n <Node {...promotions.promotionMessageWrapper} >\r\n {promotions.promotionMessage}\r\n <Node className=\"msc-cart__promotion_link-section\">\r\n {promotions.promotionSeeAllLink}\r\n </Node>\r\n {promotions.promotionDialog}\r\n </Node>\r\n\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n <Node className=\"msc-order-summary__checkout\">\r\n {props.cart?.hasInvoiceLine ? null : props.promoCode}\r\n <Node className=\"msc-order-summary__checkout__action\">\r\n {/* {props.checkoutAsSignInUserButton} */}\r\n {props.checkoutAsGuestButton}\r\n </Node>\r\n {props.createTemplateFromCartButton}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout button.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n <Node className=\"msc-order-summary__checkout-button\">\r\n {/* {props.checkoutAsSignInUserButton} */}\r\n {props.checkoutAsGuestButton}\r\n </Node>\r\n );\r\n};\r\n\r\nconst _renderPrintView = (isPrintView: boolean,\r\n handlePrintViewChange: (e: React.MouseEventHandler<HTMLInputElement>) => void,\r\n printViewLabel: string\r\n): React.ReactNode => (\r\n <div className=\"input-group print-view-toggle\">\r\n <label className=\"input-group-prepend print-view-toggle__label\">\r\n <span className={\"print-view-toggle__heading\"}>{printViewLabel}</span>\r\n {/* @ts-ignore */}\r\n <input onClick={handlePrintViewChange} type=\"checkbox\" className=\"print-view-toggle__checkbox\" />\r\n <div\r\n className={`print-view-toggle__toggle print-view-toggle__toggle--${isPrintView ? \"checked\" : \"unchecked\"}`} />\r\n </label>\r\n\r\n\r\n </div>\r\n);\r\n\r\n/**\r\n * Renders the order-level-comment that displays a comment at the bottom of the cart.\r\n */\r\n\r\nconst renderOrderLevelComment = (isPrintView: boolean, orderLevelComment: React.ReactNode | undefined): React.ReactNode => {\r\n if (!orderLevelComment) {\r\n return null;\r\n }\r\n return(\r\n <div className={`order-comment-container ${isPrintView ? \"order-comment-container__print-view\" : \"\"}`}>\r\n {orderLevelComment}\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Render cart view.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst CartView: React.FC<ICartViewProps & ICartExtensionProps<{}>> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\r\n\r\n const handlePrintViewChange = () => setIsPrintView(!isPrintView);\r\n const [isPrintView, setIsPrintView] = React.useState<boolean>(false);\r\n const printViewToggle = _renderPrintView(isPrintView, handlePrintViewChange, \"Print View\");\r\n const totalItemCountOne: number = 1;\r\n const updatedTitle = (\r\n <h1 className=\"msc-cart__heading\">\r\n {props.resources.cartTitle}\r\n <span className=\"msc-cart__heading-count-items\">\r\n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? \"items\" : \"item\"})`}\r\n </span>\r\n </h1>\r\n );\r\n return (\r\n <div className={props.className} id={props.id} {...props.renderModuleAttributes(props)}>\r\n {updatedTitle}\r\n <div className=\"ms-cart__estimated-total\">\r\n {props.orderSummaryLineitems?.orderTotal}\r\n </div>\r\n {renderOrderSummaryCheckoutButton(props)}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? renderCartLinesGroup(isPrintView, props, props.resources) : renderCartlines(isPrintView, props, props.cartlines,\r\n props.resources, props.storeSelector, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult)}\r\n {props.orderSummaryHeading &&\r\n <Node {...props.OrderSummaryWrapper}>\r\n {printViewToggle}\r\n <Node className=\"msc-order-summary__items\">\r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine ? renderInvoiceSummarylines(\r\n props.invoiceSummaryLineitems, props.OrderSummaryItems, props) : renderOrderSummarylines(\r\n props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {renderErrorBlock(props.OrderSummaryErrors)}\r\n </Node>\r\n {renderOrderSummaryCheckout(props)}\r\n </Node>}\r\n {props.storeSelector}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CartView;\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 } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\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 as ICheckoutExtensionProps } from '../definition-extensions/checkout.ext.props.autogenerated';\r\nimport { AttributeBooleanValue, Cart } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IChargeLinesBreakdownData {\r\n chargeLineLabel?: string;\r\n chargeCode?: string;\r\n}\r\n\r\nexport const PickUpAtStoreComponent: React.FC<IPickUpAtStore> = ({ PickUpAtStore, label, location }) => (\r\n <Node {...PickUpAtStore}>\r\n {label}\r\n {location}\r\n </Node>\r\n);\r\n\r\nexport interface IOrderSummaryExtended extends IOrderSummary {\r\n otherChargesLines: React.ReactNode[];\r\n displayDefaultShippingLine: boolean | undefined;\r\n}\r\n\r\nexport const EmailDeliveryComponent: React.FC<IEmailDelivery> = ({ EmailDelivery, label }) => <Node {...EmailDelivery}>{label}</Node>;\r\n\r\nexport const LineItemComponent: React.FC<ILineItem> = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n <Node {...LineItem}>\r\n {item}\r\n {pickUpAtStore && <PickUpAtStoreComponent {...pickUpAtStore} />}\r\n {emailDelivery && <EmailDeliveryComponent {...emailDelivery} />}\r\n </Node>\r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC<ILineItemDeliveryGroup> = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n <Node {...LineItemDeliveryGroup}>\r\n {heading}\r\n <Node {...LineItemList}>\r\n {lineItems.map(lineItem => (\r\n <LineItemComponent key={lineItem.LineId} {...lineItem} />\r\n ))}\r\n </Node>\r\n </Node>\r\n);\r\n\r\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC<ILineItemDeliveryGroup> = ({\r\n LineItemDeliveryGroup,\r\n LineItemList,\r\n heading,\r\n lineItems,\r\n lineItemWraper,\r\n lineItemWraperIcon\r\n}) => (\r\n <Node {...LineItemDeliveryGroup}>\r\n {lineItemWraperIcon}\r\n {lineItemWraper}\r\n {heading}\r\n <Node {...LineItemList}>\r\n {lineItems.map(lineItem => (\r\n <LineItemComponentWithMultiplePickUp key={lineItem.LineId} {...lineItem} />\r\n ))}\r\n </Node>\r\n </Node>\r\n);\r\n\r\nexport const LineItemComponentWithMultiplePickUp: React.FC<ILineItem> = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n <Node {...LineItem}>\r\n {item}\r\n {emailDelivery && <EmailDeliveryComponent {...emailDelivery} />}\r\n </Node>\r\n);\r\n\r\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC<IPickUpAtStore> = ({ PickUpAtStore, label, location }) => (\r\n <Node {...PickUpAtStore}>\r\n {label}\r\n {location}\r\n </Node>\r\n);\r\n\r\nexport const LineItemsComponent: React.FC<ILineItems> = ({\r\n LineItems,\r\n Header,\r\n heading,\r\n editLink,\r\n itemsForPickup,\r\n itemsForShip,\r\n itemsForEmail,\r\n itemsGroupWithMulitplePickupMode\r\n}) => (\r\n <Node {...LineItems}>\r\n <Node {...Header}>\r\n {heading}\r\n {editLink}\r\n </Node>\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && <LineItemGroupComponent {...itemsForPickup} />}\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && <LineItemGroupComponent {...itemsForEmail} />}\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && <LineItemGroupComponent {...itemsForShip} />}\r\n {itemsGroupWithMulitplePickupMode !== undefined\r\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\r\n return <LineItemGroupComponentWithMultiplePickUp {...item} key={index} />;\r\n })\r\n : null}\r\n </Node>\r\n);\r\n\r\nconst OrderSummaryComponent: React.FC<IOrderSummaryExtended> = ({ heading, lines, otherChargesLines, displayDefaultShippingLine }) => (\r\n <div className='msc-order-summary-wrapper'>\r\n {heading}\r\n <div className='msc-order-summary__items'>\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {displayDefaultShippingLine && lines.shipping}\r\n {/* {lines.otherCharge} */}\r\n {otherChargesLines && otherChargesLines}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\nconst PaymentSummaryComponent: React.FC<IInvoicePaymentSummary> = ({ heading, lines }) => (\r\n <div className='msc-invoice-summary-wrapper'>\r\n {heading}\r\n <div className='msc-invoice-summary__items'>\r\n {lines && (\r\n <>\r\n {lines.invoices}\r\n {lines.giftCard}\r\n {lines.loyalty}\r\n {lines.orderTotal}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\nconst otherChargesLines = (\r\n cart: Cart,\r\n chargeCodes: IChargeLinesBreakdownData[] | undefined,\r\n currencyFormatter: (price: string | number, currencyCode?: string | undefined) => string,\r\n displayDefaultShippingLine: boolean | undefined\r\n): React.ReactNode[] => {\r\n let lines = cart.ChargeLines;\r\n let linesNode: React.ReactNode[] = [];\r\n let otherChargeTotal = cart.OtherChargeAmount || 0;\r\n chargeCodes?.map(c => {\r\n const node = lines\r\n ?.filter(line => line.ChargeCode === c.chargeCode)\r\n .map(r => {\r\n otherChargeTotal -= r.CalculatedAmount || 0;\r\n return _renderLineChargeNode(c.chargeLineLabel || '', currencyFormatter(r.CalculatedAmount?.toString() ?? ''));\r\n });\r\n linesNode.push(node);\r\n });\r\n // if the remaining amount is over 1 cent, display the other Charges line. This avoids potential fraction of a penny being displayed as zero.\r\n if (otherChargeTotal >= 0.01) {\r\n const otherChargesNode = _renderLineChargeNode('Other Charges', currencyFormatter(otherChargeTotal.toString() ?? ''));\r\n linesNode.push(otherChargesNode);\r\n }\r\n // if no charge exists, display shipping to be calculated text\r\n // if (cart.ChargeAmount === 0 && !displayDefaultShippingLine) {\r\n // const shippingToBeDetermined = _renderLineChargeNode('Shipping', 'To be calculated');\r\n // linesNode.push(shippingToBeDetermined);\r\n // }\r\n return linesNode;\r\n};\r\n\r\nconst _renderLineChargeNode = (chargeName: string, chargeAmount: string): React.ReactNode => {\r\n return (\r\n <p className='msc-order-summary__line-other-charges'>\r\n <span className='msc-order-charge-line__label'>{chargeName}</span>{' '}\r\n <span className='msc-price msc-order-summary__value'>{chargeAmount}</span>\r\n </p>\r\n );\r\n};\r\n\r\nconst _renderShipOnCheckout = (\r\n shipCompleteOnCheckout: boolean,\r\n handleShipCompleteOnCheckoutChange: (e: React.MouseEvent<HTMLInputElement, MouseEvent>) => void,\r\n shipCompleteOnCheckoutLabel: string\r\n): React.ReactNode => (\r\n <div className='ms-checkout__ship-on-checkout'>\r\n <label className='input-group-prepend print-view-toggle__label'>\r\n <span className={'print-view-toggle__heading'}>{shipCompleteOnCheckoutLabel}</span>\r\n <input\r\n value={shipCompleteOnCheckout ? 1 : 0}\r\n onClick={handleShipCompleteOnCheckoutChange}\r\n type='checkbox'\r\n className='print-view-toggle__checkbox'\r\n />\r\n <div className={`print-view-toggle__toggle print-view-toggle__toggle--${shipCompleteOnCheckout ? 'checked' : 'unchecked'}`} />\r\n </label>\r\n </div>\r\n);\r\n\r\nconst _renderOrderComment = (commentHeading: string, commentString: string): React.ReactNode => {\r\n const emptyStringClassName = commentString == '';\r\n return (\r\n <div className={`order-level-comment-wrapper ${emptyStringClassName ? 'order-level-comment-wrapper--empty-string' : ''}`}>\r\n <h1 className='order-level-comment-wrapper__heading'>{commentHeading}</h1>\r\n <p className='order-level-comment-wrapper__text'>{commentString}</p>\r\n </div>\r\n );\r\n};\r\n\r\nconst CheckoutView: React.FC<ICheckoutViewProps & ICheckoutExtensionProps<{}>> = props => {\r\n const attributeArr = props.data.checkout.result?.checkoutCart.cart.AttributeValues || [];\r\n\r\n const getShipCompleteIndex = (): number => {\r\n return (\r\n props.data.checkout.result?.checkoutCart.cart.AttributeValues?.findIndex(attribute => attribute.Name === 'ShipComplete') || -1\r\n );\r\n };\r\n // Get the text in the order level comment, if it doesn't exist, assign an empty string\r\n const getCommentText = (): string => {\r\n return props.data.checkout.result?.checkoutCart.cart.Comment || '';\r\n };\r\n // Get the comment heading text from the resources\r\n const getCommentHeadingText = (): string => {\r\n return props.resources.commentHeadingText;\r\n };\r\n const getShipCompleteValue = (): boolean => {\r\n const shipCompleteIndex = getShipCompleteIndex();\r\n if (shipCompleteIndex === -1) {\r\n return false;\r\n } else {\r\n const attr = attributeArr[shipCompleteIndex] as AttributeBooleanValue;\r\n return !!attr?.Value;\r\n }\r\n };\r\n const handleShipCompleteOnCheckoutChange = () => {\r\n const shipComplete = {\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeBooleanValue',\r\n Name: 'ShipComplete',\r\n Value: !getShipCompleteValue()\r\n };\r\n const idx = getShipCompleteIndex();\r\n idx === -1 ? attributeArr.push(shipComplete) : attributeArr.splice(idx, 1, shipComplete);\r\n const cart: Cart = Object.assign({}, props.data.checkout.result?.checkoutCart.cart);\r\n if (cart) {\r\n cart.AttributeValues = attributeArr;\r\n saveShipCompleteToCart(cart);\r\n }\r\n };\r\n const saveShipCompleteToCart = async (cart: Cart) => {\r\n if (cart) {\r\n const checkoutState = props.data.checkout.result;\r\n if (!checkoutState) {\r\n return;\r\n }\r\n\r\n await checkoutState.checkoutCart.updateCart({ newCartObject: cart }).then(() => {\r\n setShipCompleteOnCheckout(getShipCompleteValue());\r\n });\r\n }\r\n };\r\n const [shipCompleteOnCheckout, setShipCompleteOnCheckout] = React.useState<boolean>(getShipCompleteValue());\r\n const shipCompleteOnCheckoutToggle = _renderShipOnCheckout(\r\n shipCompleteOnCheckout,\r\n handleShipCompleteOnCheckoutChange,\r\n props.resources.shipCompleteOnCheckoutLabel\r\n );\r\n const {\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 config: { displayDefaultShippingLine },\r\n context: { cultureFormatter }\r\n } = props;\r\n const cart: Cart = Object.assign({}, props.data.checkout.result?.checkoutCart.cart);\r\n const chargeLinesBreakdown: IChargeLinesBreakdownData[] = props.context.app.config.chargeLinesBreakdown;\r\n\r\n let chargelines = otherChargesLines(cart, chargeLinesBreakdown, cultureFormatter.formatCurrency, displayDefaultShippingLine);\r\n const orderSummaryExtended: IOrderSummaryExtended = {\r\n ...orderSummary!,\r\n otherChargesLines: chargelines,\r\n displayDefaultShippingLine: displayDefaultShippingLine\r\n };\r\n\r\n return (\r\n <Module {...checkoutProps}>\r\n {!hasSalesOrder && <Node {...headerProps}>{title}</Node>}\r\n {!hasSalesOrder && (\r\n <Node {...bodyProps}>\r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n <Node {...mainProps}>\r\n {guidedForm}\r\n <Node {...termsAndConditionsProps}>{termsAndConditions}</Node>\r\n {props.config.shipCompleteOnCheckout && shipCompleteOnCheckoutToggle}\r\n <Node {...mainControlProps}>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n </Node>\r\n <Node {...sideProps}>\r\n {!hasInvoiceLine\r\n ? orderSummary && <OrderSummaryComponent {...orderSummaryExtended} />\r\n : invoicePaymentSummary && <PaymentSummaryComponent {...invoicePaymentSummary} />}\r\n <Node {...sideControlFirstProps}>\r\n <Node {...termsAndConditionsProps}>{termsAndConditions}</Node>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n {lineItems && <LineItemsComponent {...lineItems} />}\r\n {_renderOrderComment(getCommentHeadingText(), getCommentText())}\r\n <Node {...sideControlSecondProps}>\r\n <Node {...termsAndConditionsProps}>{termsAndConditions}</Node>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n </Node>\r\n </>\r\n )}\r\n </Node>\r\n )}\r\n {hasSalesOrder && orderConfirmation}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 MsDyn365, { getUrlSync } from \"@msdyn365-commerce/core\";\r\nimport { IHeaderViewProps, Logo } from '@msdyn365-commerce-modules/header';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IHeaderProps } from '../definition-extensions/header.ext.props.autogenerated';\r\n\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n *\r\n * HeaderView component.\r\n * @extends {React.PureComponent<IHeaderViewProps>}\r\n */\r\nexport class HeaderView extends React.PureComponent<IHeaderViewProps & IHeaderProps<{}>> {\r\n private readonly menuNode: React.RefObject<HTMLDivElement>;\r\n\r\n public constructor(props: IHeaderViewProps & IHeaderProps<{}>) {\r\n\r\n super(props);\r\n this.menuNode = React.createRef();\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.config.useStickyHeader) {\r\n // Set header update methods to trigger on scroll\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('scroll', () => {\r\n this._configureStickyHeader();\r\n });\r\n }\r\n this._configureStickyHeader();\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { HeaderTag, HeaderContainer, HeaderTopBarContainer, Divider, MobileMenuContainer, MobileMenuBodyContainer, MobileMenuLinksContainer\r\n , config: { showQuickOrderLink, showPhoneNumber, phoneNumber }\r\n } = this.props;\r\n \r\n const quickOrderUrl = getUrlSync('quickorder', this.props.context.actionContext);\r\n return (\r\n <Module {...HeaderTag}>\r\n <Node {...HeaderContainer}>\r\n <Node {...HeaderTopBarContainer}>\r\n\r\n <div className='mobile-navicon-container'>\r\n {this.props.navIcon}\r\n </div>\r\n <div className={'ms-header__desktop-logo'}>\r\n {this.props.logo}\r\n {showPhoneNumber == \"yes\" && phoneNumber ? this._renderPhoneNumber(this.props) : null}\r\n </div>\r\n <div className=\"ms-header__desktop-nav-items\">\r\n <div className='desktop-navicon-container' ref={this.menuNode}>\r\n {this._renderReactFragment(this.props.menuBar)}\r\n </div>\r\n {this._renderMobileLogo()}\r\n {this._renderReactFragment(this.props.search)}\r\n {this.props.preferredStore}\r\n {this._renderAccountBlock(this.props)}\r\n <Node {...Divider} />\r\n {showQuickOrderLink ? this._renderQuickViewIcon(quickOrderUrl || '#') : null}\r\n {this.props.cartIcon}\r\n {this._renderReactFragment(this.props.siteOptions)}\r\n </div>\r\n\r\n </Node>\r\n <Node {...MobileMenuContainer}>\r\n <Node {...MobileMenuBodyContainer}>\r\n { this.props.MobileMenuHeader }\r\n {this._renderReactFragment(this.props.menuBar)}\r\n <Node {...MobileMenuLinksContainer}>\r\n { this.props.accountLinks ? this.props.accountLinks.map(link => link) : false }\r\n { this.props.siteOptions }\r\n { this.props.wishListIconMobile }\r\n { this.props.signInLink }\r\n { this.props.signOutLink }\r\n </Node>\r\n </Node>\r\n </Node>\r\n </Node>\r\n </Module>\r\n );\r\n }\r\n\r\n /**\r\n * Function to render phone number beside the logo.\r\n * @param props - IHeaderProps.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private _renderPhoneNumber(props: IHeaderProps<{}>): JSX.Element | null {\r\n const { config: { phoneNumber } } = props;\r\n const telephoneLink: string = `tel:+1-${phoneNumber}`;\r\n return (\r\n <div className=\"ms-header__phone-number\">\r\n <a href={telephoneLink} className=\"ms-header__phone-number-link\">{phoneNumber ? phoneNumber : \"\"}</a>\r\n </div>\r\n );\r\n }\r\n\r\n private _renderQuickViewIcon = (quickOrderLink: string) => (\r\n <div className={'ms-header__quick-order'}>\r\n <a href={quickOrderLink} className={'ms-header__quick-order-button'}>\r\n <span className={'ms-header__quick-order-button-text'}>Quick Order</span>\r\n </a>\r\n </div>\r\n )\r\n\r\n /**\r\n * Function to update header.\r\n */\r\n private readonly _configureStickyHeader = (): void => {\r\n // Get heights of cookie and promotion banners\r\n const defaultValue = 0;\r\n const headerAlertsContainer: HTMLElement | null = document.querySelector('.ms-promo-banner');\r\n const bannerHeights = headerAlertsContainer ? headerAlertsContainer.offsetHeight : defaultValue;\r\n\r\n // Triggers opacity change of header\r\n const headerElement = document.querySelector('header .default-container');\r\n if (headerElement) {\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > defaultValue) {\r\n headerElement.classList.add('lock-opaque');\r\n headerElement.classList.add('fixed');\r\n } else {\r\n headerElement.classList.remove('lock-opaque');\r\n headerElement.classList.remove('fixed');\r\n }\r\n }\r\n\r\n // Update sticky header position and opacity\r\n const stickyHeader: HTMLElement | null = document.querySelector('.desktop-navicon-container');\r\n const headerLogo: HTMLElement | null = document.querySelector('.ms-header__logo');\r\n\r\n if (stickyHeader && headerLogo) {\r\n // Fix center sticky header\r\n const navStickyPos = headerLogo.offsetHeight + bannerHeights;\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > navStickyPos) {\r\n stickyHeader.classList.add('fixed');\r\n } else {\r\n stickyHeader.classList.remove('fixed');\r\n }\r\n }\r\n };\r\n\r\n private _renderMobileLogo(): JSX.Element | null {\r\n const { config, context, typeName } = this.props;\r\n return (\r\n <Logo {\r\n ...{ link: config.logoLink,\r\n image: config.mobileLogoImage ?? {},\r\n className: 'ms-header__mobile-logo',\r\n gridSettings: context.request.gridSettings,\r\n requestContext: context.request,\r\n typeName }} />\r\n );\r\n }\r\n\r\n /**\r\n * Function to render account block.\r\n * @param props - IHeaderViewProps.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private readonly _renderAccountBlock = (props: IHeaderViewProps): JSX.Element | null => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { AccountInfoDropdownParentContainer, AccountInfoDropdownPopoverConentContainer,\r\n accountInfoDropdownButton,\r\n signOutLink,\r\n signInLink,\r\n accountLinks\r\n } = props;\r\n if (AccountInfoDropdownParentContainer) {\r\n const accountClassName = classnames(AccountInfoDropdownParentContainer.className, 'account-desktop');\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n <Node {...AccountInfoDropdownParentContainer} className={accountClassName}>\r\n {accountInfoDropdownButton}\r\n <Node {...AccountInfoDropdownPopoverConentContainer}>\r\n { accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false }\r\n {signOutLink}\r\n </Node>\r\n </Node>\r\n );\r\n } else if (signInLink) {\r\n return (\r\n <Node {...AccountInfoDropdownParentContainer} className={accountClassName}>\r\n {signInLink}\r\n </Node>\r\n );\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Function to render react fragment.\r\n * @param items - React nodes.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private readonly _renderReactFragment = (items: React.ReactNode[]): JSX.Element | null => {\r\n return (\r\n <>\r\n {ArrayExtensions.hasElements(items) ? items.map((slot: React.ReactNode) => {\r\n return (<>\r\n {slot}\r\n </>);\r\n }) : null}\r\n </>\r\n );\r\n };\r\n}\r\n\r\nexport default HeaderView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHeaderViewProps } from './header';\n\nconst headerView: React.FC<IHeaderViewProps> = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer,\n Divider\n } = props;\n return (\n <Module {...HeaderTag}>\n <Node {...HeaderContainer}>\n <Node {...HeaderTopBarContainer}>\n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {props.currentDistributor}\n {_renderDesktopAccountBlock(props)}\n {props.wishListIconDesktop}\n <Node {...Divider} />\n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n </Node>\n <Node {...MobileMenuContainer}>\n <Node {...MobileMenuBodyContainer}>\n {props.MobileMenuHeader}\n {_renderReactFragment(props.menuBar)}\n <Node {...MobileMenuLinksContainer}>\n {props.accountLinks ? props.accountLinks.map(link => link) : false}\n {props.siteOptions}\n {props.wishListIconMobile}\n {props.signInLink}\n {props.signOutLink}\n </Node>\n </Node>\n </Node>\n {_renderReactFragment(props.menuBar)}\n </Node>\n </Module>\n );\n};\n\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n <Node {...AccountInfoDropdownParentContainer}>\n {accountInfoDropdownButton}\n <Node {...AccountInfoDropdownPopoverConentContainer}>\n {accountLinks ? accountLinks.map(link => link) : false}\n {signOutLink}\n </Node>\n </Node>\n );\n } else if (signInLink) {\n return <Node {...AccountInfoDropdownParentContainer}>{signInLink}</Node>;\n }\n }\n props.context.telemetry.error('Header content is empty, module wont render.');\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return <React.Fragment key={index}>{slot}</React.Fragment>;\n })\n : null}\n </>\n );\n}\n\nexport default headerView;\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 { RatingComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { IHistogramItemViewProps,\r\n IRatingsHistogramData,\r\n IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { format, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IRatingsHistogramProps, IRatingsHistogramResources } from '../definition-extensions/ratings-histogram.ext.props.autogenerated';\r\n\r\n/**\r\n * Histogram item.\r\n * @param props - Histogram Item ViewProps.\r\n * @returns Histogram Item node.\r\n */\r\nconst histogramItem = (props: IHistogramItemViewProps) => {\r\n return (\r\n <Node {...props.buttonProps} >\r\n {props.starLabel}\r\n {props.bar}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Average ratings.\r\n * @param data - Props data.\r\n * @param context - Histogram Item ViewProps.\r\n * @param typeName - Histogram Item ViewProps.\r\n * @param componentId - Histogram Item ViewProps.\r\n * @param resources - Module resource strings.\r\n * @returns Average ratings.\r\n */\r\nconst averageRating = (data: IRatingsHistogramData, context: ICoreContext, typeName: string, componentId: string, resources: IRatingsHistogramResources) => {\r\n const defaultAverageRating: number = 0;\r\n const reviewsCount = data.ratingsSummary.result?.reviewsCount ?? defaultAverageRating;\r\n const reviewsCountString = resources.numberOfReviewsString ? format(resources.numberOfReviewsString, reviewsCount) : `${reviewsCount} reviews`;\r\n\r\n return (\r\n <div className='ms-ratings-histogram__ratings'>\r\n <div className='ms-ratings-histogram__ratings__heading'>\r\n {data.ratingsSummary.result?.averageRating}\r\n </div>\r\n <div>\r\n <RatingComponent\r\n context={context}\r\n id={componentId}\r\n typeName={typeName}\r\n avgRating={data.ratingsSummary.result?.averageRating ?? defaultAverageRating}\r\n readOnly\r\n ariaLabel={format(resources.averageRatingAriaLabel, data.ratingsSummary.result?.averageRating, '5')}\r\n data={{}}\r\n />\r\n </div>\r\n <div className='ms-ratings-histogram__ratings__reviews'>\r\n {reviewsCountString}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Histogram view.\r\n * @param props - Ratings HistogramV iewProps.\r\n * @returns Histogram view module.\r\n */\r\nconst RatingsHistogramView: React.FC<IRatingsHistogramViewProps & IRatingsHistogramProps<{}>> = props => {\r\n const { heading, histogramItems, histogramProps, moduleProps, data, resources } = props;\r\n const context = props.context;\r\n const typeName = props.typeName;\r\n const moduleId = props.id;\r\n\r\n return (\r\n <Module {...moduleProps}>\r\n {heading}\r\n <div className='ms-ratings-histogram__container'>\r\n {averageRating(data, context, typeName, moduleId, resources)}\r\n <Node {...histogramProps}>\r\n {histogramItems.map(item => {\r\n return histogramItem(item);\r\n })}\r\n </Node>\r\n </div>\r\n </Module>\r\n );\r\n};\r\n\r\nexport default RatingsHistogramView;\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// @ts-ignore\r\nimport { ICartLineItemViewProps, ICartlinesViewProps, ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart';\r\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n ITelemetryContent,\r\n Node,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n ModalHeader,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nimport { ICartConfig, ICartProps as ICartExtensionProps, ICartResources } from '../definition-extensions/cart.ext.props.autogenerated';\r\nimport { getAdvancedNotesAsync } from '../../../actions/DataActionExtension.g';\r\nimport { IAdvancedNoteEntity } from '../../../actions/DataServiceEntities.g';\r\nimport { LinePagination } from './components/line-pagination';\r\n\r\n/**\r\n * Toggle Bopis Function.\r\n * @param cartLine -CartLine.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Toggle Bopis.\r\n */\r\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * Change Store Function.\r\n * @param cartLine -CartLine.\r\n * @returns Toggle Bopis.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderBopisBlock = (\r\n cartLine: ICartlinesViewProps,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const {\r\n shipInsteadDisplayText,\r\n shipToAddressDisplayText,\r\n pickItUpDisplayText,\r\n pickUpAtStoreWithLocationText,\r\n changeStoreDisplayText\r\n } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <Node {...cartLine.pickUpInStore.ContainerProps}>\r\n <div className='msc-cart-line__bopis-method'>\r\n {isBopisSelected ? (\r\n <span className='pick-up'>{pickUpAtStoreWithLocationText}</span>\r\n ) : (\r\n <span className='ship'>{shipToAddressDisplayText}</span>\r\n )}\r\n </div>\r\n {isBopisSelected && (\r\n <div className='msc-cart-line__bopis-fullfilment'>\r\n <span className='msc-cart-line__bopis-fullfilment-store'>{cartLine.pickUpInStore.orgUnitName}</span>\r\n <Button role='link' className='msc-cart-line__bopis-changestore' onClick={onChangeStoreHandler(cartLine)}>\r\n {changeStoreDisplayText}\r\n </Button>\r\n </div>\r\n )}\r\n <Button\r\n className='msc-cart-line__bopis-btn'\r\n {...puckUpinStoreAttribute}\r\n onClick={toggleBopisHandler(cartLine, isBopisSelected)}\r\n >\r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n </Button>\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderGroupBopisBlock = (\r\n cartLine: ICartlinesViewProps,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ? (\r\n <Button role='link' className='msc-cart-line__remove-item msc-btn' onClick={onChangeStoreHandler(cartLine)}>\r\n {changeStoreDisplayText}\r\n </Button>\r\n ) : null}\r\n <Button\r\n role='link'\r\n className='msc-cart-line__remove-item msc-btn'\r\n {...puckUpinStoreAttribute}\r\n onClick={toggleBopisHandler(cartLine, isBopisSelected)}\r\n >\r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n </Button>\r\n </>\r\n );\r\n};\r\n\r\nconst renderCartLineComment = (cartLineComment: React.ReactNode, comment: string, cartLineId: string, cartProductTitle?: string) => {\r\n if (!cartLineComment) {\r\n return null;\r\n }\r\n // @ts-ignore\r\n return React.cloneElement(cartLineComment[0] as React.ReactElement, { comment, cartLineId, cartProductTitle });\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param cartLineComment - Cart line comment element\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLine = (\r\n cartLine: ICartlinesViewProps,\r\n resources: ICartResources,\r\n config: ICartConfig,\r\n storeSelector: React.ReactNode | undefined,\r\n cartLineComment: React.ReactNode | undefined,\r\n advancedNotes: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element => {\r\n const comment = cartLine.data?.cartline.Comment || '';\r\n const cartLineProductTitle = cartLine.data?.product?.Name;\r\n const diplayMovetowishlist = config.displayMoveToWishlistButton;\r\n if (cartLine.error === resources.outOfStockErrorMessage) {\r\n return (\r\n <Node className='msc-cart-line__actions'>\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {diplayMovetowishlist && cartLine.addToWishlist}\r\n {cartLine.remove}\r\n </Node>\r\n );\r\n }\r\n\r\n if (isMultiplePickUp) {\r\n return (\r\n <Node className='msc-cart-line-group__extra-actions'>\r\n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToOrderTemplate}\r\n {diplayMovetowishlist && cartLine.addToWishlist}\r\n {cartLine.remove}\r\n </Node>\r\n );\r\n }\r\n\r\n if (cartLine.addToOrderTemplate) {\r\n return (\r\n <Node className='msc-cart-line__extra-actions'>\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {cartLine.addToOrderTemplate}\r\n {diplayMovetowishlist && cartLine.addToWishlist}\r\n {cartLine.remove}\r\n </Node>\r\n );\r\n }\r\n\r\n return (\r\n <Node className='msc-cart-line__actions'>\r\n {renderCartLineComment(cartLineComment, comment, cartLine.cartlineId!, cartLineProductTitle)}\r\n {diplayMovetowishlist && cartLine.addToWishlist}\r\n {cartLine.remove}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlinesInternal = (\r\n notes: IAdvancedNoteEntity[],\r\n isPrintView: boolean,\r\n cartLines: ICartlinesViewProps[],\r\n resources: ICartResources,\r\n config: ICartConfig,\r\n storeSelector: React.ReactNode | undefined,\r\n cartLineComment: React.ReactNode | undefined,\r\n advancedNotes: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element[] | JSX.Element => {\r\n return cartLines.map((cartLine, index) => {\r\n const itemIndex = index;\r\n const itemId = cartLine.data?.product?.ItemId || '';\r\n\r\n return (\r\n <div className={`msc-cart-lines-item ${isPrintView ? 'gar-cart-line__print-view' : ''}`} key={itemIndex}>\r\n {cartLine.cartline}\r\n <span className='msc-cart-lines-button-container'>\r\n {isMultiplePickUp\r\n ? null\r\n : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {renderCartLine(\r\n cartLine,\r\n resources,\r\n config,\r\n storeSelector,\r\n cartLineComment,\r\n advancedNotes,\r\n telemetryContent,\r\n isMultiplePickUp,\r\n emailDeliveryModeCode\r\n )}\r\n </span>\r\n {renderAdvancedNotes(\r\n isPrintView,\r\n advancedNotes,\r\n notes.filter(n => n.ItemId === itemId)\r\n )}\r\n </div>\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param props - The cart line props.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param waitingComponent - Waiting component element.\r\n * @param cartLoadingStatus - Cart loading status string.\r\n * @param isCartDataResult - Flag to check if there is cart data.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (\r\n notes: IAdvancedNoteEntity[],\r\n isPrintView: boolean,\r\n props: ICartViewProps & ICartExtensionProps<{}>,\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n isCartDataResult: boolean,\r\n pagination: React.ReactNode,\r\n paginatedView: ICartlinesViewProps[] | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element[] | JSX.Element => {\r\n const {\r\n slots: { cartLineComment, orderLevelComment, advancedNotes }\r\n } = props;\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus}</>;\r\n }\r\n\r\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\r\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\r\n // if (cartLines) {\r\n if (paginatedView) {\r\n return props.multiplePickUpEnabled ? (\r\n <>\r\n {pagination}\r\n {renderCartlinesInternal(\r\n notes,\r\n isPrintView,\r\n /*cartLines*/ paginatedView,\r\n resources,\r\n props.config,\r\n storeSelector,\r\n cartLineComment,\r\n advancedNotes,\r\n telemetryContent,\r\n isMultiplePickUp,\r\n emailDeliveryModeCode\r\n )}\r\n {pagination}\r\n {renderOrderLevelComment(isPrintView, orderLevelComment)}\r\n </>\r\n ) : (\r\n <>\r\n <Node {...props.CartlinesWrapper}>\r\n {/*<div>*/}\r\n {/* {renderCartlinesInternal(notes, isPrintView, cartLines, resources, storeSelector, cartLineComment, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}*/}\r\n {/*</div>*/}\r\n {pagination}\r\n {renderCartlinesInternal(\r\n notes,\r\n isPrintView,\r\n /*cartLines*/ paginatedView,\r\n resources,\r\n props.config,\r\n storeSelector,\r\n cartLineComment,\r\n advancedNotes,\r\n telemetryContent,\r\n isMultiplePickUp,\r\n emailDeliveryModeCode\r\n )}\r\n {pagination}\r\n {renderOrderLevelComment(isPrintView, orderLevelComment)}\r\n </Node>\r\n </>\r\n );\r\n }\r\n\r\n return isCartDataResult ? (\r\n <div className='msc-cart__empty-cart'>\r\n <div className='msc-cart-line'>{props.slots.emptyCart}</div>\r\n </div>\r\n ) : (\r\n <>{waitingComponent}</>\r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const itemCountOne: number = 1;\r\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\r\n const countTitle = `(${count} ${suffix})`;\r\n return (\r\n <>\r\n <Node className='msc-cart-lines-group-wrapper__bopis-heading-title'>\r\n {isBopisSelected ? (\r\n <p className='msc-cart-lines-group-wrapper__bopis-heading-title-st'>\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {', '}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n </p>\r\n ) : null}\r\n <p className='msc-cart-lines-group-wrapper__bopis-heading-title-ct'>{countTitle}</p>\r\n </Node>\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupHeader = (\r\n cartLine: ICartlinesViewProps,\r\n resources: ICartResources,\r\n count: number,\r\n emailDeliveryModeCode?: string\r\n) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n <div className='msc-cart-lines-group-wrapper__bopis-heading'>\r\n <p className={`msc-cart-lines-group-wrapper__bopis-heading-${groupTitle.toLowerCase().replace(' ', '-')}-icon`} />\r\n <p className={`msc-cart-lines-group-wrapper__bopis-heading-${groupTitle.toLowerCase().replace(' ', '-')}`}>{groupTitle}</p>\r\n {renderCartLinesGroupTitle(cartLine, resources, count)}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Returns count of products.\r\n * @param cartLine - The cart line view props.\r\n * @returns Number of products.\r\n */\r\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n const defaultItemCount = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\r\n }, defaultItemCount);\r\n return countItem;\r\n};\r\n\r\n/**\r\n * Render Cart Lines group.\r\n * @param props - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroup = (\r\n advancedNotes: IAdvancedNoteEntity[],\r\n isPrintView: boolean,\r\n props: ICartViewProps & ICartExtensionProps<{}>,\r\n resources: ICartResources,\r\n pagination: React.ReactNode,\r\n paginatedView: ICartlinesViewProps[] | undefined\r\n): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\r\n return (\r\n <div className='msc-cart-lines-group'>\r\n {props.cartLinesGroup.map(cartlines => {\r\n return (\r\n <div key={cartlines[0].cartlineId} className='msc-cart-lines-group-wraper'>\r\n {renderCartLinesGroupHeader(\r\n cartlines[0],\r\n resources,\r\n countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n {renderCartlines(\r\n advancedNotes,\r\n isPrintView,\r\n props,\r\n cartlines,\r\n props.resources,\r\n props.storeSelector,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n pagination,\r\n paginatedView,\r\n props.telemetryContent,\r\n props.multiplePickUpEnabled,\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n return props.cartDataResult ? (\r\n <div className='msc-cart__empty-cart'>\r\n <div className='msc-cart-line'>{props.slots.emptyCart}</div>\r\n </div>\r\n ) : (\r\n <>{props.waitingComponent}</>\r\n );\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param errorData - Error component.\r\n * @returns JSX Element.\r\n */\r\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\r\n return null;\r\n }\r\n return (\r\n <Node {...errorData.Wrapper}>\r\n {errorData.header}\r\n {errorData.errors}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Gets invoice summary line items.\r\n * @returns Invoice summary lines.\r\n */\r\nconst getInvoiceSummaryLineItems = (props: ICartViewProps & ICartExtensionProps<{}>): IInvoiceSummaryLines | undefined => {\r\n const cart = props.cart;\r\n cart?.cart?.CartLines?.forEach(cartLine => cartLine.IsInvoiceLine && (cartLine.InvoiceAmount = cartLine.ExtendedPrice));\r\n return cart?.hasInvoiceLine\r\n ? InvoiceSummary({\r\n orderTotalLabel: props.resources.summaryTotalAmountLabel,\r\n invoiceLabel: props.resources.invoiceLabel,\r\n cart: cart.cart,\r\n context: props.context,\r\n typeName: props.typeName,\r\n telemetry: props.telemetry,\r\n id: props.id\r\n })\r\n : undefined;\r\n}\r\n\r\n/**\r\n * Render invoice summary.\r\n * @param invoiceSummaryLines - Invoice summary component.\r\n * @param orderSummaryItems - Order summary component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderInvoiceSummarylines = (\r\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\r\n orderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\r\n return null;\r\n } \r\n return (\r\n <Node {...orderSummaryItems}>\r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render order summary.\r\n * @param orderSummaryLines - Order summary component.\r\n * @param orderSummaryItems - Order summary items component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummarylines = (\r\n orderSummaryLines: IOrderSummaryLines | undefined,\r\n orderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n <Node {...orderSummaryItems}>\r\n {orderSummaryLines.subtotal}\r\n {/* {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null} */}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.orderTotal}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param promotions - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n <Node {...promotions.promotionMessageWrapper}>\r\n {promotions.promotionMessage}\r\n <Node className='msc-cart__promotion_link-section'>{promotions.promotionSeeAllLink}</Node>\r\n {promotions.promotionDialog}\r\n </Node>\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckout = (\r\n props: ICartViewProps & ICartExtensionProps<{}>,\r\n renderClearCart: React.ReactNode\r\n): JSX.Element | undefined => {\r\n return (\r\n <Node className='msc-order-summary__checkout'>\r\n {props.cart?.hasInvoiceLine\r\n ? null\r\n : React.cloneElement(props.promoCode as React.ReactElement, { couponMapping: props.config.couponCodeMap })}\r\n <Node className='msc-order-summary__checkout__action'>\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n </Node>\r\n {props.createTemplateFromCartButton}\r\n {renderClearCart}\r\n </Node>\r\n );\r\n};\r\n\r\nconst renderReminderMessage = (props: ICartViewProps & ICartExtensionProps<{}>): JSX.Element => {\r\n const {\r\n config: { couponReminderMessage, couponReminderHeading }\r\n } = props;\r\n\r\n if (!couponReminderMessage) {\r\n return <></>;\r\n }\r\n return (\r\n <Node className='msc-order-summary__reminder'>\r\n {couponReminderHeading && couponReminderHeading.trim() && (\r\n <div className='msc-order-summary__reminder--heading'>{couponReminderHeading}</div>\r\n )}\r\n <Msdyn365.RichTextComponent text={couponReminderMessage} className='msc-order-summary__reminder--message' />\r\n </Node>\r\n // <Node className='msc-order-summary__reminder'>\r\n // <span className='msc-order-summary__reminder_text'>\r\n // <strong>{props.config.couponReminderHeading}: </strong>\r\n // {props.config.couponReminderMessage}\r\n // </span>\r\n // </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Renders the clear cart button on the page. Clicking the button triggers the modal to confirm the action.\r\n *\r\n * @param {(e: React.SetStateAction<boolean>) => void} setClearCartModalActive\r\n * @param {ICartResources} resources\r\n * @return {*} {React.ReactNode}\r\n */\r\nconst _renderClearCart = (\r\n setClearCartModalActive: (e: React.SetStateAction<boolean>) => void,\r\n resources: ICartResources\r\n): React.ReactNode => (\r\n <div className={`msc-cart__clear-cart-container`}>\r\n <button\r\n className='msc-cart__clear-cart-container--btn'\r\n title={resources.clearCartButtonText}\r\n onClick={() => setClearCartModalActive(true)}\r\n >\r\n {resources.clearCartButtonText}\r\n </button>\r\n </div>\r\n);\r\n\r\n/**\r\n * Modal which is responsible for verifying the clear cart intention. Can either be dismissed or confirmed. If confirmed, will clear the cart.\r\n *\r\n * @param {(e: React.MouseEvent<HTMLButtonElement>) => void} handleClearCart\r\n * @param {(e: React.SetStateAction<boolean>) => void} setClearCartModalActive\r\n * @param {() => void} toggle\r\n * @param {boolean} clearCartModalActive\r\n * @param {ICartResources} resources\r\n * @return {*}\r\n */\r\nconst _renderClearCartModal = (\r\n handleClearCart: (e: React.MouseEvent<HTMLButtonElement>) => void,\r\n setClearCartModalActive: (e: React.SetStateAction<boolean>) => void,\r\n toggle: () => void,\r\n clearCartModalActive: boolean,\r\n resources: ICartResources\r\n) => {\r\n const clearCartClassName = 'clearcart';\r\n\r\n /**\r\n * Renders the button area\r\n */\r\n const _renderButtonArea = (): React.ReactNode => (\r\n <div className={`${clearCartClassName}__button`}>\r\n <Button onClick={handleClearCart} className={`${clearCartClassName}__button--save`}>\r\n {resources.clearCartButtonText}\r\n </Button>\r\n <Button onClick={() => setClearCartModalActive(false)} className={`${clearCartClassName}__button--cancel`}>\r\n {resources.clearCancelButtonText}\r\n </Button>\r\n </div>\r\n );\r\n\r\n return (\r\n <Modal className={`${clearCartClassName}`} isOpen={clearCartModalActive} toggle={toggle}>\r\n <ModalHeader className={`${clearCartClassName}__modal-header`}>{resources.clearCartHeader}</ModalHeader>\r\n <ModalBody className={`${clearCartClassName}__modal-body`}>{resources.clearConfirmBody}</ModalBody>\r\n <ModalFooter>{_renderButtonArea()}</ModalFooter>\r\n </Modal>\r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout button.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n <Node className='msc-order-summary__checkout-button'>\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n </Node>\r\n );\r\n};\r\n\r\nconst _renderPrintView = (\r\n isPrintView: boolean,\r\n handlePrintViewChange: (e: React.MouseEventHandler<HTMLInputElement>) => void,\r\n printViewLabel: string\r\n): React.ReactNode => (\r\n <div className='input-group print-view-toggle'>\r\n <label className='input-group-prepend print-view-toggle__label'>\r\n <span className={'print-view-toggle__heading'}>{printViewLabel}</span>\r\n {/* @ts-ignore */}\r\n <input onClick={handlePrintViewChange} type='checkbox' className='print-view-toggle__checkbox' />\r\n <div className={`print-view-toggle__toggle print-view-toggle__toggle--${isPrintView ? 'checked' : 'unchecked'}`} />\r\n </label>\r\n </div>\r\n);\r\n\r\n/**\r\n * Renders the advanced-notes that display all of the associated notes for each cart line item at the bottom of the item in the cart.\r\n */\r\n\r\nconst renderAdvancedNotes = (isPrintView: boolean, advancedNotes: React.ReactNode, notes: IAdvancedNoteEntity[]): React.ReactNode => {\r\n if (!advancedNotes) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className={`${isPrintView ? 'advanced-notes-container--print-view' : ''}`}>\r\n {/* @ts-ignore */}\r\n {React.cloneElement(advancedNotes[0] as React.ReactElement, { notes })}\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Renders the order-level-comment that displays a comment at the bottom of the cart.\r\n */\r\n\r\nconst renderOrderLevelComment = (isPrintView: boolean, orderLevelComment: React.ReactNode | undefined): React.ReactNode => {\r\n if (!orderLevelComment) {\r\n return null;\r\n }\r\n\r\n return <div className={`order-comment-container ${isPrintView ? 'order-comment-container__print-view' : ''}`}>{orderLevelComment}</div>;\r\n};\r\n\r\n/**\r\n * Render cart view.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst CartView: React.FC<ICartViewProps & ICartExtensionProps<{}>> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\r\n const {\r\n config: { shouldRenderReminder, couponReminderMessage }\r\n } = props;\r\n const handlePrintViewChange = () => setIsPrintView(!isPrintView);\r\n const [isPrintView, setIsPrintView] = React.useState<boolean>(false);\r\n const [advancedNotes, setAdvancedNotes] = React.useState<IAdvancedNoteEntity[] | undefined>(undefined);\r\n const printViewToggle = _renderPrintView(isPrintView, handlePrintViewChange, 'Print View');\r\n const totalItemCountOne: number = 1;\r\n const defaultPageLength: number = 5;\r\n const updatedTitle = (\r\n <h1 className='msc-cart__heading'>\r\n {props.resources.cartTitle}\r\n <span className='msc-cart__heading-count-items'>\r\n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\r\n </span>\r\n </h1>\r\n );\r\n const getAdvancedNotes = async (): Promise<void> => {\r\n const itemIds = props.cart?.cart.CartLines?.map(cl => cl.ItemId!) || [];\r\n if (!itemIds.length) {\r\n return;\r\n }\r\n getAdvancedNotesAsync({ callerContext: props.context.actionContext }, itemIds).then(notes => {\r\n setAdvancedNotes(notes || []);\r\n });\r\n };\r\n\r\n const pageLength = props.config.pageLength || defaultPageLength;\r\n\r\n const [paginatedView, setPaginatedView] = React.useState<ICartlinesViewProps[] | undefined>(\r\n props.cartlines && props.cartlines.length >= pageLength ? props.cartlines.slice(0, pageLength) : props.cartlines\r\n );\r\n const [paginationPage, setPaginationPage] = React.useState<number>(0);\r\n const [clearCartModalActive, setClearCartModalActive] = React.useState<boolean>(false);\r\n\r\n const handleClearCart = () => {\r\n const cart = props.cart;\r\n const cartlines = cart?.cart.CartLines;\r\n\r\n if (cart && cartlines) {\r\n let ids = { cartLineIds: Array() };\r\n cartlines.map(c => (c.LineId ? ids.cartLineIds.push(c.LineId) : null));\r\n cart.removeCartLines(ids);\r\n setClearCartModalActive(false);\r\n cart.refreshCart({});\r\n }\r\n };\r\n\r\n /**\r\n * Utility class to easily go up one page\r\n */\r\n const nextPage = () => {\r\n changePage(paginationPage + 1);\r\n };\r\n\r\n /**\r\n * Utility class to easily go down one page\r\n */\r\n const prevPage = () => {\r\n changePage(paginationPage - 1);\r\n };\r\n\r\n /**\r\n * Update the state of @const paginationPage and @const paginatedView to the given page, folliowing some logic\r\n * to prevent the page from going into the negatives or beyond the maximum page length.\r\n *\r\n * @param {number} page\r\n * @return {*}\r\n */\r\n const changePage = (page: number) => {\r\n if (page < 0) {\r\n return;\r\n }\r\n\r\n if (props.cartlines && page >= props.cartlines.length / pageLength) {\r\n page = props.cartlines.length / pageLength - 1;\r\n }\r\n\r\n let skip = page * pageLength;\r\n if (props.cartlines && props.cartlines.length >= skip) {\r\n setPaginationPage(page);\r\n let slice = props.cartlines?.slice(skip);\r\n setPaginatedView(slice.length >= pageLength ? slice.slice(0, pageLength) : slice);\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!advancedNotes) void getAdvancedNotes();\r\n }, [props.data]);\r\n\r\n React.useEffect(() => {\r\n changePage(paginationPage);\r\n }, props.cartlines);\r\n\r\n const toggle = () => setClearCartModalActive(!clearCartModalActive);\r\n const renderClearCart = _renderClearCart(setClearCartModalActive, props.resources);\r\n\r\n let pagination = (\r\n <LinePagination\r\n nextPage={nextPage}\r\n prevPage={prevPage}\r\n changePage={changePage}\r\n currentPage={paginationPage}\r\n numPages={props.cartlines ? Math.ceil(props.cartlines.length / pageLength) : 0}\r\n prev={props.resources.paginationPrev}\r\n next={props.resources.paginationNext}\r\n />\r\n );\r\n\r\n const invoiceSummaryLineitems = getInvoiceSummaryLineItems(props);\r\n\r\n return (\r\n <div className={props.className} id={props.id} {...props.renderModuleAttributes(props)}>\r\n {updatedTitle}\r\n <div className='ms-cart__estimated-total'>{props.orderSummaryLineitems?.orderTotal}</div>\r\n {renderOrderSummaryCheckoutButton(props)}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled\r\n ? renderCartLinesGroup(advancedNotes || [], isPrintView, props, props.resources, pagination, paginatedView)\r\n : renderCartlines(\r\n advancedNotes || [],\r\n isPrintView,\r\n props,\r\n props.cartlines,\r\n props.resources,\r\n props.storeSelector,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n pagination,\r\n paginatedView\r\n )}\r\n {props.orderSummaryHeading && (\r\n <Node {...props.OrderSummaryWrapper}>\r\n {printViewToggle}\r\n <Node className='msc-order-summary__items'>\r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? renderInvoiceSummarylines(invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n\r\n {renderErrorBlock(props.OrderSummaryErrors)}\r\n </Node>\r\n {shouldRenderReminder &&\r\n couponReminderMessage &&\r\n couponReminderMessage.trim() &&\r\n !props.cart?.hasInvoiceLine &&\r\n renderReminderMessage(props)}\r\n\r\n {renderOrderSummaryCheckout(props, renderClearCart)}\r\n </Node>\r\n )}\r\n\r\n {props.storeSelector}\r\n {_renderClearCartModal(handleClearCart, setClearCartModalActive, toggle, clearCartModalActive, props.resources)}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CartView;\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 } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport _, { get } from 'lodash';\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 as ICheckoutExtensionProps } from '../definition-extensions/checkout.ext.props.autogenerated';\r\nimport { AttributeTextValue, Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { LinePagination } from './components/line-pagination';\r\nimport { InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\n\r\nexport interface IOrderSummaryExtended extends IOrderSummary {\r\n otherChargesLines: React.ReactNode[];\r\n}\r\n\r\ninterface IInvoicepaymentSummaryExtented extends IInvoicePaymentSummary {\r\n otherChargesLines: React.ReactNode[];\r\n}\r\n\r\nexport interface ILineItemsExtended extends ILineItems {\r\n numItems: number;\r\n prev: string;\r\n next: string;\r\n}\r\n\r\nexport interface ILineItemDeliveryGroupExtended extends ILineItemDeliveryGroup {\r\n numItems: number;\r\n prev: string;\r\n next: string;\r\n}\r\n\r\nexport interface IChargeLinesBreakdownData {\r\n chargeLineLabel?: string;\r\n chargeCode?: string;\r\n}\r\n\r\nexport const PickUpAtStoreComponent: React.FC<IPickUpAtStore> = ({ PickUpAtStore, label, location }) => (\r\n <Node {...PickUpAtStore}>\r\n {label}\r\n {location}\r\n </Node>\r\n);\r\n\r\nexport const EmailDeliveryComponent: React.FC<IEmailDelivery> = ({ EmailDelivery, label }) => <Node {...EmailDelivery}>{label}</Node>;\r\n\r\nexport const LineItemComponent: React.FC<ILineItem> = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n <Node {...LineItem}>\r\n {item}\r\n {pickUpAtStore && <PickUpAtStoreComponent {...pickUpAtStore} />}\r\n {emailDelivery && <EmailDeliveryComponent {...emailDelivery} />}\r\n </Node>\r\n);\r\n//\r\nexport const LineItemGroupComponent: React.FC<ILineItemDeliveryGroupExtended> = ({\r\n LineItemDeliveryGroup,\r\n LineItemList,\r\n heading,\r\n lineItems,\r\n numItems,\r\n prev,\r\n next\r\n}) => {\r\n if (lineItems && lineItems.length > 0 && !lineItems[0].item) {\r\n return null;\r\n }\r\n\r\n const defaultPageLength: number = 5;\r\n const pageLength = numItems || defaultPageLength;\r\n const [paginatedView, setPaginatedView] = React.useState<ILineItem[]>(\r\n lineItems && lineItems.length >= pageLength ? lineItems.slice(0, pageLength) : lineItems\r\n );\r\n const [paginationPage, setPaginationPage] = React.useState<number>(0);\r\n\r\n const nextPage = () => {\r\n changePage(paginationPage + 1);\r\n };\r\n\r\n const prevPage = () => {\r\n changePage(paginationPage - 1);\r\n };\r\n\r\n const changePage = (page: number) => {\r\n if (page < 0) {\r\n return;\r\n }\r\n\r\n if (lineItems && page > lineItems.length / pageLength) {\r\n return;\r\n }\r\n\r\n let skip = page * pageLength;\r\n if (lineItems && lineItems.length >= skip) {\r\n setPaginationPage(page);\r\n let slice = lineItems?.slice(skip);\r\n setPaginatedView(slice.length >= pageLength ? slice.slice(0, pageLength) : slice);\r\n }\r\n };\r\n\r\n const pagination = () => {\r\n return (\r\n <LinePagination\r\n nextPage={nextPage}\r\n prevPage={prevPage}\r\n changePage={changePage}\r\n currentPage={paginationPage}\r\n numPages={lineItems.length ? Math.ceil(lineItems.length / pageLength) : 0}\r\n prev={prev}\r\n next={next}\r\n />\r\n );\r\n };\r\n\r\n if (paginatedView.length === 0 || !paginatedView[0].item) {\r\n return null;\r\n }\r\n return (\r\n <Node {...LineItemDeliveryGroup}>\r\n {heading}\r\n <Node {...LineItemList}>\r\n {/* {lineItems.map(lineItem => ( */}\r\n {paginatedView.map(lineItem => {\r\n return <LineItemComponent key={lineItem.LineId} {...lineItem} />;\r\n })}\r\n </Node>\r\n {pagination()}\r\n </Node>\r\n );\r\n};\r\n\r\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC<ILineItemDeliveryGroup> = ({\r\n LineItemDeliveryGroup,\r\n LineItemList,\r\n heading,\r\n lineItems,\r\n lineItemWraper,\r\n lineItemWraperIcon\r\n}) => (\r\n <Node {...LineItemDeliveryGroup}>\r\n {lineItemWraperIcon}\r\n {lineItemWraper}\r\n {heading}\r\n <Node {...LineItemList}>\r\n {lineItems.map(lineItem => (\r\n <LineItemComponentWithMultiplePickUp key={lineItem.LineId} {...lineItem} />\r\n ))}\r\n </Node>\r\n </Node>\r\n);\r\n\r\nexport const LineItemComponentWithMultiplePickUp: React.FC<ILineItem> = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n <Node {...LineItem}>\r\n {item}\r\n {emailDelivery && <EmailDeliveryComponent {...emailDelivery} />}\r\n </Node>\r\n);\r\n\r\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC<IPickUpAtStore> = ({ PickUpAtStore, label, location }) => (\r\n <Node {...PickUpAtStore}>\r\n {label}\r\n {location}\r\n </Node>\r\n);\r\n\r\nexport const LineItemsComponent: React.FC<ILineItemsExtended> = ({\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 numItems,\r\n prev,\r\n next\r\n}) => {\r\n const items = itemsForPickup ? itemsForPickup : itemsForEmail ? itemsForEmail : itemsForShip;\r\n if (!items) {\r\n return null;\r\n }\r\n const lineItemGroupComponentExt: ILineItemDeliveryGroupExtended = { ...items!, numItems, prev, next };\r\n\r\n return (\r\n <Node {...LineItems}>\r\n <Node {...Header}>\r\n {heading}\r\n {editLink}\r\n </Node>\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && <LineItemGroupComponent {...lineItemGroupComponentExt} />}\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && <LineItemGroupComponent {...lineItemGroupComponentExt} />}\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && <LineItemGroupComponent {...lineItemGroupComponentExt} />}\r\n {itemsGroupWithMulitplePickupMode !== undefined\r\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\r\n return <LineItemGroupComponentWithMultiplePickUp {...item} key={index} />;\r\n })\r\n : null}\r\n </Node>\r\n );\r\n};\r\n\r\nconst OrderSummaryComponent: React.FC<IOrderSummaryExtended> = ({ heading, lines, otherChargesLines }) => {\r\n const shippingLine = lines?.shipping;\r\n if (shippingLine) {\r\n _.set(shippingLine as object, 'props.freeText', 'To Be Calculated');\r\n }\r\n\r\n return (\r\n <div className='msc-order-summary-wrapper'>\r\n {heading}\r\n <div className='msc-order-summary__items'>\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {shippingLine}\r\n {/* {lines.otherCharge} */}\r\n {otherChargesLines && otherChargesLines}\r\n {lines.tax}\r\n {/* {lines.totalDiscounts} */}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst getInvoicePaymentSummary = (input: ICheckoutViewProps & ICheckoutExtensionProps<{}>): IInvoicePaymentSummary => {\r\n const {\r\n data: { checkout },\r\n resources: { summaryTotalAmountLabel, invoiceLabel, invoiceSummaryTitle },\r\n context,\r\n typeName,\r\n id,\r\n telemetry\r\n } = input;\r\n\r\n const checkoutCart = get(checkout, 'result.checkoutCart');\r\n // const cart = get(checkout, 'result.checkoutCart.cart');\r\n const cart: Cart = checkout.result?.checkoutCart.cart!;\r\n cart?.CartLines?.forEach(cartLine => cartLine.IsInvoiceLine && (cartLine.InvoiceAmount = cartLine.ExtendedPrice));\r\n\r\n return {\r\n heading: <h2 className='msc-invoice-summary__heading'>{invoiceSummaryTitle}</h2>,\r\n lines: checkoutCart?.hasInvoiceLine\r\n ? InvoiceSummary({\r\n orderTotalLabel: summaryTotalAmountLabel,\r\n invoiceLabel,\r\n cart,\r\n context,\r\n typeName,\r\n telemetry,\r\n id,\r\n checkoutState: checkout.result\r\n })\r\n : undefined\r\n };\r\n};\r\n\r\nconst PaymentSummaryComponent: React.FC<IInvoicepaymentSummaryExtented> = ({ heading, lines, otherChargesLines }) => (\r\n <div className='msc-invoice-summary-wrapper'>\r\n {heading}\r\n <div className='msc-invoice-summary__items'>\r\n {lines && (\r\n <>\r\n {lines.invoices}\r\n {lines.giftCard}\r\n {otherChargesLines && otherChargesLines}\r\n {lines.loyalty}\r\n {lines.orderTotal}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\nconst _renderShipOnCheckout = (\r\n shipCompleteOnCheckout: boolean,\r\n handleShipCompleteOnCheckoutChange: (e: React.MouseEvent<HTMLInputElement, MouseEvent>) => void,\r\n shipCompleteOnCheckoutLabel: string\r\n): React.ReactNode => (\r\n <div className='ms-checkout__ship-on-checkout'>\r\n <label className='input-group-prepend print-view-toggle__label'>\r\n <span className={'print-view-toggle__heading'}>{shipCompleteOnCheckoutLabel}</span>\r\n <input\r\n value={shipCompleteOnCheckout ? 1 : 0}\r\n onClick={handleShipCompleteOnCheckoutChange}\r\n type='checkbox'\r\n className='print-view-toggle__checkbox'\r\n />\r\n <div className={`print-view-toggle__toggle print-view-toggle__toggle--${shipCompleteOnCheckout ? 'checked' : 'unchecked'}`} />\r\n </label>\r\n </div>\r\n);\r\n\r\nconst _renderOrderComment = (commentHeading: string, commentString: string): React.ReactNode => {\r\n const emptyStringClassName = commentString == '';\r\n return (\r\n <div className={`order-level-comment-wrapper ${emptyStringClassName ? 'order-level-comment-wrapper--empty-string' : ''}`}>\r\n <h1 className='order-level-comment-wrapper__heading'>{commentHeading}</h1>\r\n <p className='order-level-comment-wrapper__text'>{commentString}</p>\r\n </div>\r\n );\r\n};\r\n\r\nconst otherChargesLines = (\r\n cart: Cart,\r\n chargeCodes: IChargeLinesBreakdownData[] | undefined,\r\n currencyFormatter: (price: string | number, currencyCode?: string | undefined) => string\r\n): React.ReactNode[] => {\r\n let lines = cart.ChargeLines;\r\n let linesNode: React.ReactNode[] = [];\r\n let otherChargeTotal = cart.OtherChargeAmount || 0;\r\n chargeCodes?.map(c => {\r\n const node = lines\r\n ?.filter(line => line.ChargeCode === c.chargeCode)\r\n .map(r => {\r\n otherChargeTotal -= r.CalculatedAmount || 0;\r\n return _renderLineChargeNode(c.chargeLineLabel || '', currencyFormatter(r.CalculatedAmount?.toString() ?? ''));\r\n });\r\n linesNode.push(node);\r\n });\r\n // if the remaining amount is over 1 cent, display the other Charges line. This avoids potential fraction of a penny being displayed as zero.\r\n if (otherChargeTotal >= 0.01) {\r\n const otherChargesNode = _renderLineChargeNode('Other Charges', currencyFormatter(otherChargeTotal.toString() ?? ''));\r\n linesNode.push(otherChargesNode);\r\n }\r\n\r\n return linesNode;\r\n};\r\n\r\nconst _renderLineChargeNode = (chargeName: string, chargeAmount: string): React.ReactNode => {\r\n return (\r\n <p className='msc-order-summary__line-other-charges'>\r\n <span className='msc-order-charge-line__label'>{chargeName}</span>{' '}\r\n <span className='msc-price msc-order-summary__value'>{chargeAmount}</span>\r\n </p>\r\n );\r\n};\r\n\r\nconst CheckoutView: React.FC<ICheckoutViewProps & ICheckoutExtensionProps<{}>> = props => {\r\n const attributeArr = props.data.checkout.result?.checkoutCart.cart.AttributeValues || [];\r\n const getShipCompleteIndex = (): number | undefined => {\r\n return props.data.checkout.result?.checkoutCart.cart.AttributeValues?.findIndex(attribute => attribute.Name === 'ShipComplete');\r\n };\r\n // Get the text in the order level comment, if it doesn't exist, assign an empty string\r\n const getCommentText = (): string => {\r\n return props.data.checkout.result?.checkoutCart.cart.Comment || '';\r\n };\r\n // Get the comment heading text from the resources\r\n const getCommentHeadingText = (): string => {\r\n return props.resources.commentHeadingText;\r\n };\r\n const getShipCompleteValue = (): boolean => {\r\n const shipCompleteIndex = getShipCompleteIndex();\r\n if (shipCompleteIndex === -1 || shipCompleteIndex === undefined) {\r\n return false;\r\n } else {\r\n const attr = attributeArr[shipCompleteIndex] as AttributeTextValue;\r\n return attr?.TextValue === 'true';\r\n }\r\n };\r\n const handleShipCompleteOnCheckoutChange = () => {\r\n const shipComplete = {\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeTextValue',\r\n Name: 'ShipComplete',\r\n // TextValue: (!getShipCompleteValue()).toString()\r\n TextValue: (!shipCompleteOnCheckout).toString()\r\n };\r\n const idx = getShipCompleteIndex();\r\n idx === undefined || idx === -1 ? attributeArr.push(shipComplete) : attributeArr.splice(idx, 1, shipComplete);\r\n const cart: Cart = Object.assign({}, props.data.checkout.result?.checkoutCart.cart);\r\n if (cart) {\r\n cart.AttributeValues = attributeArr;\r\n saveShipCompleteToCart(cart);\r\n }\r\n };\r\n const saveShipCompleteToCart = async (cart: Cart) => {\r\n if (cart) {\r\n const checkoutState = props.data.checkout.result;\r\n if (!checkoutState) {\r\n return;\r\n }\r\n\r\n await checkoutState.checkoutCart.updateCart({ newCartObject: cart }).then(() => {\r\n // setShipCompleteOnCheckout(getShipCompleteValue());\r\n setShipCompleteOnCheckout(!shipCompleteOnCheckout);\r\n });\r\n }\r\n };\r\n const [shipCompleteOnCheckout, setShipCompleteOnCheckout] = React.useState<boolean>(getShipCompleteValue());\r\n const shipCompleteOnCheckoutToggle = _renderShipOnCheckout(\r\n shipCompleteOnCheckout,\r\n handleShipCompleteOnCheckoutChange,\r\n props.resources.shipCompleteOnCheckoutLabel\r\n );\r\n\r\n const getAllowableFreightAttIdx = () => {\r\n return props.data.checkout.result?.checkoutCart.cart.AttributeValues?.findIndex(\r\n attribute => attribute.Name === 'AllowableFreightAmount'\r\n );\r\n };\r\n\r\n const getInvoiceAmountDueAttIdx = () => {\r\n return props.data.checkout.result?.checkoutCart.cart.AttributeValues?.findIndex(attribute => attribute.Name === 'InvoiceAmountDue');\r\n };\r\n\r\n React.useEffect(() => {\r\n console.log(props);\r\n\r\n const isInvoiceLine = props.data.checkout.result?.checkoutCart.hasInvoiceLine;\r\n if (isInvoiceLine) {\r\n const cartLines: CartLine[] | undefined = props.data.checkout.result?.checkoutCart.cart.CartLines;\r\n\r\n if (!cartLines) return;\r\n\r\n const allowableFreightIdx = getAllowableFreightAttIdx();\r\n\r\n if (allowableFreightIdx === -1 || allowableFreightIdx === undefined) return;\r\n\r\n const cart: Cart = Object.assign({}, props.data.checkout.result?.checkoutCart.cart);\r\n const attributeArr: AttributeTextValue[] = cart.AttributeValues || [];\r\n\r\n try {\r\n let freightData: { invoiceId: string; amount: number }[] = JSON.parse(attributeArr[allowableFreightIdx].TextValue || '[]');\r\n\r\n const invoiceAmountDueIdx = getInvoiceAmountDueAttIdx();\r\n let invoiceAmountDueData: { invoiceId: string; amountDue: number }[] = [];\r\n\r\n if (invoiceAmountDueIdx !== -1 && invoiceAmountDueIdx !== undefined) {\r\n try {\r\n invoiceAmountDueData = JSON.parse(attributeArr[invoiceAmountDueIdx].TextValue || '[]');\r\n } catch {\r\n invoiceAmountDueData = [];\r\n }\r\n }\r\n\r\n const updatedFreightData = freightData.filter(item => {\r\n const cartLine = cartLines.find(line => line.InvoiceId === item.invoiceId);\r\n const invoiceAmountDue = invoiceAmountDueData.find(data => data.invoiceId === item.invoiceId)?.amountDue;\r\n const shouldRemoveAllowableAmount =\r\n !cartLine ||\r\n (cartLine.ExtendedPrice && invoiceAmountDue && cartLine.ExtendedPrice < invoiceAmountDue - item.amount);\r\n\r\n return !shouldRemoveAllowableAmount;\r\n });\r\n\r\n if (updatedFreightData.length !== freightData.length) {\r\n attributeArr[allowableFreightIdx] = {\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeTextValue',\r\n Name: 'AllowableFreightAmount',\r\n ExtensionProperties: [],\r\n TextValue: JSON.stringify(updatedFreightData),\r\n TextValueTranslations: []\r\n } as AttributeTextValue;\r\n\r\n cart.AttributeValues = attributeArr;\r\n\r\n (async () => {\r\n const updateResponse = await props.data.checkout.result?.checkoutCart.updateCart({ newCartObject: cart });\r\n if (updateResponse && updateResponse.status === 'SUCCESS') {\r\n await props.data.checkout.result?.checkoutCart.refreshCart({});\r\n }\r\n })();\r\n }\r\n } catch (error) {\r\n console.error('Error parsing AllowableFreightAmount:', error);\r\n }\r\n }\r\n }, []);\r\n\r\n // const getProductEligibility = async (addressId: number): Promise<any> => {\r\n // // get items ids after removing duplicates\r\n // const checkoutState = props.data.checkout.result;\r\n // let productToRemove: any[] = [];\r\n // let list: EligibleItems = [];\r\n //\r\n // if (!checkoutState) {\r\n // return;\r\n // }\r\n //\r\n // const itemIds = [...new Set(cart.CartLines?.map(p => p.ItemId!) || [])];\r\n //\r\n // if (itemIds.length) {\r\n //\r\n // await getProductEligibilityAsync({ callerContext: props.context.actionContext }, itemIds, addressId, checkoutState.checkoutCart.cart.Id || '')\r\n // .then((result: any) => {\r\n // result.forEach((i: any) => {\r\n // const id = getExtensionPropertyValueByKey(i.ExtensionProperties, \"ItemId\", CommercePropertyValueEnum.string);\r\n // list.push({\r\n // ItemId: String(id),\r\n // IsEligible: i.IsEligible\r\n // });\r\n // });\r\n // });\r\n //\r\n // cart.CartLines?.forEach(c => {\r\n // list.forEach(i => {\r\n // if (i.ItemId === c.ItemId && !i.IsEligible) {\r\n // productToRemove.push(\r\n // {\r\n // LineId: c.LineId || '',\r\n // ItemId: c.ItemId\r\n // }\r\n // );\r\n // }\r\n // });\r\n // });\r\n // if (productToRemove.length) {\r\n // await checkoutState.checkoutCart.removeCartLines({ cartLineIds: productToRemove.map(p => p.LineId) });\r\n // }\r\n // return productToRemove;\r\n // }\r\n // }\r\n\r\n const _renderAccountLockedMessage = (): React.ReactNode => (\r\n <div className='account-lock-alert'>{props.config.accountLockedMessage}</div>\r\n );\r\n\r\n const {\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 } = props;\r\n const defaultPageLength: number = 5;\r\n const pageLength = props.config.pageLength || defaultPageLength;\r\n const cart: Cart = Object.assign({}, props.data.checkout.result?.checkoutCart.cart);\r\n let chargelines = otherChargesLines(cart, props.context.app.config.chargeLinesBreakdown, props.context.cultureFormatter.formatCurrency);\r\n const orderSummaryExtended: IOrderSummaryExtended = { ...orderSummary!, otherChargesLines: chargelines };\r\n\r\n // const invoicePaymentSummaryExtended: IInvoicePaymentSummaryExtended = { ...invoicePaymentSummary!, otherChargesLines: chargelines };\r\n // const [productsRemoved, setProductsRemoved] = React.useState<any>(null);\r\n\r\n // if (MsDyn365.isBrowser && cart.CartLines) {\r\n // const shippingId = (window as any).ShippingId;\r\n // const recId = cart.ShippingAddress?.RecordId;\r\n //\r\n // // if (recId && shippingId !== recId) {\r\n // // (window as any).ShippingId = recId;\r\n // // getProductEligibility(recId).then(result => {\r\n // // if (result.length) {\r\n // // setProductsRemoved(result);\r\n // // document.dispatchEvent(new CustomEvent(\"UPDATE_CART\", { detail: { Products: result } }));\r\n // // }\r\n // // });\r\n // // }\r\n // }\r\n\r\n const isAccountBlocked: boolean | undefined = props.data.customerInformation.result?.Blocked;\r\n const lineItemsExt: ILineItemsExtended = {\r\n ...lineItems!,\r\n numItems: pageLength,\r\n prev: props.resources.paginationPrev || '',\r\n next: props.resources.paginationNext || ''\r\n };\r\n const invoicePaymentSummaryProps = getInvoicePaymentSummary(props);\r\n const invoicePaymentSummaryExtended: IInvoicepaymentSummaryExtented = { ...invoicePaymentSummaryProps, otherChargesLines: chargelines };\r\n\r\n return (\r\n <Module {...checkoutProps}>\r\n {/*{productsRemoved && productsRemoved.length ? generateProductsRemovedMessage(productsRemoved, productEligibilityText) : null}*/}\r\n {!hasSalesOrder && <Node {...headerProps}>{title}</Node>}\r\n {!hasSalesOrder && (\r\n <Node {...bodyProps}>\r\n {loading}\r\n {isAccountBlocked ? _renderAccountLockedMessage() : null}\r\n {alert}\r\n {canShow && (\r\n <>\r\n <Node {...mainProps}>\r\n {guidedForm}\r\n <Node {...termsAndConditionsProps}>{termsAndConditions}</Node>\r\n {!hasInvoiceLine && props.config.shipCompleteOnCheckout && shipCompleteOnCheckoutToggle}\r\n <Node {...mainControlProps}>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n </Node>\r\n <Node {...sideProps}>\r\n {!hasInvoiceLine\r\n ? orderSummary && <OrderSummaryComponent {...orderSummaryExtended} />\r\n : invoicePaymentSummary && <PaymentSummaryComponent {...invoicePaymentSummaryExtended} />}\r\n <Node {...sideControlFirstProps}>\r\n <Node {...termsAndConditionsProps}>{termsAndConditions}</Node>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n {lineItems && <LineItemsComponent {...lineItemsExt} />}\r\n {_renderOrderComment(getCommentHeadingText(), getCommentText())}\r\n <Node {...sideControlSecondProps}>\r\n <Node {...termsAndConditionsProps}>{termsAndConditions}</Node>\r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n </Node>\r\n </Node>\r\n </>\r\n )}\r\n </Node>\r\n )}\r\n {hasSalesOrder && orderConfirmation}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 MsDyn365, { getUrlSync } from \"@msdyn365-commerce/core\";\r\nimport { IHeaderViewProps, Logo } from '@msdyn365-commerce-modules/header';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { get } from 'lodash';\r\n\r\nimport { IHeaderProps } from '../definition-extensions/header.ext.props.autogenerated';\r\n\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n *\r\n * HeaderView component.\r\n * @extends {React.PureComponent<IHeaderViewProps>}\r\n */\r\nexport class HeaderView extends React.PureComponent<IHeaderViewProps & IHeaderProps<{}>> {\r\n private readonly menuNode: React.RefObject<HTMLDivElement>;\r\n public constructor(props: IHeaderViewProps & IHeaderProps<{}>) {\r\n\r\n super(props);\r\n this.menuNode = React.createRef();\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.config.useStickyHeader) {\r\n // Set header update methods to trigger on scroll\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('scroll', () => {\r\n this._configureStickyHeader();\r\n });\r\n }\r\n this._configureStickyHeader();\r\n }\r\n this.handleLoginRedirect();\r\n }\r\n\r\n private handleLoginRedirect() {\r\n const { context : {\r\n actionContext,\r\n request: {\r\n user: {\r\n isAuthenticated,\r\n isOBORequest\r\n }\r\n }\r\n }} = this.props;\r\n const isHomePage = actionContext.requestContext.url.requestUrl.pathname === '/';\r\n const customer = this.props.data.accountInformation?.result;\r\n if (MsDyn365.isBrowser && typeof window !== 'undefined') { \r\n const url = new URL(window.location.href); \r\n if (url.searchParams.has('catalogid')) { \r\n url.searchParams.delete('catalogid');\r\n \r\n window.location.href = url.toString();\r\n }\r\n }\r\n \r\n if (isAuthenticated) {\r\n if (isHomePage) {\r\n if (isOBORequest && !customer) {\r\n window.location.href = getUrlSync('businesses', this.props.context.actionContext) || '/businesses';\r\n } else {\r\n window.location.href = getUrlSync('account', this.props.context.actionContext) || '/myaccount';\r\n }\r\n } else {\r\n const accountUrl = getUrlSync('account', this.props.context.actionContext);\r\n const logoAnchorTag = document.querySelector<HTMLAnchorElement>('.ms-header__logo>a');\r\n if (logoAnchorTag && accountUrl) {\r\n logoAnchorTag.href = accountUrl;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { HeaderTag, HeaderContainer, HeaderTopBarContainer, Divider, MobileMenuContainer, MobileMenuBodyContainer, MobileMenuLinksContainer\r\n , config: { showQuickOrderLink, showPhoneNumber, phoneNumber }\r\n } = this.props;\r\n const quickOrderUrl = getUrlSync('quickorder', this.props.context.actionContext);\r\n return (\r\n <Module {...HeaderTag}>\r\n <Node {...HeaderContainer}>\r\n <Node {...HeaderTopBarContainer}>\r\n\r\n <div className='mobile-navicon-container'>\r\n {this.props.navIcon}\r\n </div>\r\n <div className={'ms-header__desktop-logo'}>\r\n {this.props.logo}\r\n {showPhoneNumber == \"yes\" && phoneNumber ? this._renderPhoneNumber(this.props) : null}\r\n </div>\r\n <div className=\"ms-header__desktop-nav-items\">\r\n <div className='desktop-navicon-container' ref={this.menuNode}>\r\n {this._renderReactFragment(this.props.menuBar)}\r\n </div>\r\n {this._renderMobileLogo()}\r\n {this._renderReactFragment(this.props.search)}\r\n {this.props.preferredStore}\r\n {this._renderAccountBlock(this.props)}\r\n <Node {...Divider} />\r\n {showQuickOrderLink ? this._renderQuickViewIcon(quickOrderUrl || '#') : null}\r\n {this.props.cartIcon}\r\n {this._renderReactFragment(this.props.siteOptions)}\r\n </div>\r\n\r\n </Node>\r\n <Node {...MobileMenuContainer}>\r\n <Node {...MobileMenuBodyContainer}>\r\n { this.props.MobileMenuHeader }\r\n {this._renderReactFragment(this.props.menuBar)}\r\n <Node {...MobileMenuLinksContainer}>\r\n { this.props.accountLinks ? this.props.accountLinks.map(link => link) : false }\r\n { this.props.siteOptions }\r\n { this.props.wishListIconMobile }\r\n { this.props.signInLink }\r\n { this.props.signOutLink }\r\n </Node>\r\n </Node>\r\n </Node>\r\n </Node>\r\n </Module>\r\n );\r\n }\r\n\r\n /**\r\n * Function to render phone number beside the logo.\r\n * @param props - IHeaderProps.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private _renderPhoneNumber(props: IHeaderProps<{}>): JSX.Element | null {\r\n const { config: { phoneNumber } } = props;\r\n const telephoneLink: string = `tel:+1-${phoneNumber}`;\r\n return (\r\n <div className=\"ms-header__phone-number\">\r\n <a href={telephoneLink} className=\"ms-header__phone-number-link\">{phoneNumber ? phoneNumber : \"\"}</a>\r\n </div>\r\n );\r\n }\r\n\r\n private _renderQuickViewIcon = (quickOrderLink: string) => (\r\n <div className={'ms-header__quick-order'}>\r\n <a href={quickOrderLink} className={'ms-header__quick-order-button'}>\r\n <span className={'ms-header__quick-order-button-text'}>Quick Order</span>\r\n </a>\r\n </div>\r\n )\r\n\r\n /**\r\n * Function to update header.\r\n */\r\n private readonly _configureStickyHeader = (): void => {\r\n // Get heights of cookie and promotion banners\r\n const defaultValue = 0;\r\n const headerAlertsContainer: HTMLElement | null = document.querySelector('.ms-promo-banner');\r\n const bannerHeights = headerAlertsContainer ? headerAlertsContainer.offsetHeight : defaultValue;\r\n\r\n // Triggers opacity change of header\r\n const headerElement = document.querySelector('header .default-container');\r\n if (headerElement) {\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > defaultValue) {\r\n headerElement.classList.add('lock-opaque');\r\n headerElement.classList.add('fixed');\r\n } else {\r\n headerElement.classList.remove('lock-opaque');\r\n headerElement.classList.remove('fixed');\r\n }\r\n }\r\n\r\n // Update sticky header position and opacity\r\n const stickyHeader: HTMLElement | null = document.querySelector('.desktop-navicon-container');\r\n const headerLogo: HTMLElement | null = document.querySelector('.ms-header__logo');\r\n\r\n if (stickyHeader && headerLogo) {\r\n // Fix center sticky header\r\n const navStickyPos = headerLogo.offsetHeight + bannerHeights;\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > navStickyPos) {\r\n stickyHeader.classList.add('fixed');\r\n } else {\r\n stickyHeader.classList.remove('fixed');\r\n }\r\n }\r\n };\r\n\r\n private _renderMobileLogo(): JSX.Element | null {\r\n const { config, context, typeName } = this.props;\r\n return (\r\n <Logo {\r\n ...{ link: config.logoLink,\r\n image: config.mobileLogoImage ?? {},\r\n className: 'ms-header__mobile-logo',\r\n gridSettings: context.request.gridSettings,\r\n requestContext: context.request,\r\n typeName }} />\r\n );\r\n }\r\n\r\n /**\r\n * Function to render account block.\r\n * @param props - IHeaderViewProps.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private readonly _renderAccountBlock = (props: IHeaderViewProps): JSX.Element | null => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { AccountInfoDropdownParentContainer, AccountInfoDropdownPopoverConentContainer,\r\n accountInfoDropdownButton,\r\n signOutLink,\r\n signInLink,\r\n accountLinks,\r\n context: { request: { user : { isOBORequest }} }\r\n } = props;\r\n if (AccountInfoDropdownParentContainer) {\r\n const changeUserSlug = 'Change User'; // Change user page\r\n let accountLinksFiltered: React.ReactNode[] = [];\r\n if (isOBORequest) { // If we're mocking a user, show the change user button, if we are not, remove it before render.\r\n accountLinksFiltered = accountLinks || [];\r\n } else if (accountLinks) {\r\n accountLinks.forEach(node => {\r\n const linkUrl = get(node, 'props.link.linkText');\r\n if (linkUrl && (linkUrl as string) !== changeUserSlug) {\r\n accountLinksFiltered.push(node);\r\n }\r\n })\r\n }\r\n const accountClassName = classnames(AccountInfoDropdownParentContainer.className, 'account-desktop');\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n <Node {...AccountInfoDropdownParentContainer} className={accountClassName}>\r\n {accountInfoDropdownButton}\r\n <Node {...AccountInfoDropdownPopoverConentContainer}>\r\n { accountLinksFiltered.map((link: React.ReactNode) => link) }\r\n {signOutLink}\r\n </Node>\r\n </Node>\r\n );\r\n } else if (signInLink) {\r\n return (\r\n <Node {...AccountInfoDropdownParentContainer} className={accountClassName}>\r\n {signInLink}\r\n </Node>\r\n );\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Function to render react fragment.\r\n * @param items - React nodes.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private readonly _renderReactFragment = (items: React.ReactNode[]): JSX.Element | null => {\r\n return (\r\n <>\r\n {ArrayExtensions.hasElements(items) ? items.map((slot: React.ReactNode) => {\r\n return (<>\r\n {slot}\r\n </>);\r\n }) : null}\r\n </>\r\n );\r\n };\r\n}\r\n\r\nexport default HeaderView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { RatingComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { IHistogramItemViewProps,\r\n IRatingsHistogramData,\r\n IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { format, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IRatingsHistogramProps, IRatingsHistogramResources } from '../definition-extensions/ratings-histogram.ext.props.autogenerated';\r\n\r\n/**\r\n * Histogram item.\r\n * @param props - Histogram Item ViewProps.\r\n * @returns Histogram Item node.\r\n */\r\nconst histogramItem = (props: IHistogramItemViewProps) => {\r\n return (\r\n <Node {...props.buttonProps} >\r\n {props.starLabel}\r\n {props.bar}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Average ratings.\r\n * @param data - Props data.\r\n * @param context - Histogram Item ViewProps.\r\n * @param typeName - Histogram Item ViewProps.\r\n * @param componentId - Histogram Item ViewProps.\r\n * @param resources - Module resource strings.\r\n * @returns Average ratings.\r\n */\r\nconst averageRating = (data: IRatingsHistogramData, context: ICoreContext, typeName: string, componentId: string, resources: IRatingsHistogramResources) => {\r\n const defaultAverageRating: number = 0;\r\n const reviewsCount = data.ratingsSummary.result?.reviewsCount ?? defaultAverageRating;\r\n const reviewsCountString = resources.numberOfReviewsString ? format(resources.numberOfReviewsString, reviewsCount) : `${reviewsCount} reviews`;\r\n\r\n return (\r\n <div className='ms-ratings-histogram__ratings'>\r\n <div className='ms-ratings-histogram__ratings__heading'>\r\n {data.ratingsSummary.result?.averageRating}\r\n </div>\r\n <div>\r\n <RatingComponent\r\n context={context}\r\n id={componentId}\r\n typeName={typeName}\r\n avgRating={data.ratingsSummary.result?.averageRating ?? defaultAverageRating}\r\n readOnly\r\n ariaLabel={format(resources.averageRatingAriaLabel, data.ratingsSummary.result?.averageRating, '5')}\r\n data={{}}\r\n />\r\n </div>\r\n <div className='ms-ratings-histogram__ratings__reviews'>\r\n {reviewsCountString}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Histogram view.\r\n * @param props - Ratings HistogramV iewProps.\r\n * @returns Histogram view module.\r\n */\r\nconst RatingsHistogramView: React.FC<IRatingsHistogramViewProps & IRatingsHistogramProps<{}>> = props => {\r\n const { heading, histogramItems, histogramProps, moduleProps, data, resources } = props;\r\n const context = props.context;\r\n const typeName = props.typeName;\r\n const moduleId = props.id;\r\n\r\n return (\r\n <Module {...moduleProps}>\r\n {heading}\r\n <div className='ms-ratings-histogram__container'>\r\n {averageRating(data, context, typeName, moduleId, resources)}\r\n <Node {...histogramProps}>\r\n {histogramItems.map(item => {\r\n return histogramItem(item);\r\n })}\r\n </Node>\r\n </div>\r\n </Module>\r\n );\r\n};\r\n\r\nexport default RatingsHistogramView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridViewProps, IQuickOrderGridFormViewProps } from './index';\n\n/**\n * Render product dimension/configure dropdown.\n * @param dropdown -- Product dimension drop down.\n * @returns Dropdown.\n */\nconst renderConfigureDropdown = (dropdown: IProductDimensionConfigureDropdownViewProps): JSX.Element => {\n const { containerProps, labelContainerProps, heading, errors, select } = dropdown;\n\n return (\n <Node {...containerProps}>\n <Node {...labelContainerProps}>{heading}</Node>\n {errors}\n {select}\n </Node>\n );\n};\n\n/**\n * Render product dimension/configure container.\n * @param configure -- Product dimension configuration.\n * @returns Container to have dimension dropdown.\n */\nconst renderConfigure = (configure?: IProductDimensionConfigureViewProps): JSX.Element | null => {\n if (configure !== undefined) {\n const { containerProps, dropdowns } = configure;\n\n return <Node {...containerProps}>{dropdowns.map(renderConfigureDropdown)}</Node>;\n }\n return null;\n};\n\n/**\n * Render product dimension/configure container.\n * @param form -- Form props.\n * @param isMobileView -- Flag to check mobile view.\n * @param quickOrderForm - Form component container.\n * @param quickOrderProductContent - Form product component.\n * @param quickOrderMessageContent - Form user message component.\n * @param configure - Product Dimension component.\n * @returns Jsx element of quick order form component.\n */\nconst renderForm = (\n form: IQuickOrderGridFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMessageContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n <Node {...quickOrderForm}>\n <Node {...quickOrderProductContent}>\n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n <Node {...quickOrderMessageContent}>{form.userMessage}</Node>\n {form.addToListBtn}\n </Node>\n </Node>\n ) : (\n <Node {...quickOrderForm}>\n <Node {...quickOrderMessageContent}>{form.userMessage}</Node>\n <Node {...quickOrderProductContent}>\n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToListBtn}\n </Node>\n </Node>\n );\n};\n\n/**\n * Retrieves current sort criteria.\n * @param props - QuickOrder Grid view props.\n * @returns - Render View.\n */\nconst quickOrderGridView: React.FC<IQuickOrderGridViewProps> = props => {\n const {\n quickOrderGridProps,\n contentProps,\n form,\n quickOrderGridForm,\n drawer,\n configure,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n isMobileView,\n header,\n container,\n actions,\n orderActions\n } = props;\n\n return (\n <Module {...quickOrderGridProps}>\n {header}\n {actions && (\n <Node {...actions}>\n {orderActions?.userMessage}\n {orderActions?.addProductListToBag}\n {orderActions?.removeProductList}\n </Node>\n )}\n <Node {...drawer}>\n <Node {...contentProps}>\n {renderForm(\n form as IQuickOrderGridFormViewProps,\n isMobileView,\n quickOrderGridForm,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n configure\n )}\n {props.bulkPurchase}\n </Node>\n </Node>\n {container}\n </Module>\n );\n};\n\nexport default quickOrderGridView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 { AddToCartBehavior } from '@msdyn365-commerce/components';\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\n\n/**\n * ICartIconViewState: Interface for Cart Icon View State.\n */\ninterface ICartIconViewState {\n isModalOpen: boolean;\n}\n\n/**\n * Render Cart lines.\n * @param cartLines - Flyout cart line view props.\n * @param props - Cart icon view props.-\n * @returns JSX Element.\n */\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n return cartLines.map((cartLine, index) => {\n const cartLineIndex = index;\n return (\n <Node {...props.miniCartItemWrapper} key={cartLineIndex}>\n <Node className={classnames(cartLine.storeLocation ? 'msc-cart-line__set-net-price' : '')}>{cartLine.cartline}</Node>\n {cartLine.storeLocation}\n {cartLine.remove}\n </Node>\n );\n });\n};\n\n/**\n * Initiate total price.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\n const totalPrice = price\n ? props.context.cultureFormatter.formatCurrency(price)\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\n return cart && !cart.hasInvoiceLine ? (\n <div className='ms-cart-icon__subTotalText'>\n <span className='ms-cart-icon__subTotalPriceText'>\n {props.resources.totalPriceFormatString}\n <span className='ms-cart-icon__subTotalPrice'>{totalPrice}</span>\n </span>\n </div>\n ) : (\n <></>\n );\n};\n\n/**\n * Initiate subtotal message.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderSubtotalMessage = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n return cart && !cart.hasInvoiceLine ? <p className='ms-cart-icon__subtotal-message'>{props.resources.subTotalMessage}</p> : null;\n};\n\n/**\n *\n * CartIconView component.\n * @extends {React.PureComponent<ICartIconViewProps>}\n */\nexport class CartIconView extends React.PureComponent<\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\n ICartIconViewState\n> {\n private isAutoDisplayTriggered: boolean;\n\n private readonly cartIconRef: React.RefObject<HTMLButtonElement> = React.createRef();\n\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\n super(props);\n this.isAutoDisplayTriggered = false;\n this.state = {\n isModalOpen: false\n };\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n window.addEventListener('keydown', this._escFunction, false);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('keydown', this._escFunction, false);\n }\n }\n\n /**\n * Render Cart Item count.\n * @returns JSX Element.\n */\n public render(): JSX.Element | null {\n const cart = this.props.data.cart.result ?? undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n if (shouldShowMiniCart) {\n if (!this.isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isModalOpen: true });\n this.isAutoDisplayTriggered = true;\n } else if (!this.state.isModalOpen) {\n // If modal is closed, reset the flag.\n this.isAutoDisplayTriggered = false;\n }\n }\n return (\n <Node {...this.props.miniCartWrapper} {...this.props.renderModuleAttributes(this.props)}>\n <button onClick={this._openModal} className='ms-cart-icon-wrapper msc-btn' ref={this.cartIconRef}>\n {this.props.cartIcon}\n </button>\n <Node {...this._modalContainer()}>\n <Node className='ms-cart-icon__header msc-modal__header'>\n {this.props.flyoutTitle}\n {this._renderCartItemCount(this.props)}\n {this._renderCartCloseIcon()}\n </Node>\n <Node className='ms-cart-icon__body msc-modal__body'>\n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\n {this.props.checkoutBlockedDueToUnavailableFunds}\n <Node {...this.props.CartlinesWrapper}>{renderCartlines(this.props.cartlines, this.props)}</Node>\n </Node>\n <Node className='ms-cart-icon__footer msc-modal__footer'>\n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n {renderSubtotalMessage(this.props)}\n {this.props.checkoutAsSignInUserButton}\n {this.props.checkoutAsGuestButton}\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\n <Node className='ms-cart-icon__btn-section'>\n {this.props.data.cart.result?.isEmpty ? (\n <Button\n className='ms-cart-icon__btn-backtoshopping'\n href={getUrlSync('home', this.props.context.actionContext)}\n >\n {this.props.resources.continueShoppingButtonTitle}\n </Button>\n ) : null}\n </Node>\n </Node>\n </Node>\n </Node>\n );\n }\n\n /**\n * Initiate modal container.\n * @returns Inode props.\n */\n private readonly _modalContainer = (): INodeProps => {\n return {\n tag: Modal,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__minicartmodal-container',\n wrapClassName: 'ms-cart-icon__minicartmodal',\n isOpen: this.state.isModalOpen,\n toggle: this.closeModal\n };\n };\n\n /**\n * Initiate open modal.\n */\n private readonly _openModal = (): void => {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\n this.setState({\n isModalOpen: true\n });\n };\n\n /**\n * Initiate close modal.\n */\n private readonly closeModal = (): void => {\n this.cartIconRef.current?.focus();\n this.setState({\n isModalOpen: false\n });\n };\n\n /**\n * Initiate cart close Icon.\n * @returns JSX Element.\n */\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\n return <Button className='ms-cart-icon__btn-close' aria-label='Close' onClick={this.closeModal} />;\n };\n\n /**\n * Render Cart Item count.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\n private readonly _renderCartItemCount = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const defaultCartItemCount: number = 0;\n\n const cartItemlength = props.data.cart.result ? props.data.cart.result.totalItemsInCart : defaultCartItemCount;\n const cartItemCount = `${cartItemlength} ${props.resources.items}`;\n\n return <Node className='ms-cart-icon__count'>{cartItemCount}</Node>;\n };\n\n /**\n * Handle escape click to close modal.\n * @param event - On press of any key.\n */\n private readonly _escFunction = (event: KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Escape && this.state.isModalOpen) {\n this.closeModal();\n }\n };\n}\n\nexport default CartIconView;\n","/*!\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 { IHeaderViewProps, Logo } from '@msdyn365-commerce-modules/header';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IHeaderProps } from '../definition-extensions/header.ext.props.autogenerated';\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n *\n * HeaderView component.\n * @extends {React.PureComponent<IHeaderViewProps>}\n */\nexport class HeaderView extends React.PureComponent<IHeaderViewProps & IHeaderProps<{}>> {\n private readonly menuNode: React.RefObject<HTMLDivElement>;\n\n public constructor(props: IHeaderViewProps & IHeaderProps<{}>) {\n super(props);\n this.menuNode = React.createRef();\n }\n\n public componentDidMount(): void {\n if (this.props.config.useStickyHeader) {\n // Set header update methods to trigger on scroll\n if (MsDyn365.isBrowser) {\n window.addEventListener('scroll', () => {\n this._configureStickyHeader();\n });\n }\n this._configureStickyHeader();\n }\n }\n\n public render(): JSX.Element | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n Divider,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer\n } = this.props;\n\n return (\n <Module {...HeaderTag}>\n <Node {...HeaderContainer}>\n <Node {...HeaderTopBarContainer}>\n <div className='desktop-navicon-container' ref={this.menuNode}>\n {this._renderReactFragment(this.props.menuBar)}\n </div>\n <div className='mobile-navicon-container'>{this.props.navIcon}</div>\n {this.props.logo}\n {this._renderMobileLogo()}\n {this._renderReactFragment(this.props.search)}\n {this.props.preferredStore}\n {this.props.currentDistributor}\n {this._renderAccountBlock(this.props)}\n <Node {...Divider} />\n {this.props.cartIcon}\n {this._renderReactFragment(this.props.siteOptions)}\n </Node>\n <Node {...MobileMenuContainer}>\n <Node {...MobileMenuBodyContainer}>\n {this.props.MobileMenuHeader}\n {this._renderReactFragment(this.props.menuBar)}\n <Node {...MobileMenuLinksContainer}>\n {this.props.accountLinks ? this.props.accountLinks.map(link => link) : false}\n {this.props.siteOptions}\n {this.props.wishListIconMobile}\n {this.props.signInLink}\n {this.props.signOutLink}\n </Node>\n </Node>\n </Node>\n </Node>\n </Module>\n );\n }\n\n /**\n * Function to update header.\n */\n private readonly _configureStickyHeader = (): void => {\n // Get heights of cookie and promotion banners\n const defaultValue = 0;\n const headerAlertsContainer: HTMLElement | null = document.querySelector('.ms-promo-banner');\n const bannerHeights = headerAlertsContainer ? headerAlertsContainer.offsetHeight : defaultValue;\n\n // Triggers opacity change of header\n const headerElement = document.querySelector('header .default-container');\n if (headerElement) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > defaultValue) {\n headerElement.classList.add('lock-opaque');\n headerElement.classList.add('fixed');\n } else {\n headerElement.classList.remove('lock-opaque');\n headerElement.classList.remove('fixed');\n }\n }\n\n // Update sticky header position and opacity\n const stickyHeader: HTMLElement | null = document.querySelector('.desktop-navicon-container');\n const headerLogo: HTMLElement | null = document.querySelector('.ms-header__logo');\n\n if (stickyHeader && headerLogo) {\n // Fix center sticky header\n const navStickyPos = headerLogo.offsetHeight + bannerHeights;\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > navStickyPos) {\n stickyHeader.classList.add('fixed');\n } else {\n stickyHeader.classList.remove('fixed');\n }\n }\n };\n\n private _renderMobileLogo(): JSX.Element | null {\n const { config, context, typeName } = this.props;\n return (\n <Logo\n {...{\n link: config.logoLink,\n image: config.mobileLogoImage ?? {},\n className: 'ms-header__mobile-logo',\n gridSettings: context.request.gridSettings,\n requestContext: context.request,\n typeName\n }}\n />\n );\n }\n\n /**\n * Function to render account block.\n * @param props - IHeaderViewProps.\n * @returns Returns JSX.Element | null.\n */\n private readonly _renderAccountBlock = (props: IHeaderViewProps): JSX.Element | null => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signInLink\n } = props;\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames(AccountInfoDropdownParentContainer.className, 'account-desktop');\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n <Node {...AccountInfoDropdownParentContainer} className={accountClassName}>\n {accountInfoDropdownButton}\n <Node {...AccountInfoDropdownPopoverConentContainer}>{this._renderAccountDropdownLinks(props)}</Node>\n </Node>\n );\n } else if (signInLink) {\n return (\n <Node {...AccountInfoDropdownParentContainer} className={accountClassName}>\n {signInLink}\n </Node>\n );\n }\n }\n return null;\n };\n\n private readonly _renderAccountDropdownLinks = (props: IHeaderViewProps): JSX.Element | null => {\n const { isOBORequest, switchCustomerLink, accountLinks, signOutLink } = props;\n if (isOBORequest) {\n return (\n <>\n {switchCustomerLink}\n {signOutLink}\n {accountLinks ? <Node className='ms-profile-button-splitter' /> : false}\n {accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false}\n </>\n );\n } else {\n return (\n <>\n {accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false}\n {signOutLink}\n </>\n );\n }\n };\n\n /**\n * Function to render react fragment.\n * @param items - React nodes.\n * @returns Returns JSX.Element | null.\n */\n private readonly _renderReactFragment = (items: React.ReactNode[]): JSX.Element | null => {\n return (\n <>\n {ArrayExtensions.hasElements(items)\n ? items.map((slot: React.ReactNode) => {\n return <>{slot}</>;\n })\n : null}\n </>\n );\n };\n}\n\nexport default HeaderView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport {\n IMediaData,\n IMediaGalleryThumbnailItemViewProps,\n IMediaGalleryThumbnailsViewProps,\n IMediaGalleryViewProps,\n MediaType\n} from '@msdyn365-commerce-modules/media-gallery';\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\nimport { IPlayerData, IPlayerOptions, IVideoMetadata, Player } from '@msdyn365-commerce-modules/video-player-utilities';\n\ninterface IMediaGalleryItemsProps extends IMediaGalleryThumbnailItemViewProps {\n Video?: React.ReactElement;\n}\n\n/**\n * Render the thumbnail item images.\n * @param thumbnail - The carousel thumbnail line props.\n * @returns Return HTML having thumbnail container props with image.\n */\nconst renderThumbnailItem = (thumbnail: IMediaGalleryItemsProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailItemContainerProps, Picture, Video } = thumbnail;\n\n return <Node {...ThumbnailItemContainerProps}>{Video ? Video : Picture}</Node>;\n};\n\n/**\n * Gets the thumbnail item to display media gallery images.\n * @param image - The media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param imageId - Image id.\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render images.\n */\nconst GetThumbnailItemComponent = (\n image: IImageData,\n imageSettings: IImageSettings,\n imageId: number,\n modifiedActiveIndex: number,\n props: IMediaGalleryViewProps,\n mediaTypeValue?: MediaType\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n /**\n * OnClick method of media gallery item.\n */\n const onClick = () => {\n props.callbackToggle?.();\n props.callbackThumbnailClick?.(imageId);\n props.state.activeIndex = imageId;\n };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n /**\n * Keydown event of media gallery item.\n * @param event - React.KeyboardEvent.\n */\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCodes.Enter) {\n event.preventDefault();\n onClick();\n }\n };\n const defaultIndex = 0;\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'listitem',\n key: imageId\n },\n Picture: (\n <Node className='ms-fullscreen-section'>\n <Button\n aria-label={image.altText}\n className='msc-ss-carousel-vert-button-wrapper'\n onClick={onClick}\n onKeyDown={handleKeyDown}\n >\n <Image\n requestContext={props.context.actionContext.requestContext}\n className='ms-media-gallery__thumbnail'\n {...image}\n gridSettings={props.context.request.gridSettings!}\n imageSettings={props.config.thumbnailImageSettings ?? imageSettings}\n loadFailureBehavior='hide'\n imageFallbackOptimize={props.state.shouldUseOptimizedImage}\n fallBackSrc={\n props.context.request.app?.config?.OmniChannelMedia ? '' : imageId === defaultIndex ? fallbackImage : image.src\n }\n bypassHideOnFailure={imageId === defaultIndex}\n />\n </Button>\n <Node\n className={\n mediaTypeValue === MediaType.Video ? 'ms-fullscreen-section__video-overlay' : 'ms-fullscreen-section__overlay'\n }\n >\n <Button\n onKeyDown={handleKeyDown}\n title={\n mediaTypeValue === MediaType.Video ? props.resources.playVideoTitleText : props.resources.fullScreenTitleText\n }\n role='button'\n className={\n mediaTypeValue === MediaType.Video\n ? 'ms-fullscreen-section__video-play-icon'\n : 'ms-fullscreen-section__magnifying-glass-icon'\n }\n onClick={onClick}\n />\n </Node>\n </Node>\n )\n };\n};\n\n/**\n * Render the video player.\n * @param mediaData - Media Data\n * @param index - Index of the video\n * @param activeIndex - Active Index\n * @param imageSettings - Image settings\n * @param props - Media gallery view props\n * @returns - JSX.Element.\n */\nconst RenderVideo = (\n mediaData: IMediaData,\n index: number,\n activeIndex: number,\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryItemsProps => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = props.config as IPlayerOptions;\n const playerResources = props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n index === activeIndex ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'listitem',\n key: index\n },\n Picture: <></>,\n Video: (\n <Video className='ms-media-gallery__player' editProps={{ key: videoData, requestContext: props.context.request }}>\n <Player\n playerData={videoPlayerData}\n isEditor={props.context.request.params.isEditor}\n playerResources={playerResources}\n />\n </Video>\n )\n };\n }\n return GetEmptyThumbnailItemComponent(imageSettings, props);\n};\n\n/**\n * Gets the empty thumbnail item to display media gallery images.\n * @param imageSettings - Image settings for the image gallery items.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render empty images.\n */\nconst GetEmptyThumbnailItemComponent = (\n imageSettings: IImageSettings,\n props: IMediaGalleryViewProps\n): IMediaGalleryThumbnailItemViewProps => {\n let fallbackImage: string | undefined = '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = props.context.app.config?.placeholderImageName as string;\n\n if (props.data.product.result) {\n fallbackImage = getFallbackImageUrl(\n props.data.product.result.ItemId,\n props.context.request.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && fallbackImage) {\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: 'ms-media-gallery__thumbnail-item',\n role: 'listitem',\n tabIndex: 0,\n key: 0,\n 'aria-label': ''\n },\n Picture: (\n <Image\n requestContext={props.context.actionContext.requestContext}\n className='ms-media-gallery__thumbnail-item__image'\n src='empty'\n gridSettings={props.context.request.gridSettings!}\n imageSettings={props.config.thumbnailImageSettings ?? imageSettings}\n loadFailureBehavior='empty'\n imageFallbackOptimize={!!props.config.skipImageValidation}\n fallBackSrc={fallbackImage}\n />\n )\n };\n};\n\n/**\n * Update media gallery items method.\n * @param items - The media gallery thumbnail item view props.\n * @returns The IImageData array.\n */\nconst getMediaGalleryItems = (items?: IMediaData[]): IMediaData[] | undefined => {\n return items?.map(item => {\n return {\n displayOrder: item.displayOrder,\n mediaTypeValue: item.mediaTypeValue,\n altText: item.altText,\n src: item.src,\n videoData: item.videoData\n };\n });\n};\n\nconst defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Render the Media gallery thumbnails to represent images in grid view.\n * @param thumbnails - The thumbnail view props.\n * @param props - The media gallery view props.\n * @returns - The single slide carousel component to render as media gallery image.\n */\nconst renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps, props: IMediaGalleryViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\n const { state } = props;\n const mediaGalleryItems = getMediaGalleryItems(state.mediaGalleryItems);\n\n const items: IMediaGalleryItemsProps[] | undefined =\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\n state.lastUpdate && ArrayExtensions.hasElements(mediaGalleryItems) && mediaGalleryItems[0].src === 'empty'\n ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)]\n : // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\n mediaGalleryItems?.map((item: IMediaData, id: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n if (props.config.allowFullScreen) {\n const videoThumbnail = item.videoData?.thumbnail;\n if (videoThumbnail) {\n return GetThumbnailItemComponent(\n videoThumbnail,\n defaultThumbnailImageSettings,\n id,\n state.activeIndex,\n props,\n item.mediaTypeValue\n );\n } else {\n return GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props);\n }\n } else {\n return RenderVideo(item, id, state.activeIndex, defaultThumbnailImageSettings, props);\n }\n } else {\n return GetThumbnailItemComponent(item, defaultThumbnailImageSettings, id, state.activeIndex, props);\n }\n });\n\n return (\n <Node {...ThumbnailsContainerProps}>\n <Node {...SingleSlideCarouselComponentProps}>{items?.map(renderThumbnailItem)}</Node>\n </Node>\n );\n};\n\n/**\n * Render the Media gallery items using viewprops.\n * @param props - The media gallery view props.\n * @returns The media gallery module wrapping up images node.\n */\nconst mediaGalleryView: React.FC<IMediaGalleryViewProps> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n // The thumbnails in AW theme aren't used as tabs\n const NewSingleSlideCarouselComponentProps = { ...Thumbnails.SingleSlideCarouselComponentProps, useTabList: false };\n const NewThumbnails = { ...Thumbnails, SingleSlideCarouselComponentProps: NewSingleSlideCarouselComponentProps };\n\n return (\n <Module {...MediaGallery}>\n <Node {...CarouselProps} />\n {Modal}\n {renderThumbnails(NewThumbnails, props)}\n </Module>\n );\n};\n\nexport default mediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* --------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n IRefineMenuViewProps,\n ISearchResultContainerV2ViewProps,\n ISortByViewProps,\n ITitleViewProps,\n ISearchResultV2ModalViewProps\n} from '@msdyn365-commerce-modules/search-result-container-v2';\nimport { Button, getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { MouseEventHandler } from 'react';\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport ProductComponentV2, { IProductSearchResult } from './components/product-v2.component';\nimport {\n ISearchResultContainerV2Props,\n ISearchResultContainerV2Resources\n} from '../definition-extensions/search-result-container-v2.ext.props.autogenerated';\n\n/**\n * DescriptionInterval.\n */\nenum DescriptionInterval {\n productDescriptionInterval = 14,\n productDescriptionIntervalRemainder0 = 0,\n productDescriptionIntervalRemainder9 = 9\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProductCards = (props: ISearchResultContainerV2ViewProps & ISearchResultContainerV2Props<{}>): JSX.Element | null => {\n return (\n <Node {...props.productsContainer}>\n {props.errorMessage}\n {props.products}\n </Node>\n );\n};\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nfunction getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: IProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.attributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.attributeValues.find(attribute => attribute.recordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.textValue;\n }\n return undefined;\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @param product - The product item data.\n * @param index - The index of each product item.\n * @param isEnabledProductDescription - The flag for showing Product desription tile.\n * @returns The JSX Element.\n */\nconst renderProductCardsDescription = (\n props: ISearchResultContainerV2ViewProps & ISearchResultContainerV2Props<{}>,\n product: IProductSearchResult,\n index: number,\n isEnabledProductDescription?: boolean\n): JSX.Element | null => {\n const { config, context, resources, productsDimensionAvailabilities } = props;\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n const breadCrumbType = props.context.app.config.breadcrumbType;\n const isAllowBack = props.config.allowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n const classname = isEnabledProductDescription\n ? 'ms-product-search-result__item product__description'\n : 'ms-product-search-result__item';\n const quickviewslot = ArrayExtensions.hasElements(props.slots.quickView) ? props.slots.quickView[0] : undefined;\n const channelInventoryConfigurationId = props.data.products.result?.channelInventoryConfigurationId;\n const isPriceMinMaxFeatureState = props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n\n const productComparisonButton = ArrayExtensions.hasElements(props.slots.productComparisonButton)\n ? props.slots.productComparisonButton[0]\n : null;\n\n return (\n <li className={classname} key={index}>\n <ProductComponentV2\n context={context}\n telemetryContent={telemetryContent}\n imageSettings={config.imageSettings}\n freePriceText={resources.priceFree}\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n ratingAriaLabel={resources.ratingAriaLabel}\n allowBack={isAllowBack}\n id={props.id}\n key={product.recordId}\n typeName={props.typeName}\n data={{ product }}\n quickViewButton={quickviewslot}\n productComparisonButton={productComparisonButton}\n isEnabledProductDescription={isEnabledProductDescription}\n inventoryLabel={getInventoryLabel(channelInventoryConfigurationId, product)}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n priceResources={priceResources}\n swatchItemAriaLabel={resources.swatchItemAriaLabel}\n dimensionAvailabilities={productsDimensionAvailabilities?.find(\n (dimensionAvailability: IProductsDimensionsAvailabilities[]) =>\n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.masterProductId\n )}\n />\n </li>\n );\n};\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProducts = (props: ISearchResultContainerV2ViewProps & ISearchResultContainerV2Props<{}>): JSX.Element | null => {\n const { listPageState, data } = props;\n const activeProducts = listPageState!.activeProducts;\n const products =\n !MsDyn365.isBrowser && !ArrayExtensions.hasElements(activeProducts)\n ? (data.products.result?.products as IProductSearchResult[]) ?? []\n : activeProducts;\n if (!ArrayExtensions.hasElements(products)) {\n return null;\n }\n const productDescriptionInterval: number = DescriptionInterval.productDescriptionInterval;\n const productDescriptionIntervalRemainder0: number = DescriptionInterval.productDescriptionIntervalRemainder0;\n const productDescriptionIntervalRemainder9: number = DescriptionInterval.productDescriptionIntervalRemainder9;\n return (\n <Node {...props.productsContainer}>\n {props.errorMessage}\n <ul className='list-unstyled'>\n {products.map((product: IProductSearchResult, index: number) =>\n index % productDescriptionInterval === productDescriptionIntervalRemainder0 ||\n index % productDescriptionInterval === productDescriptionIntervalRemainder9\n ? renderProductCardsDescription(props, product, index, true)\n : renderProductCardsDescription(props, product, index, false)\n )}\n </ul>\n </Node>\n );\n};\n\n/**\n * Render Title Count.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, titleContainer } = props;\n if (title) {\n return <Node {...titleContainer}>{title.titleCount}</Node>;\n }\n return null;\n};\n\n/**\n * Function to make filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nexport const configureStickyFilter = (isMobile: boolean, isStickyHeader: boolean): void => {\n // Get heights of cookie and promotion banners\n const defaultValue = 0;\n const defaultOffset = 28;\n const headerContainer: HTMLElement | null = document.querySelector('.ms-header');\n\n const headerHeight: number | undefined = headerContainer?.offsetHeight;\n const containerHeight: number = headerHeight ?? defaultOffset;\n const bannerHeights = isStickyHeader ? defaultValue : containerHeight;\n const headerElement = document.querySelector('header .lock-opaque');\n const defaultContainer = document.querySelector('header .default-container');\n const refinerElement = isMobile ? document.querySelector('.msc-sort-filter-wrapper') : document.querySelector('.ms-refiner-heading');\n if (refinerElement && headerElement && defaultContainer) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-Filter');\n refinerElement.setAttribute('style', `top: ${defaultContainer.clientHeight}px`);\n } else {\n refinerElement.classList.remove('lock-Filter');\n }\n } else if (refinerElement) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-top');\n } else {\n refinerElement.classList.remove('lock-top');\n refinerElement.classList.remove('lock-Filter');\n refinerElement.removeAttribute('style');\n }\n }\n};\n\n/**\n * Function to setup filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nfunction stickyFilterSetup(isMobile: boolean, isStickyHeader: boolean): void {\n window.addEventListener('scroll', () => {\n configureStickyFilter(isMobile, isStickyHeader);\n });\n configureStickyFilter(isMobile, isStickyHeader);\n}\n\n/**\n * Function to make filter sticky.\n * @param refinerRefernce - Ref prop for filter.\n * @param toggle - Toggle function for filter menu.\n */\nfunction useOutsideClick(refinerRefernce: React.RefObject<HTMLElement>, toggle: (event: Event) => void) {\n React.useEffect(() => {\n /**\n * Function to make filter sticky.\n * @param event - Event prop for filter.\n */\n function handleClickOutside(event: Event) {\n const element = document.querySelector('.ms-refine-filter__toggle_collapsed');\n if (refinerRefernce.current && !refinerRefernce.current.contains(event.target as Node) && !element) {\n toggle(event);\n }\n }\n if (MsDyn365.isBrowser) {\n document.addEventListener('click', handleClickOutside);\n }\n return () => {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('click', handleClickOutside);\n }\n };\n }, [refinerRefernce, toggle]);\n}\n\n/**\n * Render the category page items.\n * @param props - The view props.\n * @returns The search Result container module view.\n */\nconst SearchResultContainerView: React.FC<ISearchResultContainerV2ViewProps & ISearchResultContainerV2Props<{}>> = props => {\n const {\n searchResultContainer,\n pagination,\n productSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n titleViewProps,\n refineMenu,\n sortByOptions,\n categoryNavContainer,\n refineAndProductSectionContainer,\n featureSearchContainer,\n similarLookProduct,\n errorMessage,\n resources\n } = props;\n React.useEffect(() => {\n if (props.config.useStickyFilter && MsDyn365.isBrowser) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app context is generic\n stickyFilterSetup(props.isMobile, props.context.app.config.enableStickyHeader as boolean);\n }\n }, [props]);\n const [isExpanded, setIsExpanded] = React.useState<boolean>(false);\n const toggle = () => {\n setIsExpanded(!isExpanded);\n };\n const wrapperRefiner = React.useRef(null);\n useOutsideClick(wrapperRefiner, toggle);\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...searchResultContainer}>\n {similarLookProduct ? null : (\n <Node {...categoryNavContainer}>\n {renderTitle(titleViewProps)}\n {renderTitleCount(titleViewProps)}\n </Node>\n )}\n {choiceSummary}\n <Node className='msc-sort-filter-wrapper'>{modalToggle}</Node>\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...featureSearchContainer}>{similarLookProduct}</Node>\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...searchResultContainer}>\n {similarLookProduct ? null : (\n <Node {...categoryNavContainer}>\n {titleViewProps && renderTitle(titleViewProps)}\n {titleViewProps && renderTitleCount(titleViewProps)}\n </Node>\n )}\n <Node {...featureSearchContainer}>{similarLookProduct}</Node>\n <Node {...refineAndProductSectionContainer}>\n <Node ref={wrapperRefiner} className='ms-refiner-heading'>\n <Node className='ms-refiner-heading_title'>\n <Button\n className={isExpanded ? 'ms-refine-filter__toggle_expanded' : 'ms-refine-filter__toggle_collapsed'}\n aria-label='Filter'\n onClick={toggle}\n aria-expanded={isExpanded}\n tabIndex={0}\n >\n {resources.filterText}\n </Button>\n <div className='ms-search-result-wrapper-title-choice-summary'>{choiceSummary}</div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n </Node>\n {refineMenu && isExpanded && renderRefiner(refineMenu)}\n <Node className='ms-refine__footer'>\n {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}\n </Node>\n </Node>\n\n <Node {...productSectionContainer}>\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\n/**\n * Render Search result Modal.\n * @param modalProps - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createSearchResultModal = (\n modalProps: ISearchResultV2ModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown?: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\n/**\n * Render Refiner Mobile.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefinerMobile = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, refineMenuContainer, refinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...refinerSectionContainer}>\n <Node {...refineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render Search result Body.\n * @param props - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createModalBody = (\n props: ISearchResultV2ModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown?: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefinerMobile(refineMenu));\n }\n return null;\n};\n\n/**\n * Render Refiner.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, refineMenuContainer, refinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...refinerSectionContainer}>\n <Node {...refineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render Refiner Footer.\n * @param props - The Refine Menu view props.\n * @param handler - The Refine menu toggle function.\n * @param resources - Resources to get the done text and aria label.\n * @returns The JSX Element.\n */\nconst renderRefinerFooter = (\n props: IRefineMenuViewProps,\n handler: MouseEventHandler,\n resources: ISearchResultContainerV2Resources\n): JSX.Element | null => {\n const { refiners } = props;\n if (refiners) {\n return (\n <Node className='ms-refine__footer__done'>\n <Node tag='button' className='ms-refine-filter-done' aria-label={resources.doneAriaLabel} tabIndex={0} onClick={handler}>\n {resources.doneText}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render sort by drop down.\n * @param props - The sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { sortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...sortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\n/**\n * Render Title.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, titleContainer } = props;\n if (title) {\n return (\n <Node {...titleContainer}>\n <Node tag='h1' className=''>\n {title.titlePrefix}\n {title.titleText}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLinePriceEditor, ICartLinePriceEditorResources, PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\n/**\n * ICartlineResourceString: Interface for specifying the\n * resource strings that the component needs.\n */\nexport interface ICartlineResourceString {\n /**\n * Display string for discount label\n */\n discountStringText: string;\n\n /**\n * String for size key\n */\n sizeString: string;\n\n /**\n * String for color key\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension\n */\n configString: string;\n\n /**\n * String for style key\n */\n styleString: string;\n\n /**\n * String for amount key\n */\n amountString?: string;\n\n /**\n * Display string for quantity label\n */\n quantityDisplayString: string;\n\n /**\n * Display string for quantity label\n */\n inputQuantityAriaLabel: string;\n\n /**\n * Aria label for the decrement button in quantity component\n */\n decrementButtonAriaLabel: string;\n\n /**\n * Aria label for the increment button in quantity component\n */\n incrementButtonAriaLabel: string;\n\n /**\n * Original text screenreader\n */\n originalPriceText: string;\n\n /**\n * Current text screenreader\n */\n currentPriceText: string;\n\n /**\n * Shipping Charges Text\n */\n shippingChargesText: string;\n\n priceEditorResources?: ICartLinePriceEditorResources;\n salesAgreementPricePrompt?: string;\n}\n\ninterface ICartLineData {\n cartLine: CartLine | SalesLine;\n cartState?: ICartState;\n product?: SimpleProduct;\n catalogs?: ProductCatalog[];\n}\n\n/**\n * ICartLineProps: The props required to render cartLineitem.\n */\nexport interface ICartLineProps extends IComponentProps<ICartLineData> {\n /**\n * The flag to change the quantity component from intractable to static.\n */\n disableQuantityInteractivity?: boolean;\n\n /**\n * The primary image url.\n */\n primaryImageUrl?: string;\n\n /**\n * The product url.\n */\n productUrl?: string;\n\n /**\n * GridSettings for the product image in cartLine.\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartLine.\n */\n imageSettings: IImageSettings;\n\n /**\n * Boolean flag to indicate if the item is out of stock.\n */\n isOutOfStock?: boolean;\n\n /**\n * Flag to make quantity section editable.\n */\n isQuantityEditable?: boolean;\n\n /**\n * Max quantity for line item.\n */\n maxQuantity?: number;\n\n /**\n * Current quantity for line item.\n */\n currentQuantity?: number;\n\n /**\n * Resource string for the component.\n */\n resources: ICartlineResourceString;\n\n /**\n * SalesLine flag.\n */\n isSalesLine?: boolean;\n\n /**\n * Error message to show in place of quantity.\n */\n errorMessage?: string;\n\n /**\n * Inventory information label.\n */\n inventoryInformationLabel?: string;\n\n /**\n * Inventory information class name.\n */\n inventoryLabelClassName?: string;\n\n /**\n * Flag to show/hide shipping charges for line items.\n */\n showShippingChargesForLineItems?: boolean;\n\n /**\n * Boolean flag to indicate if cart state status is ready.\n */\n isCartStateReady?: boolean;\n\n /**\n * Chanel Delivery Option configuration is from api.\n */\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n\n /**\n * The cart line index.\n */\n lineIndex?: number;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): boolean;\n priceCurrency?: string;\n}\n\ninterface IDimensionStrings {\n /**\n * String for size key.\n */\n sizeString: string;\n\n /**\n * String for color key.\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension.\n */\n configString: string;\n\n /**\n * String for style key.\n */\n styleString: string;\n\n /**\n * String for amount key.\n */\n amountString?: string;\n}\n\n/**\n * Renders catalog label for the cart line.\n * @param props - Cart line props.\n * @returns Catalog label.\n */\nconst CatalogLabelComponent: React.FC<ICartLineProps> = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\n return null;\n }\n\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return <div className='msc-cart-line__catalog-label'>{catalog.Name}</div>;\n};\n\nconst CartLineItemFunctions = {\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\n if (!Product || !Product.Dimensions) {\n return [];\n }\n\n return Product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === 1) {\n return (\n <div key={`${Product.RecordId}ProductDimensions1`} className='msc-cart-line__product-variant-item'>\n <span className='msc-cart-line__product-variant-color'>\n {DimensionStrings.colorString}:\n <span className='name'>{productDimension.DimensionValue && productDimension.DimensionValue.Value}</span>\n </span>\n </div>\n );\n }\n\n if (productDimension.DimensionTypeValue === 2) {\n return (\n <div key={`${Product.RecordId}ProductDimensions2`} className='msc-cart-line__product-variant-item'>\n <span className='msc-cart-line__product-configuration'>\n {DimensionStrings.configString}:\n <span className='name'>{productDimension.DimensionValue && productDimension.DimensionValue.Value}</span>\n </span>\n </div>\n );\n }\n\n if (productDimension.DimensionTypeValue === 3) {\n return (\n <div key={`${Product.RecordId}ProductDimensions3`} className='msc-cart-line__product-variant-item'>\n <span className='msc-cart-line__product-variant-size'>\n {DimensionStrings.sizeString}:\n <span className='name'>{productDimension.DimensionValue && productDimension.DimensionValue.Value}</span>\n </span>\n </div>\n );\n }\n\n if (productDimension.DimensionTypeValue === 4) {\n return (\n <div key={`${Product.RecordId}ProductDimensions4`} className='msc-cart-line__product-variant-item'>\n <span className='msc-cart-line__product-variant-style'>\n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\n <span className='name'>{productDimension.DimensionValue && productDimension.DimensionValue.Value}</span>\n </span>\n </div>\n );\n }\n return null;\n });\n },\n\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\n return null;\n }\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n <div key={discountLine.OfferId || index} className='msc-cart-line-item-product-discount'>\n <span>\n {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\n </span>\n <span className='cart-line-item-product-discount-price'>\n <PriceComponent\n data={\n props.isSalesLine\n ? {\n price: {\n // @ts-expect-error\n CustomerContextualPrice: props.data.cartLine.PeriodicDiscount\n }\n }\n : {\n price: {\n CustomerContextualPrice: discountLine.EffectiveAmount,\n BasePrice: discountLine.EffectiveAmount\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n currencyCode={props.priceCurrency}\n />\n </span>\n <span>{` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}</span>\n </div>\n );\n });\n },\n renderInventoryLabel: (props: ICartLineProps) => {\n if (!props.inventoryInformationLabel) {\n return null;\n }\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n return <span className={inventoryCssName}>{props.inventoryInformationLabel}</span>;\n },\n\n /**\n * Gets the react node for product unit of measure display.\n * @param props - Icartline props.\n * @returns The node representing markup for unit of measure component.\n */\n renderUnitOfMeasure: (props: ICartLineProps) => {\n if (props.data.cartLine.IsInvoiceLine) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\n return undefined;\n }\n\n const product = props.data.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n <div className='msc-cartline__product-unit-of-measure'>\n <span>{product.DefaultUnitOfMeasure}</span>\n </div>\n );\n },\n renderShippingLabel: (props: ICartLineProps) => {\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\n const cartline = props.data.cartLine;\n let hasShippingMethod = false;\n if (channelDeliveryOptionConfig !== undefined) {\n hasShippingMethod = !!(\n cartline.DeliveryMode &&\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\n );\n } else {\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\n }\n if (!hasShippingMethod) {\n return undefined;\n }\n\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\n\n if (shippingChargeLines.length === 0) {\n return undefined;\n }\n\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\n }, 0);\n\n const priceComponent = (\n <PriceComponent\n data={{\n price: {\n CustomerContextualPrice: freightFee\n }\n }}\n freePriceText='Free'\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__freight-actual'\n currencyCode={props.priceCurrency}\n />\n );\n return (\n <>\n <label className='msc-cart-line__freight-label'>{`${props.resources.shippingChargesText}:`}</label>\n <span className='shipping-value'>{priceComponent}</span>\n </>\n );\n },\n renderOtherCharges: (props: ICartLineProps) => {\n const cartline = props.data.cartLine;\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\n\n return (\n (otherCharges &&\n otherCharges.map((otherCharge, key) => {\n return otherCharge && otherCharge.CalculatedAmount ? (\n <div className='msc-cart-line__other-charges' key={key}>\n <label className='msc-cart-line__other-charges-label'>{`${otherCharge.Description}:`}</label>\n <span className='other-charge-value'>\n <PriceComponent\n data={{\n price: {\n CustomerContextualPrice: otherCharge.CalculatedAmount\n }\n }}\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__other-charges-actual'\n currencyCode={props.priceCurrency}\n />\n </span>\n </div>\n ) : (\n ''\n );\n })) ||\n undefined\n );\n },\n\n /**\n * Render the sales agreement prompt.\n * @param props - The ICartLineProps.\n * @returns The JSX.Element.\n */\n renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return <div className='msc-cart-line__sales-agreement-prompt'>{props.resources.salesAgreementPricePrompt}</div>;\n }\n};\n\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC<ICartLineProps> = (props: ICartLineProps) => {\n const { isSalesLine, productUrl, resources } = props;\n const { product, cartLine } = props.data;\n\n const destructDimensionStrings = {\n sizeString: resources.sizeString,\n colorString: resources.colorString,\n styleString: resources.styleString,\n configString: resources.configString,\n amountString: resources.amountString\n };\n\n const fallbackImageUrl =\n product &&\n getFallbackImageUrl(\n product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\n const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const productName = product?.Name || cartLine.Description;\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\n\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\n }\n return true;\n };\n\n const _generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n <div className='msc-cart-line__error-message msc-alert__header'>\n <span className='msi-exclamation-triangle' />\n <span>{props.errorMessage}</span>\n </div>\n );\n }\n\n return null;\n };\n\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\n const nodes = [];\n if (props.isOutOfStock) {\n return null;\n }\n\n // No quantity selector for invoice line\n if (!props.data.cartLine.IsInvoiceLine) {\n if (props.data.product && props.isQuantityEditable) {\n nodes.push(\n <div className='msc-cart-line__product-quantity'>\n <div className='msc-cart-line__product-quantity-label'>{resources.quantityDisplayString}</div>\n <IncrementalQuantity\n id={`msc-cart-line__quantity_${props.data.product.RecordId}-${props.data.cartLine.DeliveryMode}-${props.data.cartLine.LineId}`}\n max={props.maxQuantity || 10}\n currentCount={props.currentQuantity}\n onChange={onChange}\n inputQuantityAriaLabel={resources.inputQuantityAriaLabel}\n decrementButtonAriaLabel={resources.decrementButtonAriaLabel}\n incrementButtonAriaLabel={resources.incrementButtonAriaLabel}\n key={props.data.cartLine.LineId}\n disabled={!props.isCartStateReady}\n isGiftCard={props.data.product.IsGiftCard}\n telemetryContent={props.telemetryContent}\n />\n </div>\n );\n } else {\n nodes.push(\n <div className={classNames('msc-cart-line__quantity', { 'single-quantity': props.data.cartLine.Quantity === 1 })}>\n <label className='quantity-label'>{resources.quantityDisplayString}:</label>\n <span className='quantity-value'>{props.data.cartLine.Quantity}</span>\n </div>\n );\n }\n }\n\n nodes.push(\n <div className='msc-cart-line__product-savings'>\n <PriceComponent\n data={\n isSalesLine\n ? {\n price: {\n CustomerContextualPrice: (props.data.cartLine as SalesLine).NetAmountWithAllInclusiveTax,\n BasePrice: (props.data.cartLine as SalesLine).GrossAmount\n }\n }\n : {\n price: {\n CustomerContextualPrice: (props.data.cartLine as CartLine).ExtendedPrice,\n BasePrice: props.data.cartLine.NetPrice\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__product-savings-actual'\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n currencyCode={props.priceCurrency}\n />\n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\n <>\n <span className='msc-cart-line__product-savings-label'>\n {` ${props.resources.discountStringText || 'Discount'} `}\n </span>\n <PriceComponent\n data={\n props.isSalesLine\n ? {\n price: {\n // @ts-expect-error\n CustomerContextualPrice: props.data.cartLine.PeriodicDiscount\n }\n }\n : {\n price: {\n CustomerContextualPrice: props.data.cartLine.DiscountAmount,\n BasePrice: props.data.cartLine.DiscountAmount\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='msc-cart-line__product-savings-text'\n salesAgreementLineId={props.data.cartLine.SalesAgreementLineRecordId}\n currencyCode={props.priceCurrency}\n />\n </>\n )) ||\n null}\n </div>\n );\n\n return nodes;\n };\n\n return (\n <>\n <div className='msc-cart-line'>\n <div className={imgeClassName}>\n <Image\n requestContext={props.context.actionContext.requestContext}\n src={props.primaryImageUrl ?? 'empty'}\n fallBackSrc={fallbackImageUrl}\n altText={productName}\n gridSettings={props.gridSettings}\n imageSettings={imageSettings}\n loadFailureBehavior='empty'\n />\n </div>\n <div className='msc-cart-line__content'>\n <div className='msc-cart-line__product'>\n <CatalogLabelComponent {...props} />\n {MsDyn365.isBrowser ? (\n <a className='msc-cart-line__product-title' {...productAttribute} href={productUrl} key={productUrl}>\n {productName}\n </a>\n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n <div className='msc-cart-line__product-variants'>{productDimensions}</div>\n ) : (\n ''\n )}\n {renderUnitOfMeasure}\n <div className='msc-cart-line__product-price'>\n <PriceComponent\n data={\n isSalesLine\n ? {\n price: {\n CustomerContextualPrice: (props.data.cartLine as SalesLine).NetAmountWithAllInclusiveTax,\n BasePrice: (props.data.cartLine as SalesLine).GrossAmount\n }\n }\n : {\n price: {\n CustomerContextualPrice: (props.data.cartLine as CartLine).ExtendedPrice,\n BasePrice: props.data.cartLine.NetPrice\n }\n }\n }\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n className='discount-value'\n salesAgreementLineId={props.data.cartLine.SalesAgreementLineRecordId}\n currencyCode={props.priceCurrency}\n />\n </div>\n {renderDisountLines}\n {renderInventoryLabel}\n {props.showShippingChargesForLineItems && <div className='msc-cart-line__freight'>{renderShippingLabel}</div>}\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n </div>\n {_generateQuantityandPrice()}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n <CartLinePriceEditor\n className='msc-cart-line__price-editor-container'\n context={props.context}\n resources={props.resources.priceEditorResources}\n cartState={props.data.cartState}\n cartLine={props.data.cartLine}\n />\n )}\n </div>\n </div>\n {_generateErrorMessage()}\n </>\n );\n};\n\nexport default CartLine;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { CheckoutState } from './checkout-state';\n\n/**\n * CheckoutState - action input.\n */\nexport class CheckoutStateInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('CheckoutState', this.apiSettings);\n\n public getCacheObjectType = () => 'CheckoutState';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CheckoutState - action.\n * @param input\n * @param ctx\n */\nexport async function checkoutStateAction(input: CheckoutStateInput, ctx: IActionContext): Promise<CheckoutState> {\n return new CheckoutState();\n}\n\n/**\n * CheckoutState - create new input for create action.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext<IGeneric<IAny>>): IActionInput => {\n return new CheckoutStateInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * CheckoutState - create action.\n */\nexport const checkoutStateActionDataAction = createObservableDataAction<CheckoutState>({\n action: <IAction<CheckoutState>>checkoutStateAction,\n input: createInput\n});\n\nexport default checkoutStateActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Address, GiftCard, Note, TenderLine, TokenizedPaymentCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { action, computed, observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a checkout.\n */\nexport class CheckoutState {\n @observable private _tokenizedPaymentCard: TokenizedPaymentCard | undefined;\n\n @computed public get tokenizedPaymentCard(): Readonly<TokenizedPaymentCard> | undefined {\n return this._tokenizedPaymentCard;\n }\n\n @observable private _tenderLine: TenderLine | undefined;\n\n @computed public get tenderLine(): Readonly<TenderLine> | undefined {\n return this._tenderLine;\n }\n\n @observable private _billingAddress: Address | undefined;\n\n @computed public get billingAddress(): Readonly<Address> | undefined {\n return this._billingAddress;\n }\n\n @observable private _shippingAddress: Address | undefined;\n\n @computed public get shippingAddress(): Readonly<Address> | undefined {\n return this._shippingAddress;\n }\n\n @observable private _cardPrefix: string | undefined;\n\n @computed public get cardPrefix(): Readonly<string> | undefined {\n return this._cardPrefix;\n }\n\n @observable private _giftCards: GiftCard[] = [];\n\n @computed public get giftCards(): readonly GiftCard[] {\n return this._giftCards;\n }\n\n @observable private _giftCardExtends: IGiftCardExtend[] = [];\n\n @computed public get giftCardExtends(): readonly IGiftCardExtend[] {\n return this._giftCardExtends;\n }\n\n @observable private _loyaltyCardNumber?: string;\n\n @computed public get loyaltyCardNumber(): Readonly<string> | undefined {\n return this._loyaltyCardNumber;\n }\n\n @observable private _loyaltyAmount: number = 0;\n\n @computed public get loyaltyAmount(): Readonly<number> | number {\n return this._loyaltyAmount;\n }\n\n @observable private _guestCheckoutEmail: string = '';\n @observable private _customerReference: string = '';\n @observable private _customerRequisition: string = '';\n @observable private _note: Note = {};\n\n @computed public get guestCheckoutEmail(): Readonly<string> | string {\n return this._guestCheckoutEmail;\n }\n\n @computed public get customerReference(): Readonly<string> | string {\n return this._customerReference;\n }\n\n @computed public get customerRequisition(): Readonly<string> | string {\n return this._customerRequisition;\n }\n\n @computed public get note(): Readonly<Note> | Note[] {\n return this._note;\n }\n\n @observable private _isTermsAndConditionAccepted: boolean = false;\n\n @computed public get isTermsAndConditionAccepted(): Readonly<boolean> | boolean {\n return this._isTermsAndConditionAccepted;\n }\n\n @observable private _customerAccountAmount: number = 0;\n\n @computed public get customerAccountAmount(): Readonly<number> | number {\n return this._customerAccountAmount;\n }\n\n @action\n public updateTokenizedPaymentCard(newTokenizedPaymentCard: TokenizedPaymentCard): void {\n this._tokenizedPaymentCard = newTokenizedPaymentCard;\n }\n\n @action\n public updateTenderLine(newTenderLine: TenderLine | undefined): void {\n this._tenderLine = newTenderLine;\n }\n\n @action\n public updateShippingAddress(newShippingAddress: Address): void {\n this._shippingAddress = newShippingAddress;\n }\n\n @action\n public updateBillingAddress(newBillingAddress: Address): void {\n this._billingAddress = newBillingAddress;\n }\n\n @action\n public updateCardPrefix(newCardPrefix: string): void {\n this._cardPrefix = newCardPrefix;\n }\n\n @action\n public removeGiftCard(giftCardNumber: string): void {\n this._giftCards = this._giftCards.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public removeGiftCardExtend(giftCardNumber: string): void {\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public addGiftCard(giftCard: GiftCard): void {\n this._giftCards = [giftCard, ...this._giftCards];\n }\n\n @action\n public addGiftCardExtend(giftCard: IGiftCardExtend): void {\n this._giftCardExtends = [giftCard, ...this._giftCards];\n }\n\n @action\n public updateLoyaltyCardNumber(newLoyaltyCardNumber: string): void {\n this._loyaltyCardNumber = newLoyaltyCardNumber;\n }\n\n @action\n public updateLoyaltyAmount(newAmount: number): void {\n this._loyaltyAmount = newAmount;\n }\n\n @action\n public updateGuestCheckoutEmail(\n newGuestCheckoutEmail: string,\n customerReference: string,\n customerRequisition: string,\n note: Note\n ): void {\n this._guestCheckoutEmail = newGuestCheckoutEmail;\n this._customerReference = customerReference;\n this._customerRequisition = customerRequisition;\n this._note = note;\n }\n\n @action\n public updateTermsAndConditionsAcceptance(newIsTermsAndConditionAccepted: boolean): void {\n this._isTermsAndConditionAccepted = newIsTermsAndConditionAccepted;\n }\n\n @action\n public updateCustomerAccountAmount(newAmount: number): void {\n this._customerAccountAmount = newAmount;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModule } from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport isMatch from 'lodash/isMatch';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { getModuleStates, updateModuleStates } from './module-state';\nimport { IModuleState, IModuleStateManager, IModuleStateProps, IModuleStates } from './module-state.data';\n\nexport interface IProps extends IModule, IModuleStateProps {\n enableControl?: boolean;\n}\n\nconst sectionContainerModuleId = 'section-container';\nconst paymentInstrumentModuleId = 'payment-instrument';\n\nconst withModuleState = <P extends IProps>(WrappedComponent: React.ComponentType<P>): React.ComponentType<P> => {\n /**\n *\n * ModuleState component.\n * @extends {React.Component<P>}\n */\n @observer\n class ModuleState extends React.Component<P> {\n constructor(props: P) {\n super(props);\n this.initializeState();\n }\n\n public shouldComponentUpdate(nextProps: IModuleStateProps): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { id } = this.props;\n return <WrappedComponent {...this.props} moduleState={this.getModuleStateManager(id)} />;\n }\n\n private readonly initializeState = (): void => {\n const { id, typeName, context } = this.props;\n const states = getModuleStates(context.actionContext);\n if (!states) {\n this.props.telemetry.error('withModuleState initializeState() - states not found');\n return;\n }\n\n if (states[id]) {\n // State has been initialized\n return;\n }\n\n updateModuleStates(\n {\n ...states,\n [id]: {\n id,\n typeName,\n hasInitialized: false,\n hasError: false,\n isRequired: true,\n isCancellable: true,\n isSubmitContainer: false,\n status: undefined,\n childIds: []\n }\n },\n context.actionContext\n );\n };\n\n /**\n * GetModuleStateManager\n * Get module state manager by id.\n * @param id\n */\n private readonly getModuleStateManager = (id: string): IModuleStateManager => {\n const moduleState = this.get()[id];\n return {\n ...moduleState!,\n hasInitialized: this.validate(id, { hasInitialized: true }, true), // All has initialized is initialized\n hasError: this.validate(id, { hasError: true }), // Partial has error is error\n isReady: this.validate(id, { status: 'ready' }, true, true), // All ready is ready (exclued disabled and skipped)\n isUpdating: this.validate(id, { status: 'updating' }), // Partial updating is updating\n isPending: this.validate(id, { status: 'pending' }), // Partial pending is pending\n isSkipped: this.validate(id, { status: 'skipped' }, true, true), // All skipped is skipped (exclued disabled)\n isDisabled: this.validate(id, { status: 'disabled' }, true), // All disabled is disabled\n isCancelAllowed: this.validate(id, { isCancellable: true }, true, true), // Partial not allowed is not allowed\n shouldSubmitContainer: this.validate(id, { isSubmitContainer: true }), // Partial submit is submit.\n hasExternalSubmitGroup: this.hasExternalSubmitGroup(),\n hasModuleState: this.hasModuleState(id),\n setIsRequired: (value: boolean): void => {\n this.update(id, { isRequired: value });\n },\n setIsCancellable: (value: boolean): void => {\n this.update(id, { isCancellable: value });\n },\n setIsSubmitContainer: (value: boolean): void => {\n this.update(id, { isSubmitContainer: value });\n },\n setHasError: (value: boolean): void => {\n this.update(id, { hasError: value });\n },\n onReady: (): void => {\n this.update(id, { status: 'ready' });\n },\n onUpdating: (): void => {\n this.update(id, { status: 'updating' });\n },\n onPending: (): void => {\n this.update(id, { status: 'pending' });\n },\n onSkip: (): void => {\n this.update(id, { status: 'skipped' });\n },\n onDisable: (): void => {\n this.update(id, { status: 'disabled' });\n },\n getModule: (moduleId: string): IModuleStateManager => this.getModuleStateManager(moduleId),\n getModuleByTypeName: (typeName: string): IModuleStateManager => this.getModuleStateManagerByTypeName(typeName),\n init: (options?: Partial<IModuleState>): void => {\n if (moduleState?.hasInitialized) {\n // State has been initialized\n return;\n }\n this.update(id, {\n hasInitialized: true,\n ...options\n });\n }\n };\n };\n\n /**\n * GetModuleStateManagerByTypeName\n * Get module state manager by type name.\n * @param typeName\n */\n private readonly getModuleStateManagerByTypeName = (typeName: string): IModuleStateManager => {\n const moduleStates = getModuleStates(this.props.context.actionContext);\n const moduleState = Object.values(moduleStates).find(_moduleState => _moduleState?.typeName === typeName);\n return this.getModuleStateManager((moduleState && moduleState.id) || '');\n };\n\n /**\n * Get\n * Get all module states.\n */\n private readonly get = (): IModuleStates => {\n return getModuleStates(this.props.context.actionContext);\n };\n\n /**\n * Update\n * Update module state.\n * @param id\n * @param value\n */\n private readonly update = (id: string, value: Partial<IModuleState>): void => {\n // Console.log('withModuleState - update', id, value);\n const modules = this.get();\n if (!modules[id]) {\n this.props.telemetry.error(`withModuleState update() - Module state with id ${id} is not found.`);\n return;\n }\n modules[id] = {\n ...modules[id]!,\n ...value\n };\n };\n\n private readonly _validateLeaf = (id: string, source: Partial<IModuleState>): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n return isMatch(module, source);\n };\n\n private readonly _validateContainer = (\n id: string,\n source: Partial<IModuleState>,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n // Module doesn't has module state\n return !!allMatched;\n }\n\n if (skipSkippableItem && (module.status === 'disabled' || module.status === 'skipped')) {\n // Skip disabled or skipped modules\n return !!allMatched;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n let childIds = module.childIds;\n\n if (this.props.context.app.config.shouldEnableSinglePaymentAuthorizationCheckout) {\n // For new checkout flow, we bypass the isReady check for payment section container to enable the place order button.\n childIds = childIds.filter(childId => !this._isPaymentSectionContainer(childId));\n }\n\n // It is container module\n const method = allMatched ? 'every' : 'some';\n return childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n if (!moduleId.includes(sectionContainerModuleId)) {\n return false;\n }\n\n const modules = this.get();\n const module = modules[moduleId];\n\n if (module && ArrayExtensions.hasElements(module.childIds.filter(childId => childId.includes(paymentInstrumentModuleId)))) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Validate\n * Validate current module and all its child module match the provided condition.\n * @param id\n * @param source\n * @param allMatched\n * @param skipSkippableItem\n */\n private readonly validate = (\n id: string,\n source: Partial<IModuleState>,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n return this._validateContainer(id, source, allMatched, skipSkippableItem);\n };\n\n /**\n * HasExternalSubmitGroup\n * Module will use external submit group.\n */\n private readonly hasExternalSubmitGroup = (): boolean => {\n return !!this.props.enableControl;\n };\n\n /**\n * HasModuleState\n * Module is using module state manager.\n * @param id\n */\n private readonly hasModuleState = (id: string): boolean => {\n const modules = this.get();\n const module = modules[id];\n return !!module;\n };\n }\n\n return ModuleState;\n};\n\nexport default withModuleState;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\n\nimport { IModuleStates } from './module-state.data';\n\n/**\n * GetModulesInput.\n */\nexport class ModuleStatesCacheKey implements IActionInput {\n public getCacheKey = () => 'ModuleState';\n\n public getCacheObjectType = () => 'ModuleState';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport function getModuleStates(ctx: IActionContext): IModuleStates {\n const cacheKey = new ModuleStatesCacheKey();\n\n let moduleStates = <IModuleStates>ctx.get<IModuleStates>(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n if (moduleStates) {\n return moduleStates;\n }\n ctx.update(cacheKey, {});\n moduleStates = <IModuleStates>ctx.get<IModuleStates>(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n return moduleStates;\n}\n\nexport function updateModuleStates(value: IModuleStates, ctx: IActionContext): void {\n const cacheKey = new ModuleStatesCacheKey();\n ctx.update(cacheKey, value);\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\n/**\n * EnabledPaymentsForOBO enum.\n */\n export enum EnabledPaymentsForOBO {\n OnCustomerAccount = 1,\n ExpressPayment = 0,\n Loyalty = 0,\n GiftCard = 0,\n PaymentInstrument = 0,\n ApplePay = 0\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC<IInvoiceSummaryLineProps> = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n <p className={`msc-invoice-summary__line-${cssLabel}`}>\n <span className=\"msc-invoice-summary__label\">{label}</span>\n {price || price === 0 ? (\n <PriceComponent\n data={{\n price: { CustomerContextualPrice: price }\n }}\n freePriceText={freeText}\n context={context}\n id={id}\n typeName={typeName}\n className=\"msc-invoice-summary__value\"\n />\n ) : (\n <span className=\"msc-invoice-summary__value\">{toBeCalculatedText}</span>\n )}\n </p>\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n <InvoiceSummaryLine\n price={price}\n label={label}\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n toBeCalculatedText={props.toBeCalculatedText}\n freeText={props.freeText}\n telemetry={props.telemetry}\n cssLabel={cssLabel}\n />\n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CheckoutModule, getCheckoutState, ICheckoutState } from '@msdyn365-commerce/global-state/';\n\nexport async function focusOnCheckoutError(checkoutErrorRef: React.RefObject<HTMLElement>, ctx: IActionContext): Promise<void> {\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n checkoutErrorRef.current && checkoutErrorRef.current.scrollIntoView();\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule.None });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 * as React from 'react';\n\nexport interface IAddressBillingHeading {\n text: string;\n}\n\nexport const AddressBillingHeading: React.FC<IAddressBillingHeading> = ({ text }) => (\n <h2 className='ms-checkout-billing-address__heading'>{text}</h2>\n);\n\nexport default IAddressBillingHeading;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\n/**\n * The payment error.\n */\nexport interface IPaymentError {\n title: string;\n message: string;\n className?: string;\n}\n\n/**\n * The payment error.\n * @param param0 - First param.\n * @param param0.title - Title.\n * @param param0.message - Message.\n * @param param0.className - ClassName.\n * @returns React node.\n */\nexport const ErrorComponent: React.FC<IPaymentError> = ({ title, message, className = 'ms-checkout-payment-instrument' }) => (\n <div className={`${className}__error`} role='alert' aria-live='assertive'>\n <p className={`${className}__error-title`}>{title}</p>\n <p className={`${className}__error-message`}>{message}</p>\n </div>\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { format, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddressFormat } from '../address-format';\nimport { IAddressResource } from '../address-module.data';\nimport AddressButtonComponent from './address-button';\nimport AddressInputComponent from './address-input';\nimport { AddressShow, IAddressShowProps } from './address-show';\n\nexport interface IAddressSelectInputProps {\n hasExternalSubmitGroup?: boolean;\n addressFormat: AddressFormat;\n addresses: Address[];\n addressPurposes: AddressPurpose[];\n resources: IAddressResource;\n selectedAddress: Address;\n telemetryContent?: ITelemetryContent;\n onAddressOptionChange(event: React.ChangeEvent<HTMLInputElement>): void;\n onShipMultipleAddresses?(): void;\n onAddAddress(): void;\n onSave(): void;\n onCancel(): void;\n multipleAddressShippingEnabled?: boolean;\n}\n\nexport interface IAddressSelectItem {\n key: number;\n SelectItem: INodeProps;\n input: React.ReactNode;\n showItems: IAddressShowProps;\n}\n\nexport interface IAddressSelectProps {\n SelectAddress: INodeProps;\n shipMultipleAddressesButton?: React.ReactNode;\n addButton: React.ReactNode;\n items: IAddressSelectItem[];\n isShowSaveButton: boolean;\n saveButton: React.ReactNode;\n isShowCancelButton: boolean;\n cancelButton: React.ReactNode;\n}\n\nconst getInput = (index: number, address: Address, props: IAddressSelectInputProps): React.ReactNode => {\n const { addresses, onAddressOptionChange, selectedAddress, resources, addressPurposes } = props;\n const addressTypeDescription = address.AddressTypeValue\n ? addressPurposes.find(purpose => purpose.AddressType === address.AddressTypeValue)?.Description || ''\n : '';\n const ichecked = address.RecordId === selectedAddress.RecordId;\n const additionalAttributes = {\n checked: ichecked,\n 'aria-checked': ichecked,\n 'aria-setsize': addresses.length,\n 'aria-posinset': index + 1,\n 'aria-label': format(resources.addressChangeCheckboxAriaLabel, addressTypeDescription)\n };\n\n return (\n <AddressInputComponent\n {...{\n className: 'msc-address-select',\n name: 'selectAddressOptions',\n type: 'radio',\n value: (address.RecordId || '').toString(),\n onChange: onAddressOptionChange,\n additionalAddributes: additionalAttributes,\n telemetryContent: props.telemetryContent\n }}\n />\n );\n};\n\nconst getAddressSelectItems = (props: IAddressSelectInputProps): IAddressSelectItem[] => {\n const { addresses, addressFormat, addressPurposes } = props;\n\n return addresses.map((address, index) => {\n return {\n key: address.RecordId || 0,\n SelectItem: { className: 'msc-address-select__item' },\n input: getInput(index, address, props),\n showItems: AddressShow({\n addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''),\n address,\n addressPurposes\n })\n };\n });\n};\n\nexport const AddressSelect = (props: IAddressSelectInputProps): IAddressSelectProps => {\n const {\n resources,\n onCancel,\n onSave,\n onAddAddress,\n onShipMultipleAddresses,\n hasExternalSubmitGroup,\n multipleAddressShippingEnabled\n } = props;\n\n return {\n SelectAddress: { className: 'msc-address-select' },\n addButton: (\n <div className={multipleAddressShippingEnabled ? 'msc-address-select__button-container' : ''}>\n <AddressButtonComponent\n {...{\n className: `msc-address-select__button-${multipleAddressShippingEnabled ? 'add-new' : 'add'}`,\n text: multipleAddressShippingEnabled ? resources.addressAddNewButtonText! : resources.addressAddButtonText,\n ariaLabel: multipleAddressShippingEnabled\n ? resources.addressAddNewButtonAriaLabel!\n : resources.addressAddButtonAriaLabel,\n onClick: onAddAddress,\n telemetryContent: props.telemetryContent\n }}\n />\n </div>\n ),\n shipMultipleAddressesButton: multipleAddressShippingEnabled && onShipMultipleAddresses && (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__button-ship-multiple-addresses',\n text: resources.addressShipMultipleText!,\n ariaLabel: resources.addressShipMultipleAriaLabel!,\n onClick: onShipMultipleAddresses,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n isShowSaveButton: !hasExternalSubmitGroup,\n saveButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__button-save',\n text: resources.addressSaveButtonText,\n ariaLabel: resources.addressSaveButtonAriaLabel,\n onClick: onSave,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n isShowCancelButton: !hasExternalSubmitGroup,\n cancelButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__button-cancel',\n text: resources.addressCancelButtonText,\n ariaLabel: resources.addressCancelButtonAriaLabel,\n onClick: onCancel,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n items: getAddressSelectItems(props)\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderProps } from '../header.props.autogenerated';\n\n/**\n * The header preferred store component.\n */\n@observer\nexport class HeaderPreferredStore extends React.PureComponent<IHeaderProps<IHeaderData>> {\n private readonly modalCloseButtonRef: React.RefObject<HTMLButtonElement> = React.createRef();\n\n /**\n * Handle click on the store selector.\n * @returns : Promise void.\n */\n public handleClick = () => {\n return this._findPreferredStoreOnClick(this.props);\n };\n\n public render(): JSX.Element | undefined {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n slots,\n resources\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- slots can be undefined.\n if (ArrayExtensions.hasElements(slots?.storeSelector)) {\n const storeName =\n storeSelectorStateManager?.preferredStore && storeSelectorStateManager.preferredStore.StoreName\n ? storeSelectorStateManager.preferredStore.StoreName\n : resources.headerPreferredStoreText;\n\n return (\n <div className='ms-header__preferred-store-container'>\n <button\n className='ms-header__preferred-store-btn msc-btn'\n color='secondary'\n aria-label={resources.headerPreferredStoreAriaLabel}\n onClick={this.handleClick}\n ref={this.modalCloseButtonRef}\n >\n <span className='ms-header__preferred-store-text'>{storeName}</span>\n </button>\n {slots.storeSelector}\n </div>\n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps<IHeaderData>): Promise<void> {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n modules\n } = props;\n if (!storeSelectorStateManager) {\n return;\n }\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && ArrayExtensions.hasElements(modules.storeSelector)) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n await storeSelectorStateManager\n .openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to set preferred store');\n }\n });\n }\n}\n\nexport default HeaderPreferredStore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ILogoProps {\n image: Msdyn365.IImageData;\n gridSettings?: Msdyn365.IGridSettings;\n link?: ILinkData;\n className?: string;\n telemetryContent?: ITelemetryContent;\n requestContext: Msdyn365.IRequestContext;\n typeName?: string;\n}\n\nexport interface ILinkData {\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n linkText?: string;\n}\n\n/**\n *\n * Logo component.\n * @extends {React.PureComponent<ILogoConfig>}\n */\nexport class Logo extends React.PureComponent<ILogoProps> {\n private readonly attributes?: Msdyn365.IDictionary<string>;\n\n constructor(props: ILogoProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return <div className={this.props.className}>{this._renderLogo(this.props)}</div>;\n }\n\n private _renderLogo(config: ILogoProps): JSX.Element {\n if (config.link && config.link.linkUrl.destinationUrl) {\n return (\n <a\n href={config.link.linkUrl.destinationUrl}\n aria-label={config.link.ariaLabel}\n target={config.link.openInNewTab ? '_blank' : undefined}\n rel='noopener noreferrer'\n {...this.attributes}\n >\n {this._renderImage(config)}\n </a>\n );\n }\n return this._renderImage(config);\n }\n\n private _renderImage(config: ILogoProps): JSX.Element {\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=132&h=28&m=6', w: 0, h: 0 },\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n <Msdyn365.Image\n {...config.image}\n requestContext={this.props.requestContext}\n gridSettings={this.props.gridSettings!}\n imageSettings={(config && config.image && config.image.imageSettings) || defaultImageSettings}\n loadFailureBehavior='default'\n editProps={{\n key: config.image || {},\n requestContext: this.props.requestContext,\n moduleType: this.props.typeName,\n imagePropertyName: 'image'\n }}\n shouldSkipToMainImage\n />\n );\n }\n}\n\nexport default Logo;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderResources } from '../header.props.autogenerated';\n\nexport interface INavIconProps {\n resources: IHeaderResources;\n isExpanded: boolean;\n targetId: string;\n telemetryContent?: ITelemetryContent;\n toggleNavBar(): void;\n}\n\n/**\n *\n * NavIcon component.\n * @extends {React.PureComponent<INavIconProps>}\n */\n\n@observer\nexport class NavIcon extends React.PureComponent<INavIconProps> {\n private readonly attributes?: Msdyn365.IDictionary<string>;\n\n constructor(props: INavIconProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\n <Button\n className='ms-header__nav-icon'\n onClick={this.props.toggleNavBar}\n title={this.props.resources.mobileHamburgerAriaLabel}\n aria-label={this.props.resources.mobileHamburgerAriaLabel}\n aria-expanded={this.props.isExpanded}\n aria-controls={this.props.targetId}\n {...this.attributes}\n />\n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n commerceApiRequest,\n commerceVideoMetadataRequest,\n getCatalogId,\n IActionContext,\n IImageData,\n IImageSettings,\n IVideoData\n} from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n getMediaLocationsForSelectedVariant,\n MediaLocationsForSelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise<IImageData[]> {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise<IImageData[]> {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise<IImageData[]> {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n\n/**\n * GetVideoMetadataFromAPI - Makes API call to get video metadata.\n * @param videoId: Video Id\n * @param actionContext: Action context\n * @returns: Returns the meta data of the video.\n */\nexport async function getVideoMetadataFromApi(videoId: string, actionContext: IActionContext): Promise<IVideoData | undefined> {\n let videoPlayerData: IVideoData | undefined;\n if (videoId) {\n const response = await commerceVideoMetadataRequest(actionContext.requestContext, [videoId]);\n\n if (response.status !== 200) {\n actionContext.telemetry.debug(`Unable to get video metadata for videoId: ${videoId}`);\n return;\n }\n\n const videoData = response.data as [];\n if (videoData && ArrayExtensions.hasElements(videoData)) {\n videoPlayerData = videoData[0];\n }\n }\n return videoPlayerData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { buildHydratedMockActionContext, buildMockRequest, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, Customer, Employee } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderConfig, IHeaderResources } from '../header.props.autogenerated';\n\nconst mockRequest: IRequestContext = buildMockRequest();\nconst mockRequestURL = {\n requestUrl: new URL('https://wwww.example.com'),\n staticCdnUrl: 'https://wwww.example.com'\n};\nmockRequest.gridSettings = {\n xs: { w: 767, h: 0 },\n sm: { w: 991, h: 0 },\n md: { w: 1199, h: 0 },\n lg: { w: 1599, h: 0 },\n xl: { w: 1600, h: 0 }\n};\nmockRequest.user.isAuthenticated = true;\nmockRequest.user.signInUrl = '/signin';\nmockRequest.user.signOutUrl = '/signout';\nmockRequest.user.signUpUrl = '/signup';\n\nconst mockAnonRequest = buildMockRequest();\nmockAnonRequest.user.isAuthenticated = false;\nmockAnonRequest.user.signInUrl = '/signin';\nmockAnonRequest.user.signOutUrl = '/signout';\nmockAnonRequest.user.signUpUrl = '/signup';\nmockAnonRequest.url = mockRequestURL;\n\nconst mockSigninErrorRequest = buildMockRequest();\nmockSigninErrorRequest.user.isAuthenticated = false;\nmockSigninErrorRequest.user.retailServerErrorCode = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\nmockSigninErrorRequest.user.signInUrl = '/signin';\nmockSigninErrorRequest.user.signOutUrl = '/signout';\nmockSigninErrorRequest.user.signUpUrl = '/signup';\nmockSigninErrorRequest.url = mockRequestURL;\n\nconst mockActionContext = buildHydratedMockActionContext();\nmockActionContext.requestContext.url = mockRequestURL;\n\n/**\n * Method to mock auth context.\n */\n// @ts-expect-error\nexport const mockAuthContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\n// @ts-expect-error\nexport const mockAnonContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockAnonRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- Due to partial mock.\n// @ts-expect-error\nexport const mockSigninContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockSigninErrorRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\nexport const mockHeaderConfig: IHeaderConfig = {\n logoLink: {\n linkUrl: {\n destinationUrl: 'https://ppe.fabrikam.com/fe'\n },\n ariaLabel: 'fabrikam'\n },\n logoImage: {\n src: 'https://img-prod-cms-mr-microsoft-com.akamaized.net/cms/api/fabrikam/imageFileData/MA1G3L'\n }\n};\n\nexport const mockResources: IHeaderResources = {\n mobileHamburgerAriaLabel: 'Mobile view hamburger aria label',\n wishlistTooltipText: 'My wishlist',\n cartLabel: 'Shopping bag, ({0}) items',\n cartQtyLabel: '({0})',\n signInLinkText: 'Sign In',\n signInLinkAriaText: 'Sign In',\n signOutLinkText: 'Sign Out',\n signOutLinkAriaText: 'Sign Out',\n shoppingAsText: 'Shopping as {0}',\n switchCustomerLinkText: 'Switch customer',\n switchCustomerLinkAriaText: 'Switch customer',\n headerPreferredStoreText: 'Select store',\n headerPreferredStoreAriaLabel: 'select preferred store',\n signInCustomerNotAuthorizedTitle: 'Error message if customer not authorized',\n signUpCustomerNotFoundTitle: 'Error message if cutsomer not found',\n signUpMultipleCustomerFoundTitle: 'Multiple customer found error msg',\n closeNotificationLabel: 'Close',\n wishlistCountLabel: '({0})',\n headerAriaLabel: 'Header'\n};\n\nexport const getMockData = (totalItemsInCart: number = 0, accountNumber: string = '2', firstName: string = ''): IHeaderData => {\n return {\n cart: <AsyncResult<ICartState>>{\n status: 'SUCCESS',\n result: {\n totalItemsInCart\n }\n },\n employee: <AsyncResult<Employee>>{\n status: 'SUCCESS',\n result: {\n Name: 'Worker'\n }\n },\n accountInformation: <AsyncResult<Customer>>{\n status: 'SUCCESS',\n result: {\n AccountNumber: accountNumber,\n FirstName: firstName\n }\n },\n storeSelectorStateManager: <AsyncResult<IStoreSelectorStateManager>>{\n status: 'SUCCESS',\n result: {}\n }\n };\n};\n\nexport const getMockErrorData = (): IHeaderData => {\n return {\n cart: <AsyncResult<ICartState>>{\n status: 'FAILED',\n result: undefined\n },\n employee: <AsyncResult<Employee>>{\n status: 'FAILED',\n result: undefined\n },\n accountInformation: <AsyncResult<Customer>>{\n status: 'FAILED',\n result: undefined\n },\n storeSelectorStateManager: <AsyncResult<IStoreSelectorStateManager>>{\n status: 'FAILED',\n result: undefined\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport AddressInputComponent from './address-input';\n\nexport interface IAddressBillingCheckbox {\n isChecked: boolean;\n value: string;\n ariaLabel: string;\n text: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\n}\n\nexport const AddressBillingCheckbox: React.FC<IAddressBillingCheckbox> = ({\n isChecked,\n value,\n ariaLabel,\n text,\n telemetryContent,\n onChange\n}) => {\n const additionalAttributes = {\n checked: isChecked,\n 'aria-checked': isChecked\n };\n\n return (\n <label className='ms-checkout-billing-address__shipping-address-label'>\n <AddressInputComponent\n {...{\n type: 'checkbox',\n className: 'ms-checkout-billing-address',\n value,\n onChange,\n additionalAddributes: additionalAttributes,\n telemetryContent\n }}\n />\n <span className='ms-checkout-billing-address__shipping-address-checkbox-text'>{text}</span>\n </label>\n );\n};\nexport default AddressBillingCheckbox;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport { INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { Address, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport AddressButtonComponent from './address-button';\nimport { IShipMultipleAddressesTableHeadingProps, ShipMultipleAddressesTableHeading } from './address-ship-multiple-heading';\nimport { IAddressResource } from '../address-module.data';\nimport {\n IShipMultipleAddressesLineProps,\n IShipMultipleAddressesLineViewProps,\n ShipMultipleAddressesLineView\n} from './address-ship-multiple-lines';\nimport { IShipMultipleAddressesLineViewModel } from '../../modules/checkout-shipping-address';\nimport { ICartLineWithProduct, ICheckoutShippingCartLineInfo } from '../../modules/checkout-shipping-address/components';\n\nexport interface IAddressShipMultipleInputProps {\n context: ICoreContext;\n hasExternalSubmitGroup?: boolean;\n moduleId: string;\n moduleTypeName: string;\n currencyCode: string | undefined;\n resources: IAddressResource;\n shippingLines: ICartLineWithProduct[];\n shippingLineImages: ICheckoutShippingCartLineInfo[];\n selectedShippingLines: IShipMultipleAddressesLineViewModel[];\n customerAddresses: Address[];\n onSelect(line: IShipMultipleAddressesLineViewModel, isChecked: boolean): void;\n onSelectAll(isChecked: boolean): void;\n onClear(): void;\n onShippingAddressChange(shippingLine: CartLine, event: React.ChangeEvent<HTMLSelectElement>): void;\n onBulkShippingAddressChange(event: React.ChangeEvent<HTMLSelectElement>): void;\n onShipSingleAddress(): void;\n onSave(): void;\n onCancel(): void;\n isMobile: boolean;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IShipMultipleAddressesViewProps {\n ShipMultipleAddress?: INodeProps;\n shipSingleAddressButton?: React.ReactNode;\n clearSelectionButton?: React.ReactNode;\n addressDropdown?: React.ReactNode;\n ProductsTable?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductsTableRow?: INodeProps;\n shipMultipleAddressLines?: IShipMultipleAddressesLineViewProps[];\n isShowSaveButton?: boolean;\n saveButton?: React.ReactNode;\n isShowCancelButton?: boolean;\n cancelButton?: React.ReactNode;\n isMobile?: boolean;\n}\n\nexport const AddressShipMultiple = (props: IAddressShipMultipleInputProps): IShipMultipleAddressesViewProps => {\n const {\n context,\n currencyCode,\n hasExternalSubmitGroup,\n moduleId,\n moduleTypeName,\n shippingLines,\n shippingLineImages,\n selectedShippingLines,\n customerAddresses,\n isMobile,\n onSelect,\n onSelectAll,\n onClear,\n onShippingAddressChange,\n onBulkShippingAddressChange,\n onShipSingleAddress,\n onSave,\n onCancel,\n resources\n } = props;\n\n const { unavailableProductErrorMessage, outOfStockProductErrorMessage } = props.resources;\n\n const shipMultipleAddressLines: IShipMultipleAddressesLineViewModel[] = [];\n\n for (const line of shippingLines) {\n shipMultipleAddressLines.push({\n isChecked: false,\n cartLine: line.cartLine\n });\n }\n\n function _renderProductListHeader(): React.ReactNode {\n const headers: IShipMultipleAddressesTableHeadingProps = {\n selectAllRowsText: resources.addressSelectAllRowsText,\n productNumber: resources.addressProductNumberText!,\n productName: resources.addressProductText!,\n productUnitPrice: resources.addressProductUnitPriceText!,\n productQuantity: resources.addressProductQuantityText!,\n productAddress: resources.addressProductAddressText,\n clickHandler: (isChecked: boolean) => {\n onSelectAll(isChecked);\n },\n isAllSelected: selectedShippingLines && selectedShippingLines.every(line => line.isChecked),\n isMobile: isMobile,\n clearSelectionButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__clear-selection-button',\n text: resources.clearSelectionButtonText!,\n ariaLabel: resources.clearSelectionButtonAriaLabel!,\n onClick: onClear,\n telemetryContent: props.telemetryContent,\n disabled: selectedShippingLines.every(line => !line.isChecked)\n }}\n />\n )\n };\n\n return <ShipMultipleAddressesTableHeading {...headers} />;\n }\n\n function _renderShipMultipleAddressLines(): IShipMultipleAddressesLineViewProps[] {\n return shippingLines.map((line, index) => {\n const currentLineProps: IShipMultipleAddressesLineProps = {\n shipMultipleAddressesLine: {\n isChecked: (selectedShippingLines && selectedShippingLines[index] && selectedShippingLines[index].isChecked) || false,\n cartLine: line.cartLine\n },\n shippingLineImage: shippingLineImages[index],\n product: line.product ? line.product : undefined,\n price: line.product?.Price,\n context,\n quantity: line.cartLine?.Quantity!,\n moduleId: moduleId,\n moduleTypeName: moduleTypeName,\n currencyCode: currencyCode,\n customerAddresses: customerAddresses,\n isMobile: isMobile,\n onSelect: onSelect,\n onShippingAddressChange: onShippingAddressChange,\n resources: {\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n }\n };\n\n return ShipMultipleAddressesLineView({ ...currentLineProps })!;\n });\n }\n\n return {\n ShipMultipleAddress: { className: 'msc-address-select' },\n shipSingleAddressButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__button-ship-single-address',\n text: resources.addressShipSingleText!,\n ariaLabel: resources.addressShipSingleAriaLabel!,\n onClick: onShipSingleAddress,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n clearSelectionButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__clear-selection-button',\n text: resources.clearSelectionButtonText!,\n ariaLabel: resources.clearSelectionButtonAriaLabel!,\n onClick: onClear,\n telemetryContent: props.telemetryContent,\n disabled: selectedShippingLines.every(line => !line.isChecked)\n }}\n />\n ),\n addressDropdown: (\n <select\n className={'msc-address-select__address-dropdown'}\n title={resources.chooseAddressForSelectedItemsText}\n aria-label={resources.chooseAddressForSelectedItemsAriaLabel}\n onChange={e => onBulkShippingAddressChange(e)}\n defaultValue={''}\n disabled={selectedShippingLines.every(line => !line.isChecked)}\n >\n <option value='' aria-label={resources.noAddressSelectedAriaLabel} disabled hidden>\n {resources.chooseAddressForSelectedItemsText}\n </option>\n {customerAddresses?.map((address: Address, index: number) => (\n <option key={index} value={address.RecordId} aria-label={address.FullAddress}>\n {address.FullAddress}\n </option>\n ))}\n </select>\n ),\n ProductsTable: {\n className: `ms-address-select__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `ms-address-select-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: _renderProductListHeader(),\n shipMultipleAddressLines: _renderShipMultipleAddressLines(),\n isShowSaveButton: !hasExternalSubmitGroup,\n saveButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__save-continue-button',\n text: resources.saveAndContinueBtnLabel!,\n ariaLabel: resources.addressSaveButtonAriaLabel,\n onClick: onSave,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n isShowCancelButton: !hasExternalSubmitGroup,\n cancelButton: (\n <AddressButtonComponent\n {...{\n className: 'msc-address-select__cancel-button',\n text: resources.addressCancelButtonText,\n ariaLabel: resources.addressCancelButtonAriaLabel,\n onClick: onCancel,\n telemetryContent: props.telemetryContent\n }}\n />\n ),\n isMobile: isMobile\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IShipMultipleAddressesTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productQuantity: string;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n productAddress?: string;\n isAllSelected: boolean;\n isMobile: boolean;\n clearSelectionButton: React.ReactNode;\n}\n\nexport interface IShipMultipleAddressesTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IShipMultipleAddressesTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Ship multiple addresses table heading.\n */\nexport class ShipMultipleAddressesTableHeading extends React.PureComponent<IShipMultipleAddressesTableHeadingProps> {\n public state: IShipMultipleAddressesTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public getOnChange = () => (event: React.ChangeEvent<HTMLInputElement>) => {\n this.setState(\n {\n isChecked: !this.state.isChecked\n },\n () => {\n this.props.clickHandler(this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n if (!this.props.isMobile) {\n return (\n <thead>\n <tr className={`${this.componentClassName}__heading-row`}>\n <th scope='col' aria-label={this.props.selectAllRowsText}>\n <label className='checkbox-container'>\n <input\n aria-label={this.props.selectAllRowsText}\n className='checkbox-input'\n type='checkbox'\n aria-checked={this.props.isAllSelected}\n checked={this.props.isAllSelected}\n onChange={this.getOnChange()}\n />\n <span className='checkmark' />\n </label>\n </th>\n <th scope='col'>{this.props.productNumber}</th>\n {<th scope='col'>{this.props.productName}</th>}\n {\n <th scope='col' style={{ textAlign: 'right' }}>\n {this.props.productUnitPrice}\n </th>\n }\n {\n <th scope='col' style={{ textAlign: 'center' }}>\n {this.props.productQuantity}\n </th>\n }\n {<th scope='col'>{this.props.productAddress}</th>}\n </tr>\n </thead>\n );\n } else {\n return (\n <thead>\n <tr className={`${this.componentClassName}__heading-row`}>\n <th scope='col' style={{ maxWidth: '100px', position: 'relative' }} aria-label={this.props.selectAllRowsText}>\n <label className='checkbox-container' style={{ paddingLeft: '25px' }}>\n <input\n aria-label={this.props.selectAllRowsText}\n className='checkbox-input'\n type='checkbox'\n aria-checked={this.props.isAllSelected}\n checked={this.props.isAllSelected}\n onChange={this.getOnChange()}\n />\n <span className='checkmark' style={{ border: '1.5px solid #2266e3' }} />\n Select all\n </label>\n\n {/* Clear Selection Button */}\n <div style={{ position: 'absolute', top: '50%', left: '65%', transform: 'translate(-50%, -50%)' }}>\n {this.props.clearSelectionButton}\n </div>\n </th>\n </tr>\n </thead>\n );\n }\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { Address, CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IShipMultipleAddressesLineViewModel } from '../../modules/checkout-shipping-address';\nimport { ICheckoutShippingCartLineInfo } from '../../modules/checkout-shipping-address/components';\n\nexport interface IShipMultipleAddressesLineProps extends CartLine {\n shipMultipleAddressesLine: IShipMultipleAddressesLineViewModel;\n shippingLineImage: ICheckoutShippingCartLineInfo;\n price?: number;\n context: ICoreContext;\n product?: SimpleProduct;\n imageSettings?: IImageSettings;\n quantity: number;\n moduleId: string;\n moduleTypeName: string;\n currencyCode: string | undefined;\n customerAddresses: Address[];\n error?: string;\n isMobile: boolean;\n onSelect(line: IShipMultipleAddressesLineViewModel, isChecked: boolean): void;\n onShippingAddressChange(shippingLine: CartLine, event: React.ChangeEvent<HTMLSelectElement>): void;\n resources: {\n unavailableProductErrorMessage?: string;\n outOfStockProductErrorMessage?: string;\n };\n}\n\nexport interface IShipMultipleAddressesLineViewProps {\n key?: string;\n productImage?: React.ReactNode;\n productPrice?: React.ReactNode;\n productCurrencyCode?: React.ReactNode;\n productName?: string;\n productNumber?: React.ReactNode;\n productInfo?: React.ReactNode;\n productLabel?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n productQuantity?: number;\n productListId?: string;\n productAddress?: React.ReactNode;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n productAddressPopup?: JSX.Element | null | undefined;\n isMobile?: boolean;\n}\n\n/**\n * On Select line function.\n * @param shipMultipleAddressesLine - Ship multiple addresses line.\n * @param input - Ship multiple addresses line props.\n * @returns Set on select shipping line.\n */\nconst onSelectLineHandler = (shipMultipleAddressesLine: IShipMultipleAddressesLineViewModel, input: IShipMultipleAddressesLineProps) => (\n event: React.ChangeEvent<HTMLInputElement>\n) => {\n shipMultipleAddressesLine.isChecked = !shipMultipleAddressesLine.isChecked;\n\n input.onSelect(shipMultipleAddressesLine, event.target.checked);\n};\n\nexport const ShipMultipleAddressesLineView = (input: IShipMultipleAddressesLineProps): IShipMultipleAddressesLineViewProps | null => {\n const { customerAddresses, shipMultipleAddressesLine, shippingLineImage, product, context, onShippingAddressChange } = input;\n\n console.log('ShipMultipleAddressesLineView rendering');\n\n if (!product) {\n return null;\n }\n\n const { ItemId } = product;\n const { Quantity, ShippingAddress } = shipMultipleAddressesLine.cartLine;\n\n return {\n selectLine: (\n <label className='checkbox-container'>\n <input\n className='checkbox-input'\n type='checkbox'\n checked={shipMultipleAddressesLine.isChecked}\n aria-checked={shipMultipleAddressesLine.isChecked}\n onChange={onSelectLineHandler(shipMultipleAddressesLine, input)}\n />\n <span className='checkmark' />\n </label>\n ),\n productImage: renderProductImage(\n '',\n context,\n product.Name!,\n shippingLineImage.imageProps.fallBackSrc,\n shippingLineImage.imageProps.src\n ),\n productInfo: renderProductInfo(input),\n productPrice: renderProductPrice(input),\n productNumber: product && (\n <>\n <div>{ItemId}</div>\n {input.error !== 'NONE' ? <div>{renderProductError(input)}</div> : undefined}\n </>\n ),\n productQuantity: Quantity,\n productAddress: (\n <select\n className={'msc-address-select__current-address-dropdown'}\n onChange={e => onShippingAddressChange(shipMultipleAddressesLine.cartLine, e)}\n value={ShippingAddress?.RecordId}\n >\n {customerAddresses?.map((address: Address, index: number) => (\n <option\n key={index}\n value={address.RecordId}\n aria-label={address.FullAddress}\n className={'msc-address-select__current-address-text'}\n >\n {address.FullAddress}\n </option>\n ))}\n </select>\n )\n };\n};\n\nconst renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n <Image\n requestContext={context?.actionContext?.requestContext}\n className={className}\n altText={heading}\n title={heading}\n src={image}\n fallBackSrc={fallbackImage}\n gridSettings={context?.request?.gridSettings!}\n imageSettings={defaultImageSettings}\n loadFailureBehavior='empty'\n tabIndex={0}\n />\n );\n};\n\nconst renderProductDimensions = (props: IShipMultipleAddressesLineProps): (string | undefined)[] => {\n const { product } = props;\n if (!product || !product.Dimensions) {\n return [];\n }\n return product.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n return dimension.DimensionValue.Value;\n });\n};\n\nconst renderProductInfo = (props: IShipMultipleAddressesLineProps): React.ReactNode | undefined => {\n const { product } = props;\n const name = product?.Name;\n const dimensions = renderProductDimensions(props);\n if (!product) {\n return [];\n }\n const productName = <div>{name}</div>;\n const dimensionsLine: string = dimensions.join(', ');\n return (\n <div>\n <div>{productName}</div>\n <div>{dimensionsLine}</div>\n </div>\n );\n};\n\nconst renderProductPrice = (props: IShipMultipleAddressesLineProps): React.ReactNode | undefined => {\n const { product } = props;\n\n if (!product?.Price) {\n return null;\n }\n\n return (\n <span>\n <PriceComponent\n data={{\n price: {\n CustomerContextualPrice: product.Price\n }\n }}\n context={props.context}\n id={props.moduleId}\n typeName={props.moduleTypeName}\n currencyCode={props.currencyCode}\n />\n </span>\n );\n};\n\nconst renderProductError = (props: IShipMultipleAddressesLineProps) => {\n const { error, resources } = props;\n\n if (!error) {\n return '';\n }\n\n const errorMessages = {\n OOS: resources.outOfStockProductErrorMessage,\n UNASSORTED: resources.unavailableProductErrorMessage,\n NONE: ''\n };\n\n return errorMessages[error];\n};\n","import React from 'react';\r\n// import { ICartResources } from '../../definition-extensions/cart.ext.props.autogenerated';\r\n// import { ICheckoutResources } from '../../definition-extensions/checkout.ext.props.autogenerated';\r\n\r\n\r\ninterface ILinePaginationProps {\r\n nextPage: (e: React.MouseEvent<HTMLButtonElement>) => void,\r\n prevPage: (e: React.MouseEvent<HTMLButtonElement>) => void,\r\n changePage: (page: number) => void,\r\n currentPage: number,\r\n numPages: number,\r\n prev: string,\r\n next: string\r\n}\r\n\r\n/**\r\n * Renders pagination navigation on the page, which displays 4 buttons that allow\r\n * user to navigate to the first, last, next or previous pages. Also displays \r\n * the current page out of the total number of pages. ( ie. 5/7 )\r\n *\r\n * @param {(e: React.MouseEvent<HTMLButtonElement>) => void} nextPage\r\n * @param {(e: React.MouseEvent<HTMLButtonElement>) => void} prevPage\r\n * @param {(page: number) => void} changePage\r\n * @param {number} currentPage\r\n * @param {number} numPages\r\n * @param {ICartResources} resources\r\n * @return {*} {React.ReactNode}\r\n */\r\nexport const LinePagination : React.FC<ILinePaginationProps> = ({\r\n nextPage,\r\n prevPage,\r\n changePage,\r\n currentPage,\r\n numPages,\r\n prev,\r\n next}) => {\r\n const firstPage: number = 1;\r\n \r\n return (\r\n \r\n <div className=\"msc-cart__pagination\">\r\n {numPages > 0 &&\r\n <>\r\n {/* {currentPage !== 0 && */}\r\n <>\r\n <button disabled={currentPage + 1 === firstPage} className={`msc-cart__pagination__btn btn-first msc-btn ${currentPage + 1 === firstPage ? 'btn-disabled' : ''}`} onClick={() => changePage(0)}>\r\n {`${firstPage}`}\r\n </button>\r\n <button disabled={currentPage + 1 === firstPage} className={`msc-cart__pagination__btn btn-prev msc-btn ${currentPage + 1 === firstPage ? 'btn-disabled' : ''}`} onClick={prevPage}>\r\n {prev}\r\n </button>\r\n </>\r\n {/* } */}\r\n <div className=\"msc-cart__pagination__count\">\r\n <span className=\"msc-cart__pagination__count-text\">\r\n {currentPage + 1} / {numPages}\r\n </span>\r\n </div>\r\n {/* {currentPage !== numPages && */}\r\n <>\r\n <button disabled={currentPage + 1 === numPages} className={`msc-cart__pagination__btn btn-next msc-btn ${currentPage + 1 === numPages ? 'btn-disabled' : ''}`} onClick={nextPage}>\r\n {next}\r\n </button>\r\n <button disabled={currentPage + 1 === numPages} className={`msc-cart__pagination__btn btn-last msc-btn ${currentPage + 1 === numPages ? 'btn-disabled' : ''}`} onClick={() => changePage(numPages-1)}>\r\n {`${numPages}`}\r\n </button>\r\n </>\r\n {/* } */}\r\n </>\r\n }\r\n </div>\r\n )};\r\n \r\n "],"names":["CheckoutBillingAddress","React","constructor","props","super","countryRegionId","countryRegions","addressPurposes","defaultAddressType","checkoutErrorRef","_onSuggestionSelected","async","this","_clearAddressFields","address","addressFormat","getTranformedAddress","result","stateProvinceInfo","set","addUpdateAddress","Street","ZipCode","CountyName","City","State","DistrictName","FullAddress","setTimeout","getAddressFormat","ThreeLetterISORegionName","forEach","format","_this$autoSuggest","undefined","name","autoSuggest","excludedAddressFields","includes","_clearValidation","validationError","onAddressAddUpdate","value","validateAddressFormat","_dataInitialize","data","reaction","_data$countryRegions$","_data$addressPurposes","countryStates","_data$countryStates$r","_renderAddOrUpdateAddress","_this$addUpdateAddres","AddressAddUpdate","resources","addressType","AddressType","Billing","defaultCountryRegionId","selectedAddress","addressActionResponse","dropdownDisplayData","getPrefilledAddressDropdownData","addressStateDefaultSelectionText","telemetryContent","onInputChange","_onAddressAddUpdateInputChange","onDropdownChange","_onAddressAddUpdateDropdownChange","hasExternalSubmitGroup","moduleState","onSave","_onSubmitAddress","onCancel","_resetView","_onCountryChange","_this$autoSuggest2","twoLetterIsoRegionName","getTwoLetterISORegionName","TwoLetterISORegionName","changeAutoSuggestionCountryCode","_getAddressFormatExcludeList","config","addressFormatExcludeList","showAddressType","push","AddressItemType","AddressTypeValue","IsPrimary","_attachMapAutoSuggest","storeSelectorStateManager","_this$autoSuggest3","isMapApiLoaded","attachAutoSuggest","event","target","replace","RegExp","_getStateProvinces","currentOperation","AddressOperation","Add","Update","addressCommon","getStateProvinces","then","some","state","StateId","_initModuleState","_this$props$data$chec","init","status","isBillingAddressRequried","onEdit","onSubmit","billingAddress","isBillingAddressSameAsShippingAddress","checkout","isBillingAddressSameAsShipping","_updateCurrentOperation","Show","_updateModuleState","isCartContainsItemsForShipping","shippingAddress","_onBillingAddressSameAsShippingChange","currentTarget","checked","_this$props$data$chec2","_this$props$data$chec3","setHasError","shouldEnableSinglePaymentAuthorizationCheckout","isPaymentSectionContainerHasError","updateIsBillingAddressHasError","newIsBillingAddressHasError","_setBillingAddress","telemetry","information","error","onUpdating","newBillingAddress","_objectSpread","updateBillingAddress","additionalProperties","operation","onReady","_setErrorMessage","errorMessage","setState","context","List","AddressCommon","AddressFormat","AddressMetaData","getTelemetryObject","request","telemetryPageName","friendlyName","isShowAddress","isShowAddOrUpdateAddress","isShowSameAsShippingCheckbox","_this$props$data$chec5","actionContext","requestContext","channel","autoSuggestionEnabled","autoSuggestOptions","_setDefaultCountryRegionId","isUpdating","_this$props$data$chec4","isDisabled","removeBillingAddress","onDisable","BingMapsApiKey","BingMapsEnabled","options","AutoSuggest","ChannelCountryRegionISOCode","DefaultLanguageId","_loadMapAPI","_this$props$data$stor","loadMapApi","_this$autoSuggest4","_this$props$data$stor2","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec6","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec7","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","_this$props$data$stor3","_this$autoSuggest5","disposeAutoSuggest","shouldComponentUpdate","nextProps","nextState","render","_shouldHideBillingAddressForOBO","hasError","renderView","className","viewState","moduleProps","classnames","heading","AddressBillingHeading","Object","assign","text","addressBillingAddressHeading","alert","ErrorComponent","title","errorMessageTitle","message","sameAsShippingCheckbox","AddressBillingCheckbox","isChecked","type","ariaLabel","addressSameAsShippingAddressAriaLabel","addressSameAsShippingAddressText","onChange","showAddress","_renderShowAddress","showAddOrUpdateAddress","_this$selectedAddress","AddressShow","_request$channel","market","getDefaultCountryRegionId","_featureState$result","_request$channel2","_request$channel3","_this$props$data$chec8","channelDeliveryOptionConfig","featureState","retailMultiplePickUpOptionEnabled","find","feature","Name","IsEnabled","pickupDeliveryModeCode","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","checkoutCart","hasInvoiceLine","cart","CartLines","cartLine","_channelDeliveryOptio","DeliveryMode","PickupDeliveryModeCodes","deliveryMode","_this$props$data$chec9","_this$props$data$chec10","getLoyaltyAmount","checkoutState","loyaltyAmount","getGiftCardTotalAmount","giftCardExtends","reduce","count","giftCard","Balance","getCustomerAccountAmount","_checkoutState$custom","customerAccountAmount","shouldPaidByCard","checkoutResult","length","paymentTenderType","tokenizedPaymentCard","isPaidByOtherPaymentSource","paymenTenderType","TotalAmount","_this$props$data$chec11","_this$props$data$chec12","isPaymentVerificationRedirection","isCheckoutCallFailed","Msdyn365","EnabledPaymentsForOBO","PaymentInstrument","__decorate","observable","action","computed","withModuleState","observer","CheckoutPickupCartLines","_ref","moduleClassName","cartLines","itemTitle","isMultipleAddressShippingEnabled","isMobileCheck","isMobile","variant","VariantType","Browser","gridSettings","xs","w","sm","md","lg","xl","isMobileView","ArrayExtensions","hasElements","headingAfterMultiSelectAddressSelect","map","isShowQty","quantity","key","lineId","Image","imageProps","role","productQuantityInfo","altText","id","defaultImageSettings","viewports","q","h","lazyload","quality","CheckoutShippingAddress","_data$featureState$re2","customerAddresses","addressListSelectedAddress","multiplePickupStoreSwitchName","onSelect","line","selectedShippingLines","updated","shippingLine","_shippingLine$cartLin","LineId","console","onShippingAddressChange","addressRecordId","RecordId","toString","shippingGroups","updatedCartLine","ShippingAddress","updateIndividualAddresses","prevState","onBulkShippingAddressChange","index","cartline","_shippingLine$cartLin2","_initPickupGroup","pickupCartLines","_getCartLinesforDelivery","products","_getProductsByCartLines","ChannelId","product","x","ProductId","shippingGroupsBuffer","initialShippingLineSelection","addressFormatItem","formatAddress","_data$address$result","_data$featureState$re","filter","_isDelivery","_isNotPickupMode","FulfillmentStoreId","_this$props$context$r","pickupDeliveryMode","pickupMode","channelId","productInputs","ObjectExtensions","isNullOrUndefined","ProductInput","apiSettings","CatalogId","getSimpleProducts","_renderShipMultipleAddresses","onSaveHandler","onCancelHandler","imageSettings","cartlineImages","_line$cartLine$LineId","_line$product","_line$product$Primary","_line$product2","_line$product3","_context$request$app","_line$cartLine$Quanti","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","app","OmniChannelMedia","loadFailureBehavior","Quantity","AddressShipMultiple","isAuthenticatedFlow","onCancelButtonHandler","bind","onSelectAll","onClear","onShipSingleAddress","resetSelectedShippingLines","shippingLines","shippingLineImages","currencyCode","moduleId","moduleTypeName","typeName","Shipping","_renderSelectAddress","onShipMultipleAddressesHandler","onAddAddressHandler","AddressSelect","addresses","onAddressOptionChange","_onAddressOptionChange","onShipMultipleAddresses","_goToShipMultipleAddresses","onAddAddress","_goToAddAddress","_onSelectAddress","multipleAddressShippingEnabled","_onAddressAddUpdateSubmit","response","_isNewAddress","updateCustomerAddress","addCustomerAddress","Promise","resolve","_clearError","_onAddOrUpdateSuccess","_getDefaultAddress","_getAddressFromCartExpressPaymentDetails","expressPaymentDetailsFromCartPage","isExpressAddressAppliedInCartPage","addressFromCartExpress","getExpressAddress","getAddressFromTokenizedPaymentCard","Country","threeLetterIsoRegionName","getThreeLetterIsoRegionName","NameOnCard","Address1","StreetNumber","Address2","Zip","Phone","expressAddress","countryRegion","country","_country$ISOCode","ISOCode","toLowerCase","CountryRegionId","_canShip","defaultAddress","shippingCartLines","isExpressCheckoutApplied","shippingAddressFromExpressCheckout","isEmpty","_setShippingAddress","updateHasShippingAddress","newHasShippingAddress","Multiple","_onSelectMultiAddress","_checkout$result$chec","_checkout$result$chec2","_channelDeliveryOptio2","_setCartLinesShippingAddress","newShippingAddress","updateShippingAddress","catch","newCartLinesWithShippingAddress","shippingGroup","updateCartLinesShippingAddress","updateCartLineShippingAddress","updatedCartLinesObject","_getViewport","device","Type","MsDyn365","isBrowser","window","innerWidth","onPending","existingAddress","_address$Name","_address$Street","_address$StreetNumber","_address$City","_address$State","_address$ZipCode","_address$Phone","_address$ThreeLetterI","_address$AddressTypeV","_countItems","cartlines","_viewport","_updateViewport","_address","addEventListener","componentWillUnmount","removeEventListener","_featureState$result2","headingImages","itemsText","singleItemText","_line$cartLine$LineId2","_line$product4","_line$product$Primary2","_line$product5","_line$product6","_context$request$app2","_line$cartLine$Quanti2","_line$cartLine$Shippi","_line$cartLine$Shippi2","shippingAddressId","numberOfCartLines","itemText","lineImageProps","cartLineImages","isRetailMultiplePickUpOptionEnabled","isShowAddresList","isShowShipMultipleAddress","showAddressSelectHandler","showShipMultipleAddressesHandler","showShipMultipleAddresses","showAddOrUpdateAddressHandler","showAddressSelect","_this$props$data$cart","_this$props$data$cart2","properties","ExtensionProperties","property","Key","Value","StringValue","JSON","parse","get","MediaGallery","_this","_props$config$zoomedI","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","player","defaultGalleryImageSettings","cropFocalRegion","defaultThumbnailImageSettings","onExiting","animating","onExited","next","removeInlineZoomStyle","isLastItem","nextIndex","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","autoplay","currentIndex","mediaItems","_mediaItems","_this$player$current","mediaTypeValue","MediaType","Video","current","play","_this$player$current2","pause","getImagesData","skipImageValidation","_this$props$config$im","_this$props$config$im2","source","imageSource","mediaLocations","mediaLocationsForSelectedVariant","mediaLocation","_mediaLocation$Uri","_this$props$data$prod","Uri","getAltText","shouldUseCmsAltText","AltText","IsApplicableForChildEntities","isApplicableForChildEntities","curatedImages","_filterMasterImageFromVariant","_renderCarouselItemVideo","mediaData","videoData","_videoData$_links","playerResources","videoMetaData","videoId","duration","playTime","thumbnail","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","attributes","editProps","Player","ref","playerData","isEditor","params","_renderEmptyImage","_getCarouselItem","image","_this$props$context$r2","isInPopup","arguments","fallbackImage","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","tag","tabIndex","onClick","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","getVideoThumbNailItem","classes","_refHandler","divRef","which","KeyCodes","Enter","Space","preventDefault","_renderVideoThumbnail","fullScreenTitleText","openModalDialog","_toggleModal","imageModalSlider","ZoomView","_mapProductToImageData","carouselprops","Carousel","items","item","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","classNames","ImagefullView","altTextSource","mediaGalleryImages","isImageZoomed","isInitialLoad","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","Viewport","_this$props$config$im3","_this$props$context$r3","shouldUpdateOnPartialDimensionSelection","_setRenderType","_this$props$config$th","validateProductImages","thumbnailImageSettings","_setImages","_this$props$config$th2","getValidProductImages","productVariant","_product$productVaria","_this$props$context$a","_this$props$config$th3","getProductImages","fireImmediately","_this$props$config$th4","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","_this$props$context$r4","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","viewProps","Modal","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","keys","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","stringify","lastUpdate","defaultKey","_getEmptyThumbnailItem","zoomView","curatedImage","mediaToSet","all","URL","searchParams","getVideoMetadataFromApi","debug","element","Date","now","media","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","MasterProductId","itemId","_item$additionalPrope","_this$props$config$da","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","mobileZoomedInImageClassName","style","transform","classList","remove","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","Number","positionX","clientX","left","positionY","clientY","top","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","_this$props$config$da5","onMouseOut","onMouseMoveLensContainer","onMouseOverImageContainer","href","_product$PrimaryImage","_this$fullScreenOverl","focus","parentDiv","children","querySelector","removeAttribute","removeContainerZoomStyle","AddressDetail","Node","description","_ref2","AddressForm","isShowSaveButton","saveButton","isShowCancelButton","cancelButton","AddressItem","label","input","AddressError","Module","SelectAddress","shipMultipleAddressesButton","addButton","SelectItem","showItems","_ref3","ShipMultipleAddress","shipSingleAddressButton","clearSelectionButton","addressDropdown","ProductsTable","ProductsTableHeading","ProductsTableRow","shipMultipleAddressLines","_renderShipMultipleAddressLine","_ref4","shipMultipleAddressesLine","selectLine","productImage","productNumber","productInfo","productPrice","productQuantity","productAddress","position","verticalAlign","colSpan","width","display","marginTop","textAlign","_renderThumbnails","thumbnails","_renderThumbnailItem","getDefaultColorSwatchSelected","productData","_colorAttribute$swatc","_colorAttribute$swatc2","_colorAttribute$swatc3","attributeValues","colorAttribute","attributeValue","_attributeValue$keyNa","keyName","toLocaleLowerCase","DimensionTypes","color","defaultSwatch","swatches","isDefault","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","baseUrl","search","pathname","renderProductUnitOfMeasure","unitOfMeasure","renderLabel","price","rating","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","ratingAriaLabel","roundedRating","toFixed","renderPrice","basePrice","adjustedPrice","savingsText","freePriceText","originalPriceText","currentPriceText","isPriceMinMaxEnabled","priceResources","BasePrice","AdjustedPrice","CustomerContextualPrice","PriceComponent","renderProductPlacementImage","imageUrl","fallbackImageUrl","_context$app$config","contextConfig","fallbackImageSource","img","ProductComponentV2","msdyn365Commerce","createComponentOverride","component","_product$name","_product$recordId","_getProductImageUrlFr","_getProductPageUrlFro","ratingCountAriaLabel","allowBack","quickViewButton","productComparisonButton","isEnabledProductDescription","inventoryLabel","dimensionAvailabilities","swatchItemAriaLabel","productUrl","getProductPageUrlSync","recordId","MIN_VALUE","productImageUrlFromSwatch","dimensionToPreSelectInProductCard","none","primaryImageUrl","productImageUrls","generateImageUrl","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","swatchValue","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","enableStockCheck","updatePageAndImageUrl","swatchItem","dimensionType","setValue","StringExtensions","isNullOrWhitespace","productPageUrlWithSwatch","newUrl","delete","swatchProductImageUrl","newImageUrl","payLoad","getPayloadObject","attribute","getTelemetryAttributes","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","onTelemetryClick","cultureFormatter","formatCurrency","averageRating","totalRatings","defaultUnitOfMeasure","_item$keyName$toLocal","_item$keyName","_item$swatches$map","_item$swatches","dimensionTypeValue","dimensionsToDisplayOnProductCard","dimensionsInProductCard","shouldDisplayDimension","_item$recordId","_swatchItem$swatchVal","_swatchItem$swatchVal2","_dimensionAvailabilit","colorHexCode","swatchColorHexCode","swatchImageUrl","dimensionAvailability","_swatchItem$swatchVal3","swatch","ProductComponentV2SwatchComponent","onSelectDimension","hideRating","avgRating","numberRatings","RatingComponent","ratingCount","readOnly","renderRating","inventoryAvailabilityLabel","quickview","selectedDimensions","getValues","convertDimensionTypeToProductDimensionType","dimensionValue","selectedProductId","renderQuickView","catalogId","validateCatalogId","renderProductComparisonButton","getCatalogId","Header","isB2BSite","handleLinkTextChange","linkIndex","_this$props$config$my","myAccountLinks","linkText","popOverRef","_toggleNavbar","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","isChannelTypeB2B","displayName","workerName","customerName","user","_this$props$data$empl","worker","employee","_this$props$data$acco","customer","accountInformation","FirstName","componentDidMount","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","wishlists","cartLabel","cartQtyLabel","logoLink","logoImage","shouldShowWishlistCount","disableTooltip","headerToggleClass","headerClassName","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","logo","Logo","link","wishListIconDesktop","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","wishListIconMobile","cartIcon","CartIconComponent","navIcon","NavIcon","isExpanded","targetId","toggleNavBar","menuBar","siteOptions","HeaderTag","headerAriaLabel","HeaderContainer","HeaderTopBarContainer","Divider","MobileMenuContainer","isOpen","wrapClassName","toggle","MobileMenuHeader","ModalHeader","MobileMenuBodyContainer","ModalBody","MobileMenuLinksContainer","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","Popover","placement","signInLink","_getSigninButton","signOutLink","_getSignOutButton","isOBORequest","switchCustomerLink","_getSwitchCustomerButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","accountLinks","_getAccountLinks","preferredStore","HeaderPreferredStore","currentDistributor","slotName","slots","TelemetryConstant","SignIn","Button","signInLinkText","signInUrl","signInLinkAriaText","_user$signOutUrl","SignOut","signOutLinkText","signOutUrl","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","cookies","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","removeAccountSelectionCookie","shoppingAsText","route","url","location","param","retailServerErrorCode","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","innerRef","cta","contentAction","etext","editableLink","linkUrl","destinationUrl","openInNewTab","onTextChange","keyCode","Escape","AddToCartProductListComponent","_quickOrderTemplate$q","_quickOrderTemplate$q2","quickOrderTemplate","quickOrderTemplateLines","fullProduct","ProductDetails","productListLine","buttonLabel","quickOrderGridBuySelectedButtonText","buttonAriaLabel","quickOrderGridBuySelectedButtonAriaLabel","dialogStrings","_props$resources$quic","_props$resources$quic2","_props$resources$quic3","_props$resources$quic4","_props$resources$quic5","_props$resources$quic6","_props$resources$quic7","_props$resources$free","_props$resources$orig","_props$resources$curr","_props$resources$adde","_props$resources$quic8","_props$resources$quic9","goToCartText","quickOrderGridGoToCartText","continueShoppingText","quickOrderGridDialogCloseText","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","headerItemOneText","quickOrderGridSingleItemText","headerItemFormatText","quickOrderGridMultiLineItemFormatText","headerLinesFormatText","quickOrderGridMultiLinesFormatText","headerMessageText","quickOrderGridHeaderMessageText","addedQuantityText","buyAgainNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","salesLine","OrderDetailsProduct","getOrderDetails","AddToCartComponent","addToCartText","outOfStockText","addToCartArialLabel","navigationUrl","getUrlSync","shouldSkipSiteSettings","orderDetailsProducts","onError","getQuickOrderGridAddToCartDialog","_result$cartActionRes","cartActionResult","errorDetails","LocalizedMessage","handlers","onErrorMessage","removeActionHandler","removeProductList","productList","Id","removeQuickOrderList","QuickOrderGridDrawer","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","onToggle","previousState","collapseProps","_drawerGlyphClass","toggleGlyphClassName","closeGlyph","isAnimateGlyph","_drawerOpenGlyph","openGlyph","_drawerCloseGlyph","drawerClass","drawerButtonClassName","toggleButtonProps","block","disabled","_generateDrawerButtonInnerMarkup","Collapse","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","QuickOrderGridFormComponent","productTextInput","quantityTextInput","quickOrderGridState","maxChars","minQuantity","maxQuantity","isAddtoListDisabled","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","handleQuantityChange","handleInputChange","handleAddProductListClick","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","pattern","maxLength","addToListBtn","userMessage","stateMessage","Alert","statusCssString","messageGlyph","messageText","QuickOrderGridProduct","productLine","isSelected","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_props$context$reques","_props$imageSettings","containerClassName","setShowPreviousActions","onChangeHandler","onChangeQuantity","itemKey","newValue","onRemoveHandler","onRemoveItem","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","setShowActions","onClickViewDetails","shouldShowActionsNewValue","actionsContainerClassName","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","min","max","_product$Dimensions","_productListLine$Line","Dimensions","dimension","_dimension$DimensionV","DimensionValue","join","quickOrderGridProductDimensionsSeparator","renderProductPrice","isNullOrEmpty","UnitOfMeasure","renderUnitOfMeasure","IncrementalQuantity","currentCount","inputQuantityAriaLabel","quickOrderGridInputQuantityAriaLabel","decrementButtonAriaLabel","quickOrderGridDecrementButtonAriaLabel","incrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","isGiftCard","IsGiftCard","callbacks","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","QuickOrderGridTableComponent","setIsMobile","quickOrderGridProducts","isOrderQuantityLimitsFeatureEnabled","updateViewport","quickOrderProduct","_product$ProductDetai","_quickOrderProduct$pr","_quickOrderProduct$pr2","behavior","Behavior","MinimumQuantity","MaximumQuantity","Math","ProductPrice","callBacks","QuickOrderGrid","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$feat4","_this$props$data$feat5","_cartConfiguration$re","_cartConfiguration$re2","_waitTime","_dimensionUpdateQueueMaxLength","_errorCssClass","_errorCssGlyphClass","_dimensionUpdateQueue","FinitePromiseQueue","_dimensions","_initializedDimensions","Set","_cssClassNameConfigure","_className","_isOrderQuantityLimitsFeatureEnabled","_isChannelLimitsFeatureEnabled","_applyDefaultOrderSettingsForCartLine","_quickOrderGridCallbacks","initializeDimension","initializedDimension","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","productDimensions","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","Error","getDropdownName","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","_removeItemRowFromTable","productListLineId","_changeRowQuantity","_removeProductList","isAuthenticated","token","ProductListsDataActions","callerContext","reload","warning","_updateStatusState","quickOrderGridDeleteProductListFailedText","_handleInputChange","query","productResponse","_cancellabelDebounce","cancel","isQuickOrderGridFormExpanded","_debounce","getScanResult","GetScanResultInput","results","Product","ProductDimensionFull","_updateQuantitiesInState","exception","_handleQuantityChange","_this$state$productRe","currentValue","parseInt","inputElement","_quantityInput","HTMLInputElement","minimumQuantity","needToUpdateUIValue","_behavior$MinimumQuan","newCurrentValue","isNaN","setAttribute","_this$state$productRe2","ProductDimensionType","Color","productDimensionTypeColor","Configuration","productDimensionTypeConfiguration","Size","productDimensionTypeSize","Style","productDimensionTypeAmount","productDimensionTypeStyle","hasProductDimensions","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","configureErrors","errorState","mappedDimensions","_this$_updateDimensio","DimensionTypeValue","_updateDimensionValue","selectedProduct","newProduct","getSelectedVariant","SelectedVariantInput","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","productDimensionFull","newValueId","DimensionValues","_getDimensionErrorString","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_validateCart","_productResponse$Dime","missingDimensions","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","quickOrderTemplateLinesData","orderLineIndex","findIndex","lines","newProductListLine","previousQuantity","_objectWithoutProperties","_excluded","list","newLine","updatedLines","updatedProductList","ProductListLines","update","ActiveProductListInput","ProductListId","_isChannelMultipleCatalogsFeatureEnabled","isMultipleCatalogFeatureEnabledInHq","_this$props$data$feat","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","productListId","_productResponse$Defa","_createProductList","AddItemToProductListInput","DefaultUnitOfMeasure","addItemToProductListAction","CreateProductListInput","ProductListType","QuickOrder","createProductList","_productTextInput","_telemetryContent","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","cartConfiguration","ValidateDefaultOrderSettingsPerLine","_this$state$min","_this$state$max","customerInformation","customerInfo","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","header","Heading","quickOrderGridProps","contentProps","isB2bCustomer","IsB2b","actions","drawer","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","form","configure","getProductConfigure","container","_renderListContainer","orderActions","_renderQuickOrderGridActions","quickOrderGridDeleteButtonText","userMessageNode","topStateMessage","addProductListToBag","QuickOrderGridActionsView","isBulkPurchaseEnabled","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","validValues","tableClassName","_getMinQuantityForCartLineItem","_getMaxQuantityForCartLineItem","_getQuantity","_product$Behavior","_getIgnoreOrderSettings","isQuantityLimitsFeatureEnabled","_product$Behavior2","maxQuantityForCartLineItem","_cartConfiguration$re3","_cartConfiguration$re4","IgnoreOrderSettings","applyDefaultOrderSettingsForCartLine","_product$Behavior3","defaultQuantity","DefaultQuantity","dimensions","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Currency","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","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","e","stopPropagation","clearAll","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedRefinersMap","_this$props$context","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","hierarchy","_rangeParentDisplay$","rangeParentDisplay","p","_getKeyForRefinerValue","rangeDisplayType","clearAllText","choiceAriaLabel","closeAriaLabel","clearAllAttributes","newIntRange","urlBuilder","_parent","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","KeyName","_formatPrice","UnitText","filterValue","refiner","amount","currency","trace","selected","ErrorMessage","FeatureSearchResultItem","recommendation","productName","productRecordId","featureSimilarDescriptionTitle","featureSimilarLooksTitle","Link","ModalToggle","modalNode","autoFocus","applicationNode","returnFocusRef","returnRef","onModalToggle","zIndex","modalHeaderNode","modalTitle","modalFooterNode","ModalFooter","modalCloseButtonText","getInventoryLabel","AttributeValues","inventoryAttribute","TextValue","ProductSearchResultItems","moduleType","allowBackNavigation","quickviewSlot","productsDimensionAvailabilities","priceRangeSeparator","ProductComponent","priceFree","masterProductId","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","placeholder","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","document","getElementById","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","_this$props","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","attrs","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productText","productCount","Count","refineMenuItemAriaLabel","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","SwatchComponent","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","hideCount","RangeRefineItemInput","_changeMinInputRange","_changeMaxInputRange","_applyCustom","invalidData","updateInputRangerProps","_isUndefined","trim","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpandedOnInitialLoad","expanded","productRefinerHierarchy","timeout","_renderChildItems","_renderSingleMultiSelect","_renderRange","refinerValuesList","listItems","selectedValue","_getRangeType","SliderWithBars","onUpdateRefiners","Separator","separator","Title","SearchResultContainer","SearchResultContainer_1","sortByDropdownOptions","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","_isMounted","_updateVariantAvailability","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","includeAttributes","_getProductsDimensionsAvailabilities","_updateListPageState","listPageState","_this$props$config$it","_this$props$config$it2","querySorting","sorting","decodeURIComponent","currentPageNumber","skip","itemsPerPage","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","productId","featureProduct","_this$props$data$list","_this$props$data$list2","productsList","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","_getActivePrice","_this$props$data$list3","_this$props$data$list4","getPriceForProductSearchResult","PriceForProductSearchResultInput","_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","fullUrl","getCurrentUrl","skipCount","totalItems","previousText","flipperPrevious","nextText","flipperNext","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","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$prod5","shouldAllowBackNavigation","breadCrumbType","breadcrumbType","shouldAllowBack","isPriceMinMaxFeatureState","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","option","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","productPrices","pending","validationErrorNotNumber","validationErrorNotRange","static","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","Recommendation","productResults","getCollectionProducts","enableAffiliationBasedPricing","_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","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","FeatureSearchContainer","similarLookProduct","AccountManagementAddress","_renderListAddress","headingTag","AddressList","primaryAddressSectionHeading","otherAddressSectionHeading","contextRequest","handleLineItemHeadingChange","onEditAddress","_goToEditAddress","onRemoveAddress","_onRemoveAddress","onUpdatePrimaryAddress","_onSubmitUpdatePrimaryAddress","_onAddressUpdate","onSuccess","twoLetterISORegionName","updateCustomerPrimaryAddress","_onUpdatePrimaryAddressSuccess","Deactivate","removeAddressData","_renderScreenReaderRemoveText","formatNotification","removeAddressNotification","AccountAddressManagement","showAddressList","screenReaderNotification","shouldRenderEditAddressButton","enableEditAddress","noBillingErrorMessage","setError","renderErrorMessage","addressTypeId","addressCount","multipleBillingErrorMessage","isError","newAddress","BillingAddressOption","AddressInputFunctionComponent","additionalAddributes","shouldUseAutoFocus","additionalAttributes","_onBillingAddressOptionChange","selectedBillingOption","isAddNewAddress","isPrimaryAccountAddress","SameAsShipping","NewAddress","PrimaryAccount","primaryAddress","getPrimaryAddress","isShowRadioButtons","initialBillingOption","billingAddressOption","selectedBillingAddressOption","sameAsShippingRadioButton","primaryAccountAddressRadioButton","usePrimaryAccountAddressAsBillingAddressAriaLabel","usePrimaryAccountAddressAsBillingAddressText","newAddressRadioButton","addNewAddressAriaLabel","addNewAddressText","_this$props$data$addr","_this$props$data$chec13","isShowList","Item","isShowPrimaryButton","primaryButton","editButton","removeButton","isShowError","AddressLists","ListAddress","isShowEmptyListMessage","emptyListMessage","primaryAddressList","otherAddressList","_props$customerAddres","log","addressId","slice","invoiceAddress","HeadingTag","billingAddressOptions","customShowAddressProps","customUpdateAddressProps","orderedRadioButtons","sameAsShipping","primaryAccount","sort","a","b","button","toggleBopisHandler","isBopisSelected","_cartLine$pickUpInSto","pickUpInStore","toggleBopis","onChangeStoreHandler","_cartLine$pickUpInSto2","renderCartLineComment","cartLineComment","comment","cartLineId","cartProductTitle","renderCartLine","storeSelector","isMultiplePickUp","_cartLine$data3","_cartLine$data4","Comment","cartLineProductTitle","outOfStockErrorMessage","cartlineId","addToWishlist","renderGroupBopisBlock","_cartLine$data2","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","PickupInStore","puckUpinStoreAttribute","addToOrderTemplate","renderCartlinesInternal","isPrintView","itemIndex","renderBopisBlock","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","ContainerProps","orgUnitName","renderCartlines","waitingComponent","cartLoadingStatus","isCartDataResult","orderLevelComment","multiplePickUpEnabled","CartlinesWrapper","renderOrderLevelComment","emptyCart","renderCartLinesGroupHeader","_cartLine$pickUpInSto6","pickUpText","shippingText","emailshippingText","groupTitle","renderCartLinesGroupTitle","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","_cartLine$pickUpInSto5","itemLabel","itemsLabel","countTitle","deliveryOption","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","setIsPrintView","printViewToggle","_renderPrintView","handlePrintViewChange","printViewLabel","updatedTitle","cartTitle","totalItemsInCart","renderModuleAttributes","orderSummaryLineitems","orderTotal","checkoutAsGuestButton","renderOrderSummaryCheckoutButton","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","renderCartLinesGroup","cartLinesGroup","_props$context$action","_props$context$action2","countItem","_item$data$cartline$Q","_item$data","countItems","cartDataResult","orderSummaryHeading","OrderSummaryWrapper","renderInvoiceSummarylines","invoiceSummaryLines","orderSummaryItems","invoices","loyalty","invoiceSummaryLineitems","OrderSummaryItems","renderOrderSummarylines","orderSummaryLines","subtotal","shipping","otherCharge","tax","errorData","OrderSummaryErrors","errors","Wrapper","_props$cart","promoCode","createTemplateFromCartButton","renderOrderSummaryCheckout","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","EmailDelivery","LineItemComponent","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","LineItemDeliveryGroup","LineItemList","lineItems","lineItem","LineItemGroupComponentWithMultiplePickUp","_ref5","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","_ref6","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","LineItems","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","OrderSummaryComponent","_ref9","otherChargesLines","displayDefaultShippingLine","totalDiscounts","PaymentSummaryComponent","_ref10","_renderLineChargeNode","chargeName","chargeAmount","_props$data$checkout$","_props$data$checkout$5","attributeArr","getShipCompleteIndex","_props$data$checkout$2","getShipCompleteValue","shipCompleteIndex","attr","saveShipCompleteToCart","updateCart","newCartObject","setShipCompleteOnCheckout","shipCompleteOnCheckout","shipCompleteOnCheckoutToggle","_renderShipOnCheckout","handleShipCompleteOnCheckoutChange","shipCompleteOnCheckoutLabel","_props$data$checkout$4","shipComplete","idx","canShow","checkoutProps","headerProps","hasSalesOrder","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","orderConfirmation","loading","guidedForm","orderSummary","invoicePaymentSummary","placeOrderButton","termsAndConditions","keepShoppingButton","chargelines","chargeCodes","currencyFormatter","ChargeLines","linesNode","otherChargeTotal","OtherChargeAmount","c","node","ChargeCode","chargeCode","_r$CalculatedAmount$t","_r$CalculatedAmount","CalculatedAmount","chargeLineLabel","_otherChargeTotal$toS","otherChargesNode","chargeLinesBreakdown","orderSummaryExtended","_renderOrderComment","commentHeading","commentString","emptyStringClassName","commentHeadingText","_props$data$checkout$3","getCommentText","HeaderView","_renderQuickViewIcon","quickOrderLink","_configureStickyHeader","headerAlertsContainer","bannerHeights","offsetHeight","headerElement","documentElement","scrollTop","stickyHeader","headerLogo","navStickyPos","_renderAccountBlock","accountClassName","_renderReactFragment","slot","menuNode","useStickyHeader","showQuickOrderLink","showPhoneNumber","phoneNumber","quickOrderUrl","_renderPhoneNumber","_renderMobileLogo","telephoneLink","_config$mobileLogoIma","mobileLogoImage","_renderDesktopAccountBlock","histogramItems","histogramProps","componentId","_data$ratingsSummary$","_data$ratingsSummary$2","_data$ratingsSummary$3","_data$ratingsSummary$4","_data$ratingsSummary$5","_data$ratingsSummary$6","reviewsCount","ratingsSummary","reviewsCountString","numberOfReviewsString","averageRatingAriaLabel","buttonProps","starLabel","bar","histogramItem","advancedNotes","diplayMovetowishlist","displayMoveToWishlistButton","notes","_cartLine$data5","renderAdvancedNotes","n","paginatedView","_props$cart6","_props$cart7","shouldRenderReminder","couponReminderMessage","setAdvancedNotes","pageLength","setPaginatedView","paginationPage","setPaginationPage","clearCartModalActive","setClearCartModalActive","changePage","page","_props$cartlines","itemIds","cl","getAdvancedNotesAsync","getAdvancedNotes","renderClearCart","_renderClearCart","clearCartButtonText","LinePagination","nextPage","prevPage","currentPage","numPages","ceil","prev","paginationPrev","paginationNext","_cart$cart","IsInvoiceLine","InvoiceAmount","ExtendedPrice","InvoiceSummary","orderTotalLabel","summaryTotalAmountLabel","invoiceLabel","getInvoiceSummaryLineItems","checkoutAsSignInUserButton","couponReminderHeading","renderReminderMessage","couponMapping","couponCodeMap","_renderClearCartModal","handleClearCart","clearCartHeader","clearConfirmBody","clearCancelButtonText","ids","cartLineIds","Array","removeCartLines","refreshCart","numItems","lineItemGroupComponentExt","_set","_props$data$checkout$12","_props$data$customerI","_props$data$checkout$7","_props$data$checkout$8","_props$data$checkout$9","allowableFreightIdx","freightData","invoiceAmountDueIdx","_props$data$checkout$6","invoiceAmountDueData","_unused","updatedFreightData","_invoiceAmountDueData","InvoiceId","invoiceId","invoiceAmountDue","amountDue","TextValueTranslations","updateResponse","_props$data$checkout$10","_props$data$checkout$11","getInvoiceAmountDueAttIdx","isAccountBlocked","Blocked","lineItemsExt","invoicePaymentSummaryProps","_checkout$result","_cart$CartLines","invoiceSummaryTitle","_get","getInvoicePaymentSummary","invoicePaymentSummaryExtended","accountLockedMessage","changeUserSlug","accountLinksFiltered","handleLoginRedirect","isHomePage","requestUrl","has","accountUrl","logoAnchorTag","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","select","renderConfigure","dropdowns","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","createSearchResultModal","modalProps","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","CartIconView","cartIconRef","_modalContainer","hideArrow","isModalOpen","closeModal","_openModal","_this$cartIconRef$cur","_renderCartCloseIcon","_renderCartItemCount","cartItemCount","_escFunction","isAutoDisplayTriggered","_this$props$data$cart3","_this$props$data$cart4","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","miniCartWrapper","flyoutTitle","checkoutBlockedDueToUnavailableFunds","cartLineIndex","miniCartItemWrapper","storeLocation","promoContentItem","_props$data$cart$resu","totalPrice","emptyPrice","totalPriceFormatString","renderTotalPrice","_props$data$cart$resu2","subTotalMessage","renderSubtotalMessage","goToCartButton","continueShoppingButtonTitle","_renderAccountDropdownLinks","renderThumbnailItem","GetThumbnailItemComponent","imageId","_props$context$app$co","_props$config$thumbna","_props$context$reques2","_props$callbackToggle","_props$callbackThumbn","call","handleKeyDown","playVideoTitleText","GetEmptyThumbnailItemComponent","_props$context$app$co2","_props$config$thumbna2","_props$context$reques3","renderThumbnails","displayOrder","getMediaGalleryItems","_item$videoData","videoThumbnail","RenderVideo","NewSingleSlideCarouselComponentProps","NewThumbnails","DescriptionInterval","renderProductCards","productsContainer","textValue","renderProductCardsDescription","_props$data$products$","_props$data$featureSt","isAllowBack","classname","quickviewslot","quickView","renderProducts","_data$products$result","_data$products$result2","productDescriptionInterval","productDescriptionIntervalRemainder0","productDescriptionIntervalRemainder9","titleContainer","configureStickyFilter","isStickyHeader","headerContainer","headerHeight","defaultContainer","refinerElement","clientHeight","refineMenuContainer","refinerSectionContainer","renderRefinerMobile","renderRefinerFooter","handler","doneAriaLabel","doneText","sortingContainer","searchResultContainer","productSectionContainer","titleViewProps","categoryNavContainer","refineAndProductSectionContainer","featureSearchContainer","useStickyFilter","stickyFilterSetup","enableStickyHeader","setIsExpanded","wrapperRefiner","refinerRefernce","handleClickOutside","contains","useOutsideClick","enableProdutDescription","filterText","CatalogLabelComponent","isB2b","catalogs","catalog","CartLineItemFunctions","renderProductDimensions","DimensionStrings","productDimension","colorString","configString","sizeString","amountString","styleString","DiscountLines","discountLine","OfferId","OfferName","discountStringText","isSalesLine","PeriodicDiscount","EffectiveAmount","priceCurrency","EffectivePercentage","inventoryInformationLabel","inventoryCssName","inventoryLabelClassName","hasShippingMethod","shippingChargeLines","chargeLine","IsShipping","freightFee","chargeTotal","priceComponent","shippingChargesText","_cartline$ChargeLines","otherCharges","chargeline","Description","SalesAgreementLineRecordId","salesAgreementPricePrompt","_props$primaryImageUr","destructDimensionStrings","renderDisountLines","renderInventoryLabel","renderShippingLabel","renderOtherCharges","renderSalesAgreementPrompt","productAttribute","imgeClassName","quantityOnChange","lineIndex","NetAmountWithAllInclusiveTax","GrossAmount","NetPrice","salesAgreementLineId","showShippingChargesForLineItems","_generateQuantityandPrice","nodes","isOutOfStock","isQuantityEditable","quantityDisplayString","currentQuantity","isCartStateReady","DiscountAmount","cartState","priceEditorResources","CartLinePriceEditor","CheckoutStateInput","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","createObservableDataAction","ctx","CheckoutState","inputData","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_customerReference","_customerRequisition","_note","_isTermsAndConditionAccepted","_customerAccountAmount","defineProperty","prototype","_tokenizedPaymentCard","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","updateCardPrefix","newCardPrefix","removeGiftCard","giftCardNumber","removeGiftCardExtend","addGiftCard","__spreadArrays","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","newAmount","updateGuestCheckoutEmail","newGuestCheckoutEmail","customerReference","customerRequisition","note","updateTermsAndConditionsAcceptance","newIsTermsAndConditionAccepted","updateCustomerAccountAmount","WrappedComponent","_super","ModuleState","initializeState","_b","states","getModuleStates","updateModuleStates","__assign","_a","hasInitialized","isRequired","isCancellable","isSubmitContainer","childIds","getModuleStateManager","validate","isReady","isPending","isSkipped","isCancelAllowed","shouldSubmitContainer","hasModuleState","setIsRequired","setIsCancellable","setIsSubmitContainer","onSkip","getModule","getModuleByTypeName","getModuleStateManagerByTypeName","moduleStates","values","_moduleState","modules","_validateLeaf","module","isMatch","_validateContainer","allMatched","skipSkippableItem","childId","_isPaymentSectionContainer","enableControl","__extends","ModuleStatesCacheKey","cacheKey","InvoiceSummaryLine","toBeCalculatedText","freeText","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","reactNodes","invoiceLine","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","totalAmountAfterGiftCard","loyaltyLabel","giftcardLabel","getCheckoutState","scrollIntoView","updateCheckoutErrorFocus","newCheckoutErrorFocus","None","imageAltText","_context$app","getInput","_addressPurposes$find","addressTypeDescription","purpose","ichecked","addressChangeCheckboxAriaLabel","AddressInputComponent","getAddressSelectItems","AddressButtonComponent","addressAddNewButtonText","addressAddButtonText","addressAddNewButtonAriaLabel","addressAddButtonAriaLabel","addressShipMultipleText","addressShipMultipleAriaLabel","addressSaveButtonText","addressSaveButtonAriaLabel","addressCancelButtonText","addressCancelButtonAriaLabel","modalCloseButtonRef","handleClick","_findPreferredStoreOnClick","storeName","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","storeSelectorId","openDialog","showMapViewLink","parentElementRef","onLocationSelected","orgUnitLocation","_renderLogo","rel","_renderImage","imagePropertyName","mobileHamburgerAriaLabel","validateMediaLocationAsync","imageData","http","XMLHttpRequest","open","send","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","pairs","pair","_actionContext$reques","isPreview","commerceApiRequest","previewImageData","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","commerceVideoMetadataRequest","mockRequest","buildMockRequest","mockRequestURL","staticCdnUrl","signUpUrl","mockAnonRequest","mockSigninErrorRequest","mockActionContext","buildHydratedMockActionContext","unavailableProductErrorMessage","outOfStockProductErrorMessage","addressShipSingleText","addressShipSingleAriaLabel","clearSelectionButtonText","clearSelectionButtonAriaLabel","every","chooseAddressForSelectedItemsText","chooseAddressForSelectedItemsAriaLabel","defaultValue","noAddressSelectedAriaLabel","hidden","headers","selectAllRowsText","addressSelectAllRowsText","addressProductNumberText","addressProductText","productUnitPrice","addressProductUnitPriceText","addressProductQuantityText","addressProductAddressText","clickHandler","isAllSelected","ShipMultipleAddressesTableHeading","_renderProductListHeader","_line$cartLine","currentLineProps","shippingLineImage","Price","ShipMultipleAddressesLineView","saveAndContinueBtnLabel","componentClassName","getOnChange","scope","maxWidth","paddingLeft","border","onSelectLineHandler","renderProductImage","renderProductInfo","renderProductError","_context$actionContex","_context$request","dimensionsLine","OOS","UNASSORTED","NONE"],"sourceRoot":""}