{"version":3,"file":"static/js/9.9eb6f8f8f883fb1e9e33.chunk.js","mappings":"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","sources":["webpack://msdyn365.commerce.online/./src/modules/smwe-media-gallery/utils/get-valid-product-images.ts?7349","webpack://msdyn365.commerce.online/./src/modules/smwe-media-gallery/smwe-media-gallery.tsx?d480","webpack://msdyn365.commerce.online/./src/modules/smwe-media-gallery/smwe-media-gallery.view.tsx?56c9","webpack://msdyn365.commerce.online/./src/modules/smwe-search/actions/get-auto-suggest-suggestions.ts?511b","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.keywordsuggest.tsx?378f","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.productsuggest.tsx?3dda","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.categorysuggest.tsx?c893","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.form.tsx?b365","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.label.tsx?6de6","webpack://msdyn365.commerce.online/./src/modules/smwe-search/smwe-search.tsx?d385","webpack://msdyn365.commerce.online/./src/modules/smwe-search/smwe-search.view.tsx?12de","webpack://msdyn365.commerce.online/./src/themes/blend/views/smwe-search.view.tsx?7dc6","webpack://msdyn365.commerce.online/./src/themes/colsolare/views/smwe-search.view.tsx?6357","webpack://msdyn365.commerce.online/./src/themes/columbiacrest/views/smwe-search.view.tsx?353b","webpack://msdyn365.commerce.online/./src/themes/conn-creek/views/smwe-search.view.tsx?1efd","webpack://msdyn365.commerce.online/./src/themes/elicit/views/smwe-search.view.tsx?c5b3","webpack://msdyn365.commerce.online/./src/themes/emp/views/carousel.view.tsx?0665","webpack://msdyn365.commerce.online/./src/themes/emp/views/smwe-search.view.tsx?8bf9","webpack://msdyn365.commerce.online/./src/themes/enoteca/views/smwe-search.view.tsx?81b8","webpack://msdyn365.commerce.online/./src/themes/erath/views/smwe-search.view.tsx?4746","webpack://msdyn365.commerce.online/./src/themes/fth/views/carousel.view.tsx?2705","webpack://msdyn365.commerce.online/./src/themes/fth/views/smwe-search.view.tsx?3d00","webpack://msdyn365.commerce.online/./src/themes/generazioni/views/smwe-search.view.tsx?c1ed","webpack://msdyn365.commerce.online/./src/themes/intrinsic-wine-co/views/smwe-search.view.tsx?9431","webpack://msdyn365.commerce.online/./src/themes/north-star/views/smwe-search.view.tsx?b6a2","webpack://msdyn365.commerce.online/./src/themes/patzhall/views/smwe-search.view.tsx?7d90","webpack://msdyn365.commerce.online/./src/themes/spring-valley-vineyard/views/smwe-search.view.tsx?93ce","webpack://msdyn365.commerce.online/./src/themes/stagsleap/views/smwe-search.view.tsx?f319","webpack://msdyn365.commerce.online/./src/themes/stemichelle-new/views/carousel.view.tsx?a805","webpack://msdyn365.commerce.online/./src/themes/stemichelle-new/views/smwe-search.view.tsx?cf97","webpack://msdyn365.commerce.online/./src/themes/stemichelle/views/smwe-search.view.tsx?d041","webpack://msdyn365.commerce.online/./src/modules/bulk-purchase/bulk-purchase.tsx?9fd5","webpack://msdyn365.commerce.online/./src/modules/bulk-purchase/bulk-purchase.view.tsx?feac","webpack://msdyn365.commerce.online/./src/validate-cart.ts?cd50","webpack://msdyn365.commerce.online/./src/Common/get-product.ts?0a21","webpack://msdyn365.commerce.online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://msdyn365.commerce.online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://msdyn365.commerce.online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://msdyn365.commerce.online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.description.tsx?840c","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-message.tsx?8ca3","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-title.tsx?f7e7","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.radio-button.tsx?9df9","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/checkout-delivery-options.tsx?6764","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?1e75","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-form.tsx?4540","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-item.tsx?d186","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-list.tsx?a3f3","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/title.tsx?3b2f","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/checkout-gift-card.tsx?8fc3","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/checkout-gift-card.view.tsx?d99f","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-input.tsx?cadb","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-label.tsx?e02b","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-text.tsx?895a","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/checkout-loyalty.tsx?8b4b","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/checkout-loyalty.view.tsx?b79f","webpack://msdyn365.commerce.online/./src/modules/checkout/checkout.tsx?6737","webpack://msdyn365.commerce.online/./src/modules/checkout/checkout.view.tsx?e4cc","webpack://msdyn365.commerce.online/./src/modules/checkout/components/alert.tsx?cb1e","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-invoice-payment-summary.tsx?9549","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-line-items.tsx?92f8","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-order-summary.tsx?4a81","webpack://msdyn365.commerce.online/./src/modules/checkout/components/guided-card.tsx?58e0","webpack://msdyn365.commerce.online/./src/modules/checkout/components/guided-form.tsx?f018","webpack://msdyn365.commerce.online/./src/modules/checkout/components/place-order-button.tsx?9b41","webpack://msdyn365.commerce.online/./src/modules/checkout/methods/checkout.ts?7b6b","webpack://msdyn365.commerce.online/./src/modules/checkout/methods/place-order.ts?5aa0","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/components/get-form.tsx?e249","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/components/get-item.tsx?4862","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/gift-card-balance-check.tsx?d1f8","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/gift-card-balance-check.view.tsx?a0c9","webpack://msdyn365.commerce.online/./src/modules/fabrikam/views/components/cartlineitem.component.tsx?eb8c","webpack://msdyn365.commerce.online/./src/modules/header/components/header-preferred-store.tsx?ee9c","webpack://msdyn365.commerce.online/./src/modules/header/components/logo.tsx?f27e","webpack://msdyn365.commerce.online/./src/modules/header/components/nav-icon.tsx?2475","webpack://msdyn365.commerce.online/./src/modules/header/header.tsx?e91a","webpack://msdyn365.commerce.online/./src/modules/header/header.view.tsx?cf0f","webpack://msdyn365.commerce.online/./src/invoice-summary-lineitem.tsx?5f61","webpack://msdyn365.commerce.online/./src/order-summary-lineitem.tsx?8a98","webpack://msdyn365.commerce.online/./src/modules/product-collection/product-collection.tsx?4008","webpack://msdyn365.commerce.online/./src/modules/product-collection/product-collection.view.tsx?5d36","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/close-button.tsx?063b","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/links.tsx?2587","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/text.tsx?782b","webpack://msdyn365.commerce.online/./src/modules/promo-banner/promo-banner.tsx?9ee9","webpack://msdyn365.commerce.online/./src/modules/promo-banner/promo-banner.view.tsx?7f77","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/add-to-list/add-to-cart-selected-items.tsx?de21","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?ca97","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-drawer.tsx?8701","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-form.tsx?5cbb","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-product.ts?187e","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-header-component.tsx?69b3","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-row-component.tsx?cd92","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/quick-order-grid-table-component.tsx?7cbc","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/quick-order-grid.tsx?fddf","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/utilities.ts?1806","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/quick-order-grid.view.tsx?f941","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-drawer.tsx?f8b4","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-form.tsx?eb54","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-product.ts?7702","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-table/components/quick-order-table-header-component.tsx?49e7","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-table/components/quick-order-table-row-component.tsx?e487","webpack://msdyn365.commerce.online/./src/modules/quick-order/components/quick-order-table/quick-order-table-component.tsx?46c1","webpack://msdyn365.commerce.online/./src/modules/quick-order/quick-order.tsx?ef21","webpack://msdyn365.commerce.online/./src/modules/quick-order/quick-order.view.tsx?a96d","webpack://msdyn365.commerce.online/./src/actions/submit-user-review.ts?ac78","webpack://msdyn365.commerce.online/./src/actions/inputs/submit-user-review-input.ts?3afb","webpack://msdyn365.commerce.online/./src/common/review-modal.tsx?54a9","webpack://msdyn365.commerce.online/./src/common/rnrInterface.ts?f761","webpack://msdyn365.commerce.online/./src/modules/ratings-histogram/component/components.tsx?f324","webpack://msdyn365.commerce.online/./src/modules/ratings-histogram/ratings-histogram.tsx?f6bc","webpack://msdyn365.commerce.online/./src/modules/ratings-histogram/ratings-histogram.view.tsx?5bff","webpack://msdyn365.commerce.online/./src/actions/report-review-concern.ts?bf43","webpack://msdyn365.commerce.online/./src/actions/submit-helpfulness-vote.ts?a8ab","webpack://msdyn365.commerce.online/./src/actions/inputs/report-review-concern-input.ts?b071","webpack://msdyn365.commerce.online/./src/modules/reviews-list/components/components.tsx?033b","webpack://msdyn365.commerce.online/./src/modules/reviews-list/components/report-review-modal.tsx?53d3","webpack://msdyn365.commerce.online/./src/modules/reviews-list/components/review-card.tsx?6bbd","webpack://msdyn365.commerce.online/./src/actions/inputs/submit-helpfulness-vote-input.ts?07aa","webpack://msdyn365.commerce.online/./src/modules/reviews-list/reviews-list.tsx?37e8","webpack://msdyn365.commerce.online/./src/modules/reviews-list/reviews-list.view.tsx?0e4a","webpack://msdyn365.commerce.online/./src/modules/write-review/components/components.tsx?3575","webpack://msdyn365.commerce.online/./src/modules/write-review/write-review.tsx?9afc","webpack://msdyn365.commerce.online/./src/modules/write-review/write-review.view.tsx?b867","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/utilities.ts?8569","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/choice-summary.tsx?3f71","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/error-message.tsx?6302","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/feature-search-result-item.tsx?71fa","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/link.tsx?52c2","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/modal.tsx?d78e","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/product-search-result-items.tsx?5174","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/range-refine-item.tsx?6288","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/refine-item.tsx?a594","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/refine-submenu.tsx?1292","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/separator.tsx?4ea6","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/title.tsx?c269","webpack://msdyn365.commerce.online/./src/modules/search-result-container/search-result-container.tsx?7500","webpack://msdyn365.commerce.online/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://msdyn365.commerce.online/./src/search-state.ts?dd10","webpack://msdyn365.commerce.online/./src/modules/social-share-item/social-share-item.tsx?bbcb","webpack://msdyn365.commerce.online/./src/modules/social-share-item/social-share-item.view.tsx?2d3e"],"sourcesContent":["import { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IActionContext, IImageData } from '@msdyn365-commerce/core';\r\nimport { MediaLocation } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport async function getValidProductImages(productId: number, channelId: number, actionContext: IActionContext): Promise {\r\n const actionInput = new MediaLocationsForSelectedVariantInput(\r\n productId,\r\n channelId,\r\n );\r\n\r\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\r\n .then(mediaLocations => {\r\n if (mediaLocations) {\r\n return Promise.all(mediaLocations.map(validateMediaLocaionAsync))\r\n .then(pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n });\r\n }\r\n\r\n return [];\r\n }).catch(error => {\r\n actionContext.telemetry.error(error);\r\n\r\n return [];\r\n });\r\n}\r\n\r\nasync function validateMediaLocaionAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\r\n const imageData = {\r\n src: mediaLocation.Uri || '',\r\n altText: mediaLocation.AltText || ''\r\n };\r\n\r\n if (imageData.src === '') {\r\n return [imageData, false];\r\n }\r\n\r\n return new Promise<[IImageData, boolean]>((resolve) => {\r\n try {\r\n const http = new XMLHttpRequest();\r\n http.open('HEAD', mediaLocation.Uri!, true);\r\n\r\n http.onload = () => {\r\n resolve([imageData, http.status === 200 || http.status === 201]);\r\n };\r\n\r\n http.onerror = () => {\r\n resolve([imageData, false]);\r\n };\r\n\r\n http.send();\r\n } catch (e) {\r\n resolve([imageData, false]);\r\n }\r\n });\r\n}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Carousel, ICarouselProps } from '@msdyn365-commerce/components';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport * as React from 'react';\r\n\r\n// import {thumbnailsOrientation} from '@msdyn365-commerce-modules/media-gallery';\r\nimport { IComponentNodeProps, IModuleProps, INodeProps, ISingleSlideCarouselProps, KeyCodes, NodeTag, SingleSlideCarousel } from '@msdyn365-commerce-modules/utilities';\r\nimport { IImageData, IImageDimension, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ISmweMediaGalleryData } from './smwe-media-gallery.data';\r\nimport { ISmweMediaGalleryProps } from './smwe-media-gallery.props.autogenerated';\r\nimport { getValidProductImages } from './utils';\r\n\r\nexport interface IMediaGalleryState {\r\n animating: boolean;\r\n activeIndex: number;\r\n mediaGalleryItems: IImageData[] | undefined;\r\n}\r\n\r\nexport interface IMediaGalleryThumbnailsViewProps {\r\n ThumbnailsContainerProps: INodeProps;\r\n SingleSlideCarouselComponentProps: INodeProps;\r\n\r\n items?: IMediaGalleryThumbnailItemViewProps[];\r\n}\r\n\r\nexport interface IMediaGalleryThumbnailItemViewProps {\r\n ThumbnailItemContainerProps: INodeProps;\r\n\r\n Picture: React.ReactElement;\r\n}\r\n\r\nexport interface IMediaGalleryViewProps extends ISmweMediaGalleryProps {\r\n state: IMediaGalleryState;\r\n productUrl?: string;\r\n isProductLightBox?: boolean;\r\n MediaGallery: IModuleProps;\r\n CarouselProps: INodeProps;\r\n Thumbnails: IMediaGalleryThumbnailsViewProps;\r\n}\r\n\r\ninterface IImageSettingsViewports {\r\n xs: IImageDimension;\r\n sm?: IImageDimension | undefined;\r\n md?: IImageDimension | undefined;\r\n lg?: IImageDimension | undefined;\r\n xl?: IImageDimension | undefined;\r\n}\r\n\r\nconst SLRAppellation: string = 'SLR Appellation';\r\nconst TastingNotes: string = 'Tasting Notes';\r\n\r\n/**\r\n * Media gallery component\r\n */\r\nclass MediaGallery extends React.Component, IMediaGalleryState> {\r\n private readonly defaultGalleryImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=0&h=387&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=0&h=387&m=8', w: 0, h: 0 },\r\n md: { q: 'w=0&h=772&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=0&h=772&m=8', w: 0, h: 0 },\r\n },\r\n lazyload: true\r\n };\r\n\r\n private readonly defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\r\n lg: { q: 'w=100&m=8', w: 100, h: 0 },\r\n },\r\n lazyload: true\r\n };\r\n\r\n private noneWineProductImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=180&h=0&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=180&h=0&m=8', w: 0, h: 0 },\r\n md: { q: 'w=260&h=0&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=260&m=0', w: 0, h: 0 },\r\n xl: { q: 'w=260&m=0', w: 0, h: 0 },\r\n },\r\n lazyload: true\r\n };\r\n\r\n private isWineProduct: boolean = true;\r\n\r\n constructor(props: ISmweMediaGalleryProps) {\r\n super(props);\r\n this.state = { activeIndex: 0, animating: false, mediaGalleryItems: undefined };\r\n\r\n const modifiedImageSettings = props.config.galleryImageSettings;\r\n if(modifiedImageSettings) {\r\n if(modifiedImageSettings.viewports) {\r\n modifiedImageSettings.viewports = this.usePNGImageSetting(modifiedImageSettings.viewports);\r\n props.config.galleryImageSettings = modifiedImageSettings;\r\n }\r\n }\r\n }\r\n\r\n public usePNGImageSetting = (viewports: IImageSettingsViewports): IImageSettingsViewports => {\r\n const modifiedViewports = viewports;\r\n if(modifiedViewports?.xs?.q) {\r\n modifiedViewports.xs.q = modifiedViewports.xs.q.replace('f=jpg', 'f=png');\r\n }\r\n if(modifiedViewports?.sm?.q) {\r\n modifiedViewports.sm.q = modifiedViewports.sm.q.replace('f=jpg', 'f=png');\r\n }\r\n if(modifiedViewports?.md?.q) {\r\n modifiedViewports.md.q = modifiedViewports.md.q.replace('f=jpg', 'f=png');\r\n }\r\n if(modifiedViewports?.lg?.q) {\r\n modifiedViewports.lg.q = modifiedViewports.lg.q.replace('f=jpg', 'f=png');\r\n }\r\n if(modifiedViewports?.xl?.q) {\r\n modifiedViewports.xl.q = modifiedViewports.xl.q.replace('f=jpg', 'f=png');\r\n }\r\n\r\n return modifiedViewports;\r\n };\r\n\r\n public async componentDidMount(): Promise {\r\n const isGiftCard = this.props.data.product && this.props.data.product.result ? this.props.data.product.result.ItemId?.toLowerCase() === 'giftcard' : false;\r\n const giftCardImage: IImageData = {src: this.props.context.app.config.giftCardImage,altText:\"Gift Card\" || ''};\r\n reaction(\r\n () => this.props.data.product.result ? this.props.data.product.result.RecordId : null,\r\n async () => {\r\n if (this.props.data.product.result) {\r\n if (isGiftCard && this.props.context.app.config.giftCardImage) {\r\n this.setState({\r\n mediaGalleryItems: [giftCardImage]\r\n });\r\n } else {\r\n this.setState({\r\n mediaGalleryItems: await getValidProductImages(this.props.data.product.result.RecordId, +this.props.context.request.apiSettings.channelId, this.props.context.actionContext)\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n mediaGalleryItems: []\r\n });\r\n }\r\n }\r\n );\r\n\r\n if (this.props.data.product.result) {\r\n if (isGiftCard && this.props.context.app.config.giftCardImage) {\r\n this.setState({\r\n mediaGalleryItems: [giftCardImage]\r\n });\r\n } else {\r\n this.setState({\r\n mediaGalleryItems: await getValidProductImages(this.props.data.product.result.RecordId, +this.props.context.request.apiSettings.channelId, this.props.context.actionContext)\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n mediaGalleryItems: []\r\n });\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n data: {\r\n product: {\r\n result: product\r\n }\r\n },\r\n id,\r\n config,\r\n resources\r\n } = this.props;\r\n const data: ISmweMediaGalleryData = this.props.data;\r\n const wineAttributes = this.props.data.productSpecificationData.result && this.props.data.productSpecificationData.result.filter(\r\n attribute => attribute.Name && (attribute.Name.toUpperCase() === SLRAppellation.toUpperCase() || attribute.Name.toUpperCase() === TastingNotes.toUpperCase())\r\n );\r\n const isWineProduct = !!(wineAttributes && wineAttributes.map(attr => attr.TextValue).filter(value => value).length);\r\n this.isWineProduct = isWineProduct;\r\n\r\n if (!data) {\r\n throw new Error('[MediaGallery] Data items returned null or undefined');\r\n }\r\n\r\n let mediaGalleryItems = this.state.mediaGalleryItems;\r\n const { className, showPaginationTooltip } = config;\r\n\r\n if (!mediaGalleryItems && product) {\r\n mediaGalleryItems = [\r\n this._mapProductToImageData(product)\r\n ];\r\n }\r\n\r\n const isVertical: boolean = (config.thumbnailsOrientation === 'vertical');\r\n\r\n let productUrl;\r\n if (data.product && data.product.status === 'SUCCESS') {\r\n if (product) {\r\n productUrl = getProductUrlSync(product, this.props.context.actionContext, undefined);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: no-typeof-undefined\r\n const isProductLightbox = (typeof window !== 'undefined') && (window.location !== window.parent.location);\r\n\r\n const viewProps: IMediaGalleryViewProps = {\r\n ...(this.props as ISmweMediaGalleryProps),\r\n state: this.state,\r\n productUrl,\r\n isProductLightBox: isProductLightbox,\r\n MediaGallery: {\r\n moduleProps: this.props,\r\n className: classnames('ms-media-gallery', className, 'overflow-hidden',\r\n isVertical ? 'row' : 'col',\r\n isVertical ? 'media-gallery-vertical' : 'media-gallery-horizontal')\r\n },\r\n CarouselProps: {\r\n tag: Carousel,\r\n className: 'ms-media-gallery__carousel',\r\n items: mediaGalleryItems && mediaGalleryItems.map((item: IImageData, index: number) => this._getCarouselItem(item, index)),\r\n activeIndex: this.state.activeIndex,\r\n next: this.next,\r\n previous: this.previous,\r\n interval: false,\r\n directionTextPrev: resources.previousScreenshotFlipperText,\r\n directionTextNext: resources.nextScreenshotFlipperText,\r\n onIndicatorsClickHandler: this.goToIndex,\r\n showPaginationTooltip: showPaginationTooltip === true,\r\n handleOnExited: this.onExited,\r\n handleOnExiting: this.onExiting\r\n } as IComponentNodeProps,\r\n Thumbnails: {\r\n ThumbnailsContainerProps: {\r\n className: classnames('ms-media-gallery__thumbnails-container',\r\n isVertical ? 'h-100' : 'w-100',\r\n 'd-flex',\r\n 'justify-content-center',\r\n isVertical ? 'order-1' : 'row')\r\n },\r\n SingleSlideCarouselComponentProps: {\r\n tag: SingleSlideCarousel,\r\n className: 'ms-media-gallery__thumbnails',\r\n vertical: isVertical,\r\n flipperPrevLabel: resources.previousScreenshotFlipperText,\r\n flipperNextLabel: resources.nextScreenshotFlipperText,\r\n parentId: id,\r\n useTabList: true,\r\n } as IComponentNodeProps,\r\n items: mediaGalleryItems && mediaGalleryItems.map((item: IImageData, index: number) => this._getThumbnailItem(item, index, this.state.activeIndex)),\r\n }\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private onExiting = () => {\r\n this.setState({ animating: true });\r\n };\r\n\r\n private onExited = () => {\r\n this.setState({ animating: false });\r\n };\r\n\r\n private next = (): void => {\r\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\r\n this.goToIndex(nextIndex);\r\n };\r\n\r\n private previous = (): void => {\r\n const nextIndex = this.isFirstItem() ? (this.state.mediaGalleryItems ? this.state.mediaGalleryItems.length - 1 : 0) : this.state.activeIndex - 1;\r\n this.goToIndex(nextIndex);\r\n };\r\n\r\n private goToIndex = (index: number): void => {\r\n if (this.state.animating) {\r\n return;\r\n }\r\n this.setState({ activeIndex: index });\r\n };\r\n\r\n private _getCarouselItem = (image: IImageData, index: number): React.ReactNode => (\r\n \r\n );\r\n\r\n private _getThumbnailItem = (image: IImageData, index: number, modifiedActiveIndex: number): IMediaGalleryThumbnailItemViewProps => {\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: index,\r\n 'aria-label': image.altText,\r\n 'aria-selected': modifiedActiveIndex === index,\r\n 'aria-controls': `${this.props.id}__carousel-item__${index}`,\r\n onClick: this._generateOnThumbnailClick(index),\r\n onKeyDown: this._generateOnThumbnailKeyDown(index)\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n };\r\n\r\n private _generateOnThumbnailKeyDown = (index: number) => {\r\n return (event: React.KeyboardEvent) => {\r\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n }\r\n };\r\n };\r\n\r\n private _generateOnThumbnailClick = (index: number) => {\r\n return (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n\r\n this.goToIndex(index);\r\n };\r\n };\r\n\r\n private _mapProductToImageData(product: SimpleProduct): IImageData {\r\n return {\r\n src: product.PrimaryImageUrl || '',\r\n };\r\n }\r\n\r\n private isFirstItem = () => this.state.activeIndex === 0;\r\n\r\n private isLastItem = () => this.state.mediaGalleryItems && this.state.activeIndex === this.state.mediaGalleryItems.length - 1;\r\n}\r\n\r\nexport default MediaGallery;","import { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '@msdyn365-commerce-modules/media-gallery';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return (\r\n \r\n {Picture}\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\r\n\r\n return (\r\n \r\n \r\n {items && items.map(_renderThumbnailItem)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst MediaGalleryView: React.FC = props => {\r\n const {CarouselProps, Thumbnails, MediaGallery} = props;\r\n\r\n return (\r\n \r\n \r\n {_renderThumbnails(Thumbnails)}\r\n {props.slots && props.slots.productLink && props.slots.productLink.length > 0 ? props.slots.productLink : ''}\r\n \r\n );\r\n};\r\nexport default MediaGalleryView;","/* eslint-disable no-duplicate-imports */\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion, SearchSuggestionCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getSearchSuggestionsAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\n\r\n// @ts-ignore\r\nexport const enum SuggestionType {\r\n Category = 'ScopedCategory',\r\n Keyword = 'Keyword',\r\n Product = 'Product',\r\n None = 'None'\r\n}\r\n\r\n/**\r\n * Input class for auto suggest search input\r\n */\r\nexport class AutoSuggestInput implements IActionInput {\r\n public searchQuery?: string;\r\n public topResultsCount?: number;\r\n public suggestionType?: string;\r\n public hitPrefix?: string;\r\n public hitSuffix?: string;\r\n\r\n constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\r\n this.searchQuery = searchText;\r\n this.topResultsCount = top;\r\n this.suggestionType = suggestionType;\r\n this.hitPrefix = hitPrefix;\r\n this.hitSuffix = hitSuffix;\r\n }\r\n\r\n public getCacheKey = () => `AutoSuggestSearchSuggestions`;\r\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext) => {\r\n return new AutoSuggestInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a auto-suggest suggestions\r\n */\r\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\r\n // If no input is provided fail out\r\n if (!input || !input.searchQuery) {\r\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\r\n }\r\n\r\n const autosuggest: Autosuggestions = {};\r\n\r\n const autoSuggestPromises = [\r\n _getAutoSuggest(input, autosuggest, ctx),\r\n ];\r\n return Promise.all(autoSuggestPromises).then(() => {\r\n return autosuggest;\r\n });\r\n}\r\n\r\nasync function _getAutoSuggest(\r\n input: AutoSuggestInput,\r\n autosuggest: Autosuggestions,\r\n ctx: IActionContext\r\n): Promise {\r\n const searchCriteria: SearchSuggestionCriteria = {\r\n ProductSearchCriteria: {\r\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n },\r\n HitPrefix: input.hitPrefix,\r\n HitSuffix: input.hitSuffix,\r\n SuggestionType: input.suggestionType\r\n };\r\n\r\n const searchSuggestions = await getSearchSuggestionsAsync(\r\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\r\n searchCriteria\r\n );\r\n\r\n if (searchSuggestions && searchSuggestions.length > 0) {\r\n // Generate image url\r\n searchSuggestions.map(\r\n (item: SearchSuggestion) =>\r\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\r\n );\r\n\r\n autosuggest.AllSearchResults = searchSuggestions;\r\n } else {\r\n ctx.telemetry.error(`[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`);\r\n }\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\r\n action: >getSearchSuggestionsAction,\r\n input: createInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchKeywordSuggestProps {\r\n searchKeywordSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchKeywordViewProps {\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * KeywordSuggestionsComponent\r\n */\r\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitPrefix,\r\n hitSuffix\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\r\n });\r\n\r\n return { text: reactNodes };\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = ariaLabel;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, hitPrefix, hitSuffix, props) &&\r\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\r\n const { searchPageURL, searchQsp } = props;\r\n\r\n const formattedLink = (suggestion.Value as string)\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n const route = searchPageURL || '';\r\n return formattedLink && formattedLink.length > 0\r\n ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${formattedLink}`\r\n : route;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, INodeProps, IPayLoad, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchProductSuggestProps {\r\n searchProductSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetry: ITelemetry;\r\n moduleType: string;\r\n moduleId: string;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchProductViewProps {\r\n title: React.ReactNode;\r\n items: ISearchProductItemViewProps[];\r\n}\r\n\r\nexport interface ISearchProductItemViewProps {\r\n text: React.ReactNode;\r\n thumbnail: React.ReactNode;\r\n price: React.ReactNode;\r\n LiProduct: INodeProps;\r\n AProduct: INodeProps;\r\n id: string | undefined;\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\nlet telemetryContent: ITelemetryContent | undefined;\r\n\r\n/**\r\n *\r\n * ProductSuggestionsComponent\r\n */\r\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitSuffix,\r\n hitPrefix,\r\n autoSuggestProps: {\r\n context: { actionContext },\r\n resources: { productSuggestionHeading }\r\n },\r\n moduleType,\r\n moduleId\r\n } = props;\r\n const reactNodes: ISearchProductItemViewProps[] = [];\r\n telemetryContent = props.telemetryContent;\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\r\n });\r\n\r\n const titleNode = _renderTitle(productSuggestionHeading);\r\n\r\n return { title: titleNode, items: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (productSuggestionHeading: string) => {\r\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\r\n\r\n return
  • {productAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (\r\n item: SearchSuggestion,\r\n hitPrefix: string,\r\n hitSuffix: string,\r\n actionContext: IActionContext,\r\n props: ISearchProductSuggestProps,\r\n moduleType: string,\r\n moduleId: string\r\n): ISearchProductItemViewProps => {\r\n const altText =\r\n item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n return {\r\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\r\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\r\n price:\r\n item.Id &&\r\n item.Value3 &&\r\n item.Value3.Value &&\r\n item.Value3.Value.DecimalValue &&\r\n _renderPrice(item.Value3.Value.DecimalValue, item.Value3.Value.DecimalValue, moduleId, moduleType, props),\r\n LiProduct: _getLiWrapper(),\r\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext),\r\n id: item.Id\r\n };\r\n};\r\n\r\nconst _getLiWrapper = () => {\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'li' as NodeTag\r\n };\r\n};\r\n\r\nconst _getAWrapper = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n payLoad.contentAction.recid = item.Id;\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'a' as NodeTag,\r\n 'aria-label': ariaLabel,\r\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\r\n ...attribute\r\n };\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const formattedLink = (suggestion.Value as string).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n return suggestion.Value && suggestion.Id ?\r\n getProductPageUrlSync(formattedLink,suggestion.Id as unknown as number, actionContext, undefined) : '';\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\nconst _renderPrice = (adjustedPrice: number, basePrice: number, moduleId: string, moduleType: string, props: ISearchProductSuggestProps): JSX.Element | null => {\r\n const {\r\n autoSuggestProps: { context }\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\r\n const {\r\n autoSuggestProps: {\r\n context: {\r\n request: { gridSettings }\r\n },\r\n config: { imageSettings }\r\n }\r\n } = props;\r\n if(imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n\r\n if (!suggestion || !suggestion.ImageUrl) {\r\n props.telemetry.error('Search suggestion content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=40&h=40&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=40&h=40&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=40&h=40&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchCategorySuggestProps {\r\n searchCategorySuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n searchRefiners: ProductRefiner[] | undefined;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchCategoryViewProps {\r\n title: React.ReactNode;\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * CategorySuggestionsComponent\r\n */\r\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\r\n const {\r\n suggestions,\r\n searchText,\r\n autoSuggestProps: {\r\n resources: { categorySuggestionHeading }\r\n }\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, props));\r\n });\r\n\r\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\r\n\r\n return { title: titleNode, text: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\r\n const categoryAutoSuggestionHeading = categorySuggestionHeading\r\n ? format(categorySuggestionHeading, searchText)\r\n : `Search \"${searchText}\" in categories`;\r\n\r\n return
  • {categoryAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\r\n const { searchText, hitPrefix, hitSuffix } = props;\r\n\r\n const splitValue = item.Value && item.Value.split('|').pop();\r\n const ariaLabel = splitValue\r\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\r\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = item.Value;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, searchText, props) && _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\r\n};\r\n\r\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n const { searchPageURL, searchQsp, searchRefiners } = props;\r\n\r\n const route = searchPageURL || '';\r\n const urlPath = `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${searchText}`;\r\n const categoryRefiners =\r\n searchRefiners &&\r\n searchRefiners.find(refiners => {\r\n return refiners.KeyName === 'Category';\r\n });\r\n const refiner =\r\n categoryRefiners &&\r\n categoryRefiners.Values &&\r\n categoryRefiners.Values.find(item => {\r\n return item.RefinerRecordId === parseInt(id, 10);\r\n });\r\n\r\n const encodedRefiner = refiner && encodeURIComponent(JSON.stringify(compressRefiners([refiner])));\r\n\r\n return encodedRefiner ? `${urlPath}&refiners=${encodedRefiner}` : urlPath;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n let formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n formattedText = formattedText.split('|').pop() || '';\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\r\n// or move this code to a common place\r\nconst compressedRefinerKeys = ['DataTypeValue', 'LeftValueBoundString', 'RefinerRecordId', 'RefinerSourceValue', 'RightValueBoundString', 'UnitText'];\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs\r\n * @param refiners The uncompressed refiners\r\n */\r\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach((refiner) => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach((refinerKey) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISearchFormProps {\r\n hideSearchLabel: boolean | undefined;\r\n isSearchFormExpanded: boolean | undefined;\r\n disableSubmitSearch: boolean | undefined;\r\n searchTextInput: React.RefObject;\r\n maxChars: number;\r\n searchQsp: string;\r\n searchPlaceholder: string;\r\n query: string;\r\n ariaLabelCancel: string;\r\n ariaLabelSearch: string;\r\n ariaLabelSubmit: string;\r\n handleCancelSearchChange(): void;\r\n handleInputChange(query: string): void;\r\n}\r\n\r\nexport interface ISearchFormViewProps {\r\n label: React.ReactNode;\r\n input: React.ReactNode;\r\n submitBtn: React.ReactNode;\r\n cancelBtn: React.ReactNode;\r\n\r\n}\r\n\r\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\r\n const {\r\n searchQsp,\r\n searchPlaceholder,\r\n hideSearchLabel,\r\n isSearchFormExpanded,\r\n searchTextInput,\r\n handleInputChange,\r\n maxChars,\r\n disableSubmitSearch,\r\n handleCancelSearchChange,\r\n query,\r\n ariaLabelCancel,\r\n ariaLabelSearch,\r\n ariaLabelSubmit\r\n } = props;\r\n\r\n const onInputChange = (e: React.ChangeEvent): void => {\r\n handleInputChange(e.target.value || '');\r\n };\r\n\r\n const labelNode = ;\r\n\r\n const inputNode = !hideSearchLabel ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const submitBtnNode = !disableSubmitSearch && (\r\n \r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport classnames from 'classnames';\r\nimport { debounce } from 'lodash';\r\nimport * as React from 'react';\r\n\r\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\r\nimport {\r\n CategorySuggestionsComponent,\r\n FormComponent,\r\n ISearchCategoryViewProps,\r\n ISearchKeywordViewProps,\r\n ISearchProductViewProps,\r\n KeywordSuggestionsComponent,\r\n LabelComponent,\r\n ProductSuggestionsComponent\r\n} from './components';\r\nimport { ISmweSearchData } from './smwe-search.data';\r\nimport { ISmweSearchProps, ISuggestionTypeCriterionData } from './smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchState {\r\n isSearchFormExpanded: boolean;\r\n searchText: string;\r\n searchKeywordSuggestClass: string;\r\n searchProductSuggestClass: string;\r\n searchCategorySuggestClass: string;\r\n suggestions: Autosuggestions | undefined;\r\n searchRefiners?: ProductRefiner[] | undefined;\r\n autoSuggestAriaLabel: string;\r\n isInitialState: boolean;\r\n}\r\n\r\nexport interface ISearchViewProps extends ISmweSearchProps {\r\n Search: IModuleProps;\r\n AutoSuggestAriaLabel: INodeProps;\r\n AutoSuggestAriaLabelText: string;\r\n searchText: string;\r\n AutoSuggest: INodeProps;\r\n KeywordSuggest: INodeProps;\r\n ProductSuggest: INodeProps;\r\n CategorySuggest: INodeProps;\r\n SearchForm: INodeProps;\r\n FormWrapper: INodeProps;\r\n UlKeyword: INodeProps;\r\n UlProduct: INodeProps;\r\n UlCategory: INodeProps;\r\n label: React.ReactNode;\r\n form: React.ReactNode;\r\n autosuggestKeyword?: ISearchKeywordViewProps;\r\n autosuggestProduct?: ISearchProductViewProps;\r\n autosuggestCategory?: ISearchCategoryViewProps;\r\n callbacks: {\r\n handleCancelSearchChange(): void;\r\n };\r\n isSearchFormExpanded: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Search module\r\n * @extends {React.Component, ISearchState>}\r\n */\r\nclass Search extends React.Component, ISearchState> {\r\n private searchTextInput: React.RefObject;\r\n private searchCollapsedLabel: React.RefObject;\r\n private formReference: React.RefObject;\r\n private maxChars: number;\r\n private inputSuggestionType?: ISuggestionTypeCriterionData[];\r\n private topResultsCount?: number;\r\n private hitPrefix: string = '{';\r\n private hitSuffix: string = '}';\r\n private waitTime: number = 500;\r\n private autoSuggestResultScreenReaderDiv: React.RefObject;\r\n private autoSuggestResultDiv: React.RefObject;\r\n private searchFormClass: string;\r\n private searchLabelClass: string;\r\n private telemetryContent: ITelemetryContent;\r\n // @ts-ignore\r\n private cancellabelDebounce: debounce;\r\n\r\n constructor(props: ISmweSearchProps) {\r\n super(props);\r\n this.searchTextInput = React.createRef();\r\n this.searchCollapsedLabel = React.createRef();\r\n this.autoSuggestResultScreenReaderDiv = React.createRef();\r\n this.autoSuggestResultDiv = React.createRef();\r\n this.formReference = React.createRef();\r\n this.state = {\r\n isSearchFormExpanded: false,\r\n searchText: '',\r\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\r\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\r\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\r\n suggestions: undefined,\r\n searchRefiners: undefined,\r\n autoSuggestAriaLabel: '',\r\n isInitialState: true\r\n };\r\n this.maxChars =\r\n (this.props.context &&\r\n this.props.context.app &&\r\n this.props.context.app.config &&\r\n this.props.context.app.config.searchInputMaxLength) ||\r\n 50;\r\n this.inputSuggestionType = this.props.config && this.props.config.suggestionTypeCriterion;\r\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\r\n this.searchFormClass = 'ms-search__form';\r\n this.searchLabelClass = 'ms-search__label';\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\r\n window && window.addEventListener('keyup', this._keyup);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\r\n window && window.removeEventListener('keyup', this._keyup, false);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n const {\r\n config: { hideSearchLabel }\r\n } = this.props;\r\n const { isSearchFormExpanded, isInitialState } = this.state;\r\n\r\n if (!this.props.context.request.params.isEditor) {\r\n if (!hideSearchLabel && isSearchFormExpanded) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else if (!isInitialState) {\r\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\r\n }\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity max-func-body-length\r\n public render(): JSX.Element {\r\n const {\r\n context,\r\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel},\r\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, className = '' }\r\n } = this.props;\r\n\r\n const {\r\n isSearchFormExpanded,\r\n searchText,\r\n searchKeywordSuggestClass,\r\n searchProductSuggestClass,\r\n searchCategorySuggestClass,\r\n suggestions,\r\n searchRefiners\r\n } = this.state;\r\n\r\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\r\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\r\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\r\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\r\n\r\n const keywordSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(\r\n i => i.SuggestionType === SuggestionType.Keyword || i.SuggestionType === SuggestionType.None\r\n );\r\n const productSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Product);\r\n const categorySuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Category);\r\n\r\n const viewProps: ISearchViewProps = {\r\n ...(this.props as ISmweSearchProps),\r\n\r\n Search: {\r\n moduleProps: this.props,\r\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`,\r\n },\r\n AutoSuggestAriaLabel: {\r\n tag: 'div',\r\n className: 'msc-autoSuggest__screen-reader',\r\n 'aria-live': 'assertive',\r\n ref: this.autoSuggestResultScreenReaderDiv\r\n },\r\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\r\n searchText: this.state.searchText,\r\n AutoSuggest: {\r\n ref: this.autoSuggestResultDiv,\r\n className: 'ms-search__autoSuggest'\r\n },\r\n KeywordSuggest: {\r\n className: searchKeywordSuggestClass\r\n },\r\n ProductSuggest: {\r\n className: searchProductSuggestClass\r\n },\r\n CategorySuggest: {\r\n className: searchCategorySuggestClass\r\n },\r\n SearchForm: {\r\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`,id:'SearchFormModal'\r\n },\r\n FormWrapper: {\r\n tag: 'form',\r\n ref: this.formReference,\r\n className: 'ms-search__searchForm',\r\n 'aria-label': 'Search',\r\n name: 'searchForm',\r\n role: 'search',\r\n action: searchURL,\r\n autoComplete: 'off',\r\n onSubmit: this._handleSubmit\r\n },\r\n UlKeyword: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__keywordResults-items', className)\r\n },\r\n UlProduct: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__productResults-items', className)\r\n },\r\n UlCategory: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__categoryResults-items', className)\r\n },\r\n label:LabelComponent({\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\r\n searchtext: searchtext,\r\n searchLabelArialLabel: searchLabelArialLabel,\r\n searchCollapsedLabel: this.searchCollapsedLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n telemetryContent: this.telemetryContent\r\n }),\r\n form: FormComponent({\r\n ariaLabelCancel: cancelBtnAriaLabel,\r\n ariaLabelSearch: searchBtnAriaLabel,\r\n ariaLabelSubmit: submitBtnAriaLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n searchTextInput: this.searchTextInput,\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n disableSubmitSearch: disableSubmitSearch,\r\n handleInputChange: this._handleInputChange,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n maxChars: this.maxChars,\r\n searchQsp: searchQsp,\r\n searchPlaceholder: searchPlaceholder,\r\n query: searchText\r\n }),\r\n autosuggestKeyword:\r\n searchText && searchText.length > 0 && keywordSuggestions && keywordSuggestions.length > 0\r\n ? KeywordSuggestionsComponent({\r\n searchKeywordSuggestClass: searchKeywordSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: keywordSuggestions,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestProduct:\r\n searchText && searchText.length > 0 && productSuggestions && productSuggestions.length > 0\r\n ? ProductSuggestionsComponent({\r\n searchProductSuggestClass: searchProductSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: productSuggestions,\r\n telemetry: this.props.telemetry,\r\n moduleType: this.props.typeName,\r\n moduleId: this.props.id,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestCategory:\r\n searchText && searchText.length > 0 && categorySuggestions && categorySuggestions.length > 0\r\n ? CategorySuggestionsComponent({\r\n searchCategorySuggestClass: searchCategorySuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: categorySuggestions,\r\n searchRefiners: searchRefiners,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n callbacks: {\r\n handleCancelSearchChange: this._handleCancelSearchChange\r\n },\r\n isSearchFormExpanded: this.state.isSearchFormExpanded\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _focusOutTarget = (e: any): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n e.target.closest('.ms-search') === null\r\n ) {\r\n this._clearAutoSuggestState();\r\n }\r\n };\r\n\r\n private _keyup = (e: KeyboardEvent): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\r\n this._clearAutoSuggestState();\r\n } else if(this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\r\n if(this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n }\r\n\r\n if (!((this.formReference.current && this.formReference.current.contains(e.target as unknown as Node)) ||\r\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains(e.target as unknown as Node)))) {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n if(this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n }\r\n };\r\n\r\n private _clearAutoSuggestState = (): void => {\r\n const {\r\n context: { actionContext },\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\r\n searchState.searchText = '';\r\n searchState.defaultBasicSearchUrl = '';\r\n searchState.searchQueryStringParameter = '';\r\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\r\n this.searchTextInput.current.value = '';\r\n }\r\n\r\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\r\n };\r\n\r\n private _handleInputChange = (query: string): void => {\r\n if (!query || query.length < this.maxChars) {\r\n this.setState({ searchText: query });\r\n }\r\n\r\n if (this.cancellabelDebounce) {\r\n this.cancellabelDebounce.cancel();\r\n }\r\n\r\n const {\r\n telemetry,\r\n context,\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (context) {\r\n if (query && query.length > 0) {\r\n if (query.length > this.maxChars) {\r\n return;\r\n }\r\n\r\n this.cancellabelDebounce = debounce(() => {\r\n getSearchSuggestionsAction(\r\n new AutoSuggestInput(\r\n query,\r\n this.topResultsCount,\r\n this._getSuggestionType(this.inputSuggestionType),\r\n this.hitPrefix,\r\n this.hitSuffix\r\n ),\r\n context.actionContext\r\n )\r\n .then(results => {\r\n this._getSearchRefiners(query)\r\n .then(refiners => {\r\n this.setState({ suggestions: results, searchRefiners: refiners,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results) });\r\n })\r\n .catch(error => {\r\n this.setState({ suggestions: results, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results) });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get refiners results');\r\n });\r\n })\r\n .catch(error => {\r\n this.setState({ suggestions: undefined, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get auto suggest results');\r\n });\r\n }, this.waitTime);\r\n\r\n setTimeout(() => {\r\n this.cancellabelDebounce();\r\n }, 0);\r\n\r\n searchState.searchText = query;\r\n } else {\r\n this.setState({ suggestions: undefined, searchRefiners: undefined });\r\n searchState.searchText = '';\r\n }\r\n context.actionContext.update(createSearchStateInput(searchState), searchState);\r\n }\r\n };\r\n\r\n private _getSuggestionType = (suggestionTypes?: ISuggestionTypeCriterionData[]): string => {\r\n if (suggestionTypes && suggestionTypes.length > 0) {\r\n const distinctSuggestionTypes: string[] = [];\r\n suggestionTypes && suggestionTypes.forEach((suggestionTypeItem, index) => {\r\n suggestionTypeItem.SuggestionType && distinctSuggestionTypes.push(suggestionTypeItem.SuggestionType.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType.slice(1));\r\n });\r\n return distinctSuggestionTypes.join(',');\r\n }\r\n return 'Keyword, Product, ScopedCategory';\r\n };\r\n\r\n private async _getSearchRefiners(searchText: string): Promise {\r\n const { actionContext: ctx } = this.props.context;\r\n return getProductSearchRefinersAsync(\r\n { callerContext: ctx },\r\n {\r\n SearchCondition: searchText,\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n }\r\n );\r\n }\r\n\r\n private _handleSubmit = (\r\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\r\n ): void => {\r\n const {\r\n config: { disableSubmitSearch },\r\n context: {\r\n actionContext,\r\n app: {\r\n config: { searchQueryStringParameter }\r\n }\r\n }\r\n } = this.props;\r\n\r\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\r\n e.preventDefault();\r\n\r\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else {\r\n const searchQsp = searchQueryStringParameter || 'q';\r\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\r\n document.location.href = searchURL;\r\n }\r\n };\r\n\r\n private _handleCancelSearchChange = (): void => {\r\n const { isSearchFormExpanded, suggestions } = this.state;\r\n\r\n if (!isSearchFormExpanded) {\r\n this.setState({\r\n isSearchFormExpanded: true,\r\n searchText: '',\r\n isInitialState: false\r\n });\r\n } else {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n };\r\n\r\n private _appendQueryParams = (route: string, query: string, qsp: string): string => {\r\n if (route && route.length > 0) {\r\n return query && query.length > 0 ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${qsp}=${query}` : route;\r\n }\r\n return '';\r\n };\r\n\r\n private _setAutoSuggestResultCount = (result?: Autosuggestions) => {\r\n const itemCount = result?.AllSearchResults?.filter(i=>i.SuggestionType === SuggestionType.Product);\r\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\r\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\r\n const suggestResultString = `${this.props.resources.autoSuggestFoundMessage} with ${itemCount?.length} results`;\r\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\r\n ariaLiveRegion.innerText = result && (result.AllSearchResults && result.AllSearchResults.length > 0) ? suggestResultString : emptyResultString;\r\n ariaLiveRegion.setAttribute('aria-live','assertive');\r\n return ariaLiveRegion.innerText;\r\n } else {\r\n return '';\r\n }\r\n };\r\n}\r\n\r\nexport default Search;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\r\nimport { ISearchViewProps } from './smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","import { ICarouselViewProps } from '@msdyn365-commerce-modules/carousel/dist/types/modules/carousel/carousel';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ICarouselProps } from '../definition-extensions/carousel.ext.props.autogenerated';\r\n\r\nconst CarouselView: React.FC> = props => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default CarouselView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { ICarouselViewProps } from '@msdyn365-commerce-modules/carousel/src/modules/carousel/./carousel';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nconst CarouselView: React.FC = props => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default CarouselView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n form,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n React.useEffect(() => {\r\n document.body.addEventListener('keydown', (e: any) => handleKeyDown(e));\r\n });\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper, props)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst handleKeyDown = (e: React.KeyboardEvent): void => {\r\n const showClass = document.getElementsByClassName('ms-search__form bx-show');\r\n if (showClass) {\r\n //Fetch node list from which required elements could be grabbed as needed.\r\n const focusable = document.getElementById('SearchFormModal');\r\n const elements = focusable?.querySelectorAll('input, a, select, textarea, li, [tabindex]:not([tabindex=\"-1\"]), button') as NodeListOf;\r\n const firstFocusable = elements[0];\r\n const lastFocusable = elements[elements.length - 1];\r\n\r\n if (e.ctrlKey || e.altKey) {\r\n return;\r\n }\r\n\r\n const keys = {\r\n 9: () => { //9 = TAB\r\n if (e.shiftKey && e.target === firstFocusable) {\r\n lastFocusable.focus();\r\n console.log('Last Focusable');\r\n e.preventDefault();\r\n }\r\n\r\n if (e.target === lastFocusable) {\r\n firstFocusable.focus();\r\n console.log('First Focusable');\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n if (keys[e.keyCode]) {\r\n keys[e.keyCode]();\r\n }\r\n }\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps, props: ISearchViewProps) => {\r\n const {\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n } = props;\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n /* eslint-disable react/no-unknown-property */\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { ICarouselViewProps } from '@msdyn365-commerce-modules/carousel/src/modules/carousel/./carousel';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nconst CarouselView: React.FC = props => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default CarouselView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { ProductDimensionsMatrix } from '@msdyn365-commerce/components';\nimport { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ICoreContext, getCatalogId } from '@msdyn365-commerce/core-internal';\nimport { ArrayExtensions, IDimensionsApp, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, Collapse, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { IBulkPurchaseData } from './bulk-purchase.data';\nimport { IBulkPurchaseProps } from './bulk-purchase.props.autogenerated';\n\n/**\n * Additional optional props for the bulk purchase.\n */\nexport interface IBulkPurchaseExtendedProps extends IBulkPurchaseProps {\n productDimensions?: IProductDimensionsWithAvailabilitiesFull[];\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseViewProps extends IBulkPurchaseProps {\n container: IModuleProps;\n content: React.ReactElement;\n}\n\n/**\n * BulkPurchase state message Interface.\n */\nexport interface IBulkPurchaseStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseState {\n isExpanded: boolean;\n stateMessage?: IBulkPurchaseStateMessage;\n}\n\n/**\n * Bulk-purchase module.\n */\nexport class BulkPurchase extends React.PureComponent {\n public static readonly className = 'ms-bulk-purchase';\n private readonly _errorCssClass: string = 'danger';\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n private readonly collapseRef: React.RefObject = React.createRef();\n\n public constructor(props: IBulkPurchaseExtendedProps) {\n super(props);\n\n this.state = {\n isExpanded: false\n };\n }\n\n public render(): React.ReactElement | null {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const hasDimensionsInData = ArrayExtensions.hasElements(this.props.data.productDimensions?.result);\n if (!hasDimensionsInProps && !hasDimensionsInData) {\n return null;\n }\n\n const viewProps: IBulkPurchaseViewProps = {\n ...this.props,\n container: {\n moduleProps: this.props,\n className: classnames(BulkPurchase.className, this.props.config.className)\n },\n content: this._renderCollapseContent(`${BulkPurchase.className}__content`)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderCollapseContent(className: string): React.ReactElement {\n return (\n
    \n {this._renderCollapseButton(`${className}__collapse-button`)}\n {this._renderCollapse(`${className}__collapse`)}\n
    \n );\n }\n\n private _renderCollapseButton(className: string): React.ReactElement {\n return (\n \n {this.props.resources.bulkPurchaseHeaderTitle}\n \n );\n }\n\n /**\n *This function is being used to handel variant change dropdown.\n */\n private _dimensionDropDownChange = () => {\n this.collapseRef.current?.reEvaluateHeight();\n };\n\n private _renderCollapse(className: string): React.ReactElement {\n return (\n \n {this._renderMainContent(`${className}__main-content`)}\n \n );\n }\n\n private _renderMainContent(className: string): React.ReactElement {\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n\n const userMessageNode = this.state.stateMessage ? (\n \n \n {this.state.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return (\n
    \n {!isMobileDevice && (\n
    \n \n
    \n )}\n {userMessageNode}\n {this._renderMatrix(`${className}__matrix-container`)}\n
    \n );\n }\n\n private _renderMatrix(className: string): React.ReactElement {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState?.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n return (\n }\n data={{\n dimensions: hasDimensionsInProps ? this.props.productDimensions! : this.props.data.productDimensions!.result!,\n orderTemplates: this.props.data.orderTemplates?.result,\n customerInformation: this.props.data.customerInformation?.result\n }}\n resources={this.props.resources}\n dimensionOnChange={this._dimensionDropDownChange}\n onErrorMessage={this._onErrorMessage}\n isMultipleCatalogFeatureEnabledInHq={isMultipleCatalogsFeatureEnabled}\n catalogId={catalogId}\n />\n );\n }\n\n private _onErrorMessage = (errorMessage: string) => {\n this.setState({\n stateMessage: {\n messageText: errorMessage,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n });\n };\n\n /**\n * Callback which toggles collapse mode.\n */\n private readonly _toggleCollapse = () => {\n this.setState(state => ({\n isExpanded: !state.isExpanded\n }));\n };\n}\n\nexport default BulkPurchase;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBulkPurchaseViewProps } from './bulk-purchase';\n\n/**\n * Bulk purchase view.\n * @param props - Bulk purchase view props.\n * @returns React node with a module.\n */\nexport const BulkPurchaseViewComponent: React.FC = props => {\n return {props.content};\n};\n\nexport default BulkPurchaseViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
    \n {orgUnitName}\n
    \n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CartLineValidationResultsByLineId,\n OrgUnitLocation\n} from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n await this._setQuantityLimitsFeatureFlag();\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n const hasInvoiceLine = cart?.hasInvoiceLine;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const cartLines = this._getCartLines();\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.state.miniCartData.productAvailabilites ?? [],\n this.props.context.actionContext,\n this.state.miniCartData.products ?? [],\n emailDeliveryModeCode\n );\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\n flyoutTitle: {flyoutTitle},\n totalPrice:
    {priceString}
    \n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\n return;\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\n\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {props.checkoutBlockedDueToUnavailableFunds}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description }) => {\n if (!description) {\n return null;\n }\n\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

    {message}

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

    {title}

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

    {this.props.resources.loyaltyCoveredAmountText}

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

    \n {message}\n

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

    {invoiceSummaryTitle}

    ,\n lines: checkoutCart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: totalAmountLabel,\n invoiceLabel,\n cart,\n context,\n typeName,\n telemetry,\n id,\n checkoutState: checkout.result\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\ntype deliveryType = 'pickup' | 'ship' | 'email';\n\nexport interface IPickUpAtStore {\n PickUpAtStore: INodeProps;\n label: React.ReactNode;\n location: React.ReactNode;\n}\n\nexport interface IEmailDelivery {\n EmailDelivery: INodeProps;\n label: React.ReactNode;\n}\n\nexport interface ILineItem {\n LineId: string;\n LineItem: INodeProps;\n item?: React.ReactNode;\n pickUpAtStore?: IPickUpAtStore;\n emailDelivery?: IEmailDelivery;\n}\n\nexport interface ILineItemDeliveryGroup {\n LineItemDeliveryGroup: INodeProps;\n LineItemList: INodeProps;\n heading: React.ReactNode;\n lineItemWraper?: React.ReactNode;\n lineItemWraperIcon?: React.ReactNode;\n lineItems: ILineItem[];\n}\n\nexport interface ILineItems {\n LineItems: INodeProps;\n Header: INodeProps;\n heading: React.ReactNode;\n editLink: React.ReactNode;\n itemsForPickup?: ILineItemDeliveryGroup;\n itemsForShip?: ILineItemDeliveryGroup;\n itemsForEmail?: ILineItemDeliveryGroup;\n itemsGroupWithMulitplePickupMode?: ILineItemDeliveryGroup[];\n}\n\nexport const getLineItems = (input: ICheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n const emailDeliveryModeCode = get(input, 'context.request.channel.EmailDeliveryModeCode');\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const _getDeliveryLocation = (cartLine: CartLine): string => {\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\n return '';\n }\n\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\n });\n\n return locationMatch && locationMatch.OrgUnitName;\n };\n\n const _getProduct = (productId: number): SimpleProduct | undefined => {\n const products = get(input, 'data.products.result') || [];\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n };\n\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\n const {\n id,\n typeName,\n context,\n config: { imageSettings, showShippingChargesForLineItems },\n resources: {\n quantityDisplayString,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n productDimensionTypeAmount,\n configString,\n inputQuantityAriaLabel,\n discountStringText,\n shippingCharges\n },\n context: {\n request: { gridSettings }\n }\n } = input;\n const catalogs = input.data.catalogs?.result;\n if (!product) {\n return;\n }\n\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n const currencyCode = get(input, 'context.request.channel.Currency');\n return (\n \n );\n };\n\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\n const {\n resources: { pickUpAtStoreWithLocationText }\n } = input;\n\n return {\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\n label: {pickUpAtStoreWithLocationText},\n location:
    {pickupDeliveryLocation}
    \n };\n };\n\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\n const {\n resources: { emailDeliveryText }\n } = input;\n\n return {\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\n label: {emailDeliveryText}\n };\n };\n\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\n return items.map(cartLine => {\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const isPickUp = _getCartPickDeliveryMode(cartLine);\n const isEmailDelivery =\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n return {\n LineId: cartLine.LineId || '',\n LineItem: { className: 'ms-checkout__line-item' },\n item: _getLineItemComponent(cartLine),\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined,\n emailDelivery: isEmailDelivery ? _getEmailDeliveryComponents() : undefined\n };\n });\n };\n\n const _getCartPickDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode ===\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode === pickupDeliveryModeCode\n : false;\n };\n\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode !==\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode !== pickupDeliveryModeCode\n : false;\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? shippingCountCheckoutLineItem\n : type === 'pickup'\n ? inStorePickUpLabel\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _countItems = (items: CartLine[]): number => {\n return items.reduce((count, item) => {\n return count + (item.Quantity || 0);\n }, 0);\n };\n\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n if (type === 'ship') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? _getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n } else if (type === 'pickup') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? _getCartPickDeliveryMode(cartLine) : null\n );\n }\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\n };\n\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\n if ((pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) && (type === 'pickup' || type === 'email')) {\n return;\n }\n\n const items = _filterItemsByDiliveryType(type);\n\n if (items.length === 0) {\n return undefined;\n }\n\n const count = _countItems(items);\n const title = _getGroupTitleComponent(count, type);\n\n return {\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n heading:
    {title}
    ,\n lineItems: _getLineItemsComponents(items)\n };\n };\n\n const _getLineItems = (): ILineItems | undefined => {\n const {\n context,\n config: { lineItemsHeading },\n data: { products },\n resources: { editCartText }\n } = input;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.EditCart);\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const groupClass = retailMultiplePickUpOptionEnabled ? ' multiple-pickup-enabled' : '';\n if (!cart || !cart.CartLines || cart.CartLines.length === 0 || !products) {\n return undefined;\n }\n\n return {\n LineItems: { className: `ms-checkout__line-items${groupClass}` },\n Header: { className: 'ms-checkout__line-items-header' },\n heading: lineItemsHeading && lineItemsHeading.text && (\n \n ),\n editLink: (\n \n {editCartText}\n \n ),\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\n itemsForShip: _getLineItemsByDeliveryType('ship'),\n itemsForEmail: _getLineItemsByDeliveryType('email'),\n itemsGroupWithMulitplePickupMode: retailMultiplePickUpOptionEnabled\n ? _getLineItemsByDeliveryTypeWithMulitplePickupMode()\n : undefined\n };\n };\n\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { lineItemsHeading }\n } = input;\n if (lineItemsHeading) {\n lineItemsHeading.text = event.target.value;\n }\n };\n\n const _getGroupTitleComponentWithMultiplePickUp = (\n count: number,\n type: deliveryType,\n deliveryMode?: string,\n fulFillmentStoreId?: string\n ): string => {\n const {\n resources: { itemLabel, itemsLabel }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n let pickupDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n pickupDeliveryModeDesc = pickupDeliveryModeDesc\n ? pickupDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === deliveryMode)?.Description!;\n });\n\n const pickupTitle: string = `${pickupDeliveryModeDesc}, ${fulFillmentStoreId}`;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? `(${count} ${suffix})`\n : type === 'pickup'\n ? `${pickupTitle} (${count} ${suffix})`\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _filterItemsByMultiplePickupMode = (): CartLine[][] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cart.CartLines);\n const cartLinesGroup: CartLine[] = [];\n const cartLinesGrp: CartLine[][] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryMode, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryMode] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n cartLinesGrp.push(cartLine);\n });\n });\n\n return cartLinesGrp;\n };\n\n const _getLineItemsByDeliveryTypeWithMulitplePickupMode = (): ILineItemDeliveryGroup[] | undefined => {\n if (pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) {\n return;\n }\n\n const {\n resources: { multiplePickUpLabel, shippingLable }\n } = input;\n\n const items = _filterItemsByMultiplePickupMode();\n\n if (items.length === 0) {\n return undefined;\n }\n\n const lineItemDeliveryGroup: ILineItemDeliveryGroup[] = [];\n items.map(item => {\n const count = _countItems(item);\n const cartLine = item[0];\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const type: deliveryType =\n cartLine.FulfillmentStoreId && cartLine.DeliveryMode\n ? 'pickup'\n : cartLine.FulfillmentStoreId === '' &&\n cartLine.DeliveryMode === emailDeliveryModeCode &&\n !StringExtensions.isNullOrEmpty(emailDeliveryModeCode)\n ? 'email'\n : 'ship';\n const title = _getGroupTitleComponentWithMultiplePickUp(count, type, cartLine.DeliveryMode, pickupDeliveryLocation);\n const groupTitle = type === 'pickup' ? multiplePickUpLabel : type === 'ship' ? shippingLable : 'email';\n const iconClass = `ms-checkout__line-items-group-title-multiple-pickup-${type}icon`;\n lineItemDeliveryGroup.push({\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group multiple-pickup', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n lineItemWraperIcon:
    ,\n lineItemWraper:
    {groupTitle}
    ,\n heading:
    {title}
    ,\n lineItems: _getLineItemsComponents(item)\n });\n });\n\n return lineItemDeliveryGroup;\n };\n\n return _getLineItems();\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IOrderSummary {\n orderSummaryProps: INodeProps;\n heading?: React.ReactNode;\n lines?: IOrderSummaryLines;\n}\nexport const getOrderSummary = (input: ICheckoutProps): IOrderSummary => {\n const {\n config: { orderSummaryHeading },\n data: { checkout },\n resources: {\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n otherCharges,\n customerAccountLabel\n },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutState = get(checkout, 'result');\n const cart = get(checkout, 'result.checkoutCart.cart');\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\n const channelConfiguration = context.request.channel!;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = context.request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { orderSummaryHeading }\n } = input;\n if (orderSummaryHeading) {\n orderSummaryHeading.text = event.target.value;\n }\n };\n\n return {\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\n heading: orderSummaryHeading && orderSummaryHeading.text && (\n \n ),\n lines: showLineItems\n ? OrderSummary({\n checkoutState,\n cart,\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n context,\n typeName,\n id,\n channelConfiguration,\n telemetry,\n otherChargeLabel: otherCharges,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- existing property.\n isTaxIncludedInPrice: cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled,\n customerAccountLabel\n })\n : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport * as React from 'react';\nimport { focusOnCheckoutError, setCheckoutErrorFocus } from '../../../checkout-errors';\n\nexport interface ICheckoutGuidedCardProps {\n id?: string;\n step: number;\n title?: HeadingType;\n disabled?: boolean; // Module is not available\n isActive?: boolean; // Step === currentStep\n isVisted?: boolean; // Step < currentStep\n isExpanded?: boolean;\n isReady?: boolean;\n isPending?: boolean;\n isUpdating?: boolean;\n isSubmitting?: boolean;\n isCancelAllowed?: boolean;\n isMobile?: boolean;\n hasInitialized?: boolean;\n hasControlGroup?: boolean;\n shouldFocus?: boolean;\n children: React.ReactNode;\n moduleState?: IModuleStateManager;\n actionContext?: IActionContext;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n telemetryContent?: ITelemetryContent;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n onNext(): void;\n}\n\n/**\n *\n * CheckoutGuidedCard component.\n * @extends {React.Component}\n */\nclass CheckoutGuidedCard extends React.PureComponent {\n private readonly editButtonRef: React.RefObject = React.createRef();\n\n private readonly formCardRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: ICheckoutGuidedCardProps) {\n super(props);\n this.payLoad = getPayloadObject('click', props.telemetryContent!, '');\n }\n\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\n /**\n * Move to next step when current step is ready.\n */\n const { isActive, isReady, onNext, isVisted, onEdit, shouldFocus, children, moduleState, actionContext } = this.props;\n\n // Move to next step after completing the current step\n if (isActive && isReady) {\n onNext();\n }\n\n // Set the focus to Edit button once edit button appear\n // (It happens when current step switch to isReady status)\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\n const canEdit = isReady && isVisted && !!onEdit;\n if (!prevCanEdit && canEdit) {\n this.focusOnEditButton();\n this.scrollToTitle();\n }\n\n // Set the focus to the first focusable element\n // (It happens when current step switch to isUpdating status)\n if (prevProps.isReady && !isReady) {\n this.focusOnFirstFocusableElement();\n }\n\n // Set the focus for the checkout error\n if (shouldFocus && actionContext) {\n const childrenModules = this._getModules(children);\n\n // Set the focus for the module within the checkout section container\n if (childrenModules.length > 0) {\n for (const childModule of childrenModules) {\n const childId = this._getId(childModule);\n const childState = moduleState?.getModule(childId);\n\n if (childState?.hasError) {\n setCheckoutErrorFocus(childId, actionContext);\n return;\n }\n }\n } else {\n focusOnCheckoutError(this.formCardRef, actionContext);\n }\n }\n }\n\n public render(): JSX.Element | null {\n const {\n title,\n disabled,\n isExpanded,\n isActive,\n isVisted,\n children,\n isReady,\n isPending,\n isUpdating,\n hasInitialized,\n hasControlGroup,\n onEdit,\n resource\n } = this.props;\n const { changeBtnLabel } = resource;\n\n this.payLoad.contentAction.etext = TelemetryConstant.CheckoutChange;\n const changeBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\n\n return (\n \n
    \n {this.getTitle()}\n\n {canEdit && (\n \n {changeBtnLabel}\n \n )}\n
    \n\n \n
    {children}
    \n\n {this.renderFooder()}\n
    \n
    \n );\n }\n\n private readonly renderFooder = (): JSX.Element | null => {\n const { isVisted, isReady, isSubmitting, isCancelAllowed, hasControlGroup, onCancel, onSubmit, resource } = this.props;\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\n\n const canSubmit = !isReady && onSubmit;\n const canCancel = !isReady && isVisted && isCancelAllowed && onCancel;\n\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\n return null;\n }\n\n this.payLoad.contentAction.etext = isVisted ? TelemetryConstant.Save : TelemetryConstant.SaveContinue;\n const saveBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
    \n {canSubmit && (\n \n {isVisted && isCancelAllowed ? saveBtnLabel : saveAndContinueBtnLabel}\n \n )}\n {canCancel && (\n \n {cancelBtnLabel}\n \n )}\n
    \n );\n };\n\n private readonly focusOnFirstFocusableElement = (): void => {\n const node = this.formCardRef.current as HTMLElement;\n const focussableElements = `\n a:not([disabled]),\n button:not([disabled]),\n input[type=submit]:not([disabled]),\n input[type=checkbox]:not([disabled]),\n input[type=text]:not([disabled]),\n input[type=radio]:not([disabled]),\n input[type=password]:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\n `;\n\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\n child && child.focus && child.focus();\n };\n\n private readonly focusOnEditButton = (): void => {\n // Focus on edit button\n const editButton =\n this.editButtonRef &&\n this.editButtonRef.current &&\n this.editButtonRef.current.focus &&\n (this.editButtonRef.current as HTMLElement);\n editButton && editButton.focus();\n };\n\n private readonly scrollToTitle = (): void => {\n // Scroll window to the title of the step that was just completed only in mobile viewport\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\n formCard && formCard.scrollIntoView();\n };\n\n private readonly getTitle = (): JSX.Element => {\n const { step, title } = this.props;\n const { headingTag: Tag = 'h2', text = '' } = title || {};\n return (\n \n \n {step + 1}. {` `}\n \n {text && {text}}\n \n );\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _getModules = (item: React.ReactNode): any[] => {\n return get(item, 'props.modules.primary') || [];\n };\n\n private readonly _getId = (item: React.ReactNode): string => {\n return get(item, 'id') || '';\n };\n}\n\nexport default CheckoutGuidedCard;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport get from 'lodash/get';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport GuidedCard from './guided-card';\n\nexport interface ICheckoutGuidedFormProps {\n items: React.ReactNode[];\n moduleState: IModuleStateManager;\n disableGuidedCheckoutFlow?: boolean;\n isMobile?: boolean;\n isEditor?: boolean;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n requestContext?: ICoreContext;\n telemetryContent?: ITelemetryContent;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n hasError?: boolean;\n hasShippingAddress?: boolean | undefined;\n hasCartDeliveryMode?: boolean | undefined;\n hasGuestCheckoutEmail?: boolean | undefined;\n isTermsAndConditionAccepted?: boolean | undefined;\n shouldEnableCheckoutErrorDisplayMessaging?: boolean;\n shouldFocusOnCheckoutError?: boolean | undefined;\n}\n\ninterface ICheckoutGuidedFormState {\n currentStep: number;\n}\n\nconst paymentInstrumentModuleId = 'payment-instrument';\n\n/**\n *\n * CheckoutGuidedForm component.\n * @extends {React.Component}\n */\n@observer\nclass CheckoutGuidedForm extends React.PureComponent {\n @computed public get hasMissingInfo(): boolean {\n if (\n this.props.hasShippingAddress === false ||\n this.props.hasCartDeliveryMode === false ||\n this.props.hasGuestCheckoutEmail === false ||\n this.props.isTermsAndConditionAccepted === false\n ) {\n return true;\n }\n\n return false;\n }\n\n @computed public get hasOrderError(): boolean {\n for (const item of this.props.items) {\n const childId = this.getId(item);\n const state = this.props.moduleState.getModule(childId);\n\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n state.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (!isPaymentSectionContainer && !state.isDisabled && state.hasError) {\n return true;\n }\n }\n\n return false;\n }\n\n public state: ICheckoutGuidedFormState = {\n currentStep: 0\n };\n\n public componentDidMount(): void {\n /**\n * Append child modules.\n */\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\n this.props.moduleState.init({ childIds });\n }\n\n public render(): JSX.Element | null {\n const { moduleState, items, resource } = this.props;\n if (!items || !moduleState) {\n return null;\n }\n\n const shouldCollapseAfterRedirect =\n this.props.isPaymentVerificationRedirection &&\n this.props.shouldEnableSinglePaymentAuthorizationCheckout &&\n !this.props.hasError &&\n !this.hasMissingInfo &&\n !this.hasOrderError;\n\n let previousModuleHasError = false;\n const childModule = this._enableAfterModule();\n return (\n
    \n {items.map((item: React.ReactNode) => {\n const childId = this.getId(item);\n const step = this.getStep(childId);\n const title = this.getHeading(item);\n const state = this.props.moduleState.getModule(childId);\n const {\n isReady,\n isPending,\n isUpdating,\n isDisabled,\n isCancelAllowed,\n onEdit,\n onCancel,\n onSubmit,\n hasModuleState,\n hasInitialized,\n hasError\n } = state || ({} as IModuleStateManager);\n\n let shouldFocus =\n !!this.props.shouldEnableCheckoutErrorDisplayMessaging &&\n !!this.props.shouldFocusOnCheckoutError &&\n !previousModuleHasError &&\n hasError;\n previousModuleHasError = previousModuleHasError || shouldFocus;\n\n return (\n \n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\n \n );\n })}\n
    \n );\n }\n\n private readonly getEnabledModules = (): string[] => {\n const {\n moduleState: { childIds, getModule }\n } = this.props;\n return childIds.filter((childId: string) => {\n const state = getModule(childId);\n return !!state && !state.isDisabled;\n });\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _enableAfterModule = (): string => {\n const childIds: string[] = this.props.items.map((item: React.ReactNode) => get(item, 'props.id')).filter(Boolean);\n let id: string = '';\n for (let i = 0; i < childIds.length - 1; i++) {\n const childId = childIds[i];\n const nextChildId = childIds[i + 1];\n if (this._isPaymentSectionContainer(childId) && nextChildId) {\n id = nextChildId;\n }\n }\n return id;\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n const sectionState = this.props.moduleState.getModule(moduleId);\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n sectionState.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (isPaymentSectionContainer) {\n return true;\n }\n return false;\n };\n\n private readonly getStep = (id: string): number => {\n return this.getEnabledModules().indexOf(id);\n };\n\n private readonly getId = (item: React.ReactNode): string => {\n return get(item, 'props.id') || '';\n };\n\n private readonly getHeading = (item: React.ReactNode): Heading => {\n return get(item, 'props.config.heading') || '';\n };\n\n private readonly isExpanded = (step: number, moduleChildId: string, childId: string): boolean => {\n if (this.props.isEditor) {\n // Editorial mode: Expand all the drawers\n return true;\n }\n if (this.props.shouldEnableSinglePaymentAuthorizationCheckout && moduleChildId === childId) {\n return true;\n }\n return step > -1 && step <= this.state.currentStep;\n };\n\n private readonly isActive = (step: number): boolean => {\n return step === this.state.currentStep;\n };\n\n private readonly isVisted = (step: number): boolean => {\n return step > -1 && step < this.state.currentStep;\n };\n\n private readonly onNext = (): void => {\n this.setState({\n currentStep: this.state.currentStep + 1\n });\n };\n}\n\nexport default CheckoutGuidedForm;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\ninterface ICheckoutPlaceOrderButtonProps {\n canPlaceOrder: boolean;\n checkoutBtnText: string;\n telemetryContent?: ITelemetryContent;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n isPlaceOrderLoading?: boolean;\n isExpressCheckoutApplied?: boolean;\n isPaymentVerificationRedirection?: boolean;\n placeOrder(): Promise;\n}\n\nconst buttonsStates: React.Dispatch>[] = [];\n\n/**\n * On place order function.\n * @param isBusy -Check is busy.\n * @param canPlaceOrder -Check can place order.\n * @param placeOrder -Place order function.\n * @returns Set state of button.\n */\nconst onPlaceOrderHandler = (isBusy: boolean, canPlaceOrder: boolean, placeOrder: () => Promise) => async () => {\n if (isBusy || !canPlaceOrder) {\n return;\n }\n buttonsStates.map(buttonSetState => {\n buttonSetState(true);\n return true;\n });\n await placeOrder();\n};\n\nconst CheckoutPlaceOrderButton: React.FC = ({\n checkoutBtnText,\n canPlaceOrder,\n placeOrder,\n telemetryContent,\n shouldEnableSinglePaymentAuthorizationCheckout,\n isPlaceOrderLoading,\n isExpressCheckoutApplied,\n isPaymentVerificationRedirection\n}) => {\n const [isBusy, setIsBusy] = useState(false);\n buttonsStates.push(setIsBusy);\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\n return (\n \n {checkoutBtnText}\n \n );\n }\n\n return (\n \n {checkoutBtnText}\n \n );\n};\n\nexport default CheckoutPlaceOrderButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { CartCheckout } from '../../../common/checkout';\n\nexport const OPERATIONS = {\n PayCard: 201,\n PayGiftCertificate: 214,\n PayLoyalty: 207,\n PayCustomerAccount: 202\n};\n\nexport default async (\n ctx: IActionContext,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n): Promise => {\n return CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { PlaceOrder } from '../../../common/place-order';\n\nexport default async (\n ctx: IActionContext,\n checkoutState: ICheckoutState | undefined,\n orderedProducts: SimpleProduct[] | undefined,\n redirect: boolean,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n) => {\n return PlaceOrder(ctx, checkoutState, orderedProducts, redirect, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../gift-card-balance-check.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n resources: {\n balanceCheckButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On apply function.\n * @param onApplyGiftCard -On apply gift card.\n * @returns Apply gift card.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number function.\n * @param onEnterGiftCardNumber -On enter gift card number.\n * @returns On gift card enter pin function result.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On change pin function.\n * @param onEnterGiftCardPin -On enter gift card pin.\n * @returns On enter gift card pin function result.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On change exp function.\n * @param onEnterGiftCardExp -On enter gift card.\n * @returns On enter gift card function result.\n */\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n resources: {\n balanceCheckButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-gift-card-balance-check__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-gift-card-balance-check__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-gift-card-balance-check__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-gift-card-balance-check__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {balanceCheckButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { GiftCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: GiftCard;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-gift-card-balance-check__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {` `}({giftCardAvailableBalanceLabel}\n {` `}\n {balance})\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { getForm, IForm } from './components/get-form';\nimport { getItem, IItem } from './components/get-item';\nimport { IGiftCardBalanceCheckProps } from './gift-card-balance-check.props.autogenerated';\n\ninterface IGiftCardBalanceCheckState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n giftCard?: GiftCard;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface IGiftCardBalanceCheckModuleProps extends IGiftCardBalanceCheckProps<{}> {}\n\nexport interface IGiftCardBalanceCheckViewProps extends IGiftCardBalanceCheckProps<{}>, IGiftCardBalanceCheckState {\n className?: string;\n\n form: IForm;\n item?: IItem;\n\n giftCardBalanceCheckProps: IModuleProps;\n\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardPin: string): void;\n enterGiftCardExp?(giftCardExp: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * GiftCardBalanceCheck component.\n * @extends {React.Component}\n */\nexport class GiftCardBalanceCheck extends React.Component {\n public state: IGiftCardBalanceCheckState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n public shouldComponentUpdate(nextProps: IGiftCardBalanceCheckModuleProps, nextState: IGiftCardBalanceCheckState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this._isEnabled()) {\n this.props.context.telemetry.error('Gift card balance check is not supported, module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-gift-card-balance-check', className);\n\n const viewProps: IGiftCardBalanceCheckViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n giftCardBalanceCheckProps: { moduleProps: this.props, className: moduleClassName },\n\n enterGiftCardNumber: this._enterGiftCardNumber,\n enterGiftCardPin: this._enterGiftCardPin,\n enterGiftCardExp: this._enterGiftCardExp,\n applyGiftCard: this._applyGiftCard,\n\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n supportExternalGiftCard,\n additionalFields: showAdditionalFields,\n onEnterGiftCardNumber: this._enterGiftCardNumber,\n onEnterGiftCardPin: this._enterGiftCardPin,\n onEnterGiftCardExp: this._enterGiftCardExp,\n onApplyGiftCard: this._applyGiftCard\n }),\n item:\n this.state.giftCard &&\n getItem({\n giftCard: this.state.giftCard,\n getFormattedPrice: this._getFormattedPrice,\n resources\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return true;\n };\n\n private readonly _getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly _enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this._clearError();\n };\n\n private readonly _clearError = (): void => {\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly _setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.setState({\n errorMessage\n });\n };\n\n private readonly _applyGiftCard = async (): Promise => {\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this._getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this._getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (giftCard) {\n this._clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false,\n giftCard\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false,\n giftCard: undefined\n });\n };\n\n private readonly _findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly _getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { invalidCardTypeError, noBalanceError, invalidCardInfoError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (!this.props.context.request.user.isAuthenticated && internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n\n if (isPinRequired && giftCardPin === '') {\n this._setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this._setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this._setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this._setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly _getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, invalidCodeError }\n } = this.props;\n\n if (!giftCardNumber) {\n this._setError(emptyInputError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this._setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this._setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default GiftCardBalanceCheck;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IForm, IItem, IGiftCardBalanceCheckViewProps } from './index';\n\nexport const Form: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const Item: React.FC = ({ itemProps, selectedGiftCard }) => {selectedGiftCard};\n\nconst GiftCardBalanceCheckView: React.FC = props => {\n const { giftCardBalanceCheckProps, form, item } = props;\n return (\n \n {form &&
    }\n {item && }\n \n );\n};\n\nexport default GiftCardBalanceCheckView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLinePriceEditor, ICartLinePriceEditorResources, PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\n/**\n * ICartlineResourceString: Interface for specifying the\n * resource strings that the component needs.\n */\nexport interface ICartlineResourceString {\n /**\n * Display string for discount label\n */\n discountStringText: string;\n\n /**\n * String for size key\n */\n sizeString: string;\n\n /**\n * String for color key\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension\n */\n configString: string;\n\n /**\n * String for style key\n */\n styleString: string;\n\n /**\n * String for amount key\n */\n amountString?: string;\n\n /**\n * Display string for quantity label\n */\n quantityDisplayString: string;\n\n /**\n * Display string for quantity label\n */\n inputQuantityAriaLabel: string;\n\n /**\n * Aria label for the decrement button in quantity component\n */\n decrementButtonAriaLabel: string;\n\n /**\n * Aria label for the increment button in quantity component\n */\n incrementButtonAriaLabel: string;\n\n /**\n * Original text screenreader\n */\n originalPriceText: string;\n\n /**\n * Current text screenreader\n */\n currentPriceText: string;\n\n /**\n * Shipping Charges Text\n */\n shippingChargesText: string;\n\n priceEditorResources?: ICartLinePriceEditorResources;\n salesAgreementPricePrompt?: string;\n}\n\ninterface ICartLineData {\n cartLine: CartLine | SalesLine;\n cartState?: ICartState;\n product?: SimpleProduct;\n catalogs?: ProductCatalog[];\n}\n\n/**\n * ICartLineProps: The props required to render cartLineitem.\n */\nexport interface ICartLineProps extends IComponentProps {\n /**\n * The flag to change the quantity component from intractable to static.\n */\n disableQuantityInteractivity?: boolean;\n\n /**\n * The primary image url.\n */\n primaryImageUrl?: string;\n\n /**\n * The product url.\n */\n productUrl?: string;\n\n /**\n * GridSettings for the product image in cartLine.\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartLine.\n */\n imageSettings: IImageSettings;\n\n /**\n * Boolean flag to indicate if the item is out of stock.\n */\n isOutOfStock?: boolean;\n\n /**\n * Flag to make quantity section editable.\n */\n isQuantityEditable?: boolean;\n\n /**\n * Max quantity for line item.\n */\n maxQuantity?: number;\n\n /**\n * Current quantity for line item.\n */\n currentQuantity?: number;\n\n /**\n * Resource string for the component.\n */\n resources: ICartlineResourceString;\n\n /**\n * SalesLine flag.\n */\n isSalesLine?: boolean;\n\n /**\n * Error message to show in place of quantity.\n */\n errorMessage?: string;\n\n /**\n * Inventory information label.\n */\n inventoryInformationLabel?: string;\n\n /**\n * Inventory information class name.\n */\n inventoryLabelClassName?: string;\n\n /**\n * Flag to show/hide shipping charges for line items.\n */\n showShippingChargesForLineItems?: boolean;\n\n /**\n * Boolean flag to indicate if cart state status is ready.\n */\n isCartStateReady?: boolean;\n\n /**\n * Chanel Delivery Option configuration is from api.\n */\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n\n /**\n * The cart line index.\n */\n lineIndex?: number;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): boolean;\n priceCurrency?: string;\n}\n\ninterface IDimensionStrings {\n /**\n * String for size key.\n */\n sizeString: string;\n\n /**\n * String for color key.\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension.\n */\n configString: string;\n\n /**\n * String for style key.\n */\n styleString: string;\n\n /**\n * String for amount key.\n */\n amountString?: string;\n}\n\n/**\n * Renders catalog label for the cart line.\n * @param props - Cart line props.\n * @returns Catalog label.\n */\nconst CatalogLabelComponent: React.FC = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\n return null;\n }\n\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
    {catalog.Name}
    ;\n};\n\nconst CartLineItemFunctions = {\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\n if (!Product || !Product.Dimensions) {\n return [];\n }\n\n return Product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === 1) {\n return (\n
    \n \n {DimensionStrings.colorString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 2) {\n return (\n
    \n \n {DimensionStrings.configString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 3) {\n return (\n
    \n \n {DimensionStrings.sizeString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 4) {\n return (\n
    \n \n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n return null;\n });\n },\n\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\n return null;\n }\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n
    \n \n {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n \n {` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}\n
    \n );\n });\n },\n renderInventoryLabel: (props: ICartLineProps) => {\n if (!props.inventoryInformationLabel) {\n return null;\n }\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n return {props.inventoryInformationLabel};\n },\n\n /**\n * Gets the react node for product unit of measure display.\n * @param props - Icartline props.\n * @returns The node representing markup for unit of measure component.\n */\n renderUnitOfMeasure: (props: ICartLineProps) => {\n if (props.data.cartLine.IsInvoiceLine) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\n return undefined;\n }\n\n const product = props.data.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n
    \n {product.DefaultUnitOfMeasure}\n
    \n );\n },\n renderShippingLabel: (props: ICartLineProps) => {\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\n const cartline = props.data.cartLine;\n let hasShippingMethod = false;\n if (channelDeliveryOptionConfig !== undefined) {\n hasShippingMethod = !!(\n cartline.DeliveryMode &&\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\n );\n } else {\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\n }\n if (!hasShippingMethod) {\n return undefined;\n }\n\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\n\n if (shippingChargeLines.length === 0) {\n return undefined;\n }\n\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\n }, 0);\n\n const priceComponent = (\n \n );\n return (\n <>\n \n {priceComponent}\n \n );\n },\n renderOtherCharges: (props: ICartLineProps) => {\n const cartline = props.data.cartLine;\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\n\n return (\n (otherCharges &&\n otherCharges.map((otherCharge, key) => {\n return otherCharge && otherCharge.CalculatedAmount ? (\n
    \n \n \n \n \n
    \n ) : (\n ''\n );\n })) ||\n undefined\n );\n },\n\n /**\n * Render the sales agreement prompt.\n * @param props - The ICartLineProps.\n * @returns The JSX.Element.\n */\n renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return
    {props.resources.salesAgreementPricePrompt}
    ;\n }\n};\n\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC = (props: ICartLineProps) => {\n const { isSalesLine, productUrl, resources } = props;\n const { product, cartLine } = props.data;\n\n const destructDimensionStrings = {\n sizeString: resources.sizeString,\n colorString: resources.colorString,\n styleString: resources.styleString,\n configString: resources.configString,\n amountString: resources.amountString\n };\n\n const fallbackImageUrl =\n product &&\n getFallbackImageUrl(\n product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\n const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const productName = product?.Name || cartLine.Description;\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\n\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\n }\n return true;\n };\n\n const _generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n
    \n \n {props.errorMessage}\n
    \n );\n }\n\n return null;\n };\n\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\n const nodes = [];\n if (props.isOutOfStock) {\n return null;\n }\n\n // No quantity selector for invoice line\n if (!props.data.cartLine.IsInvoiceLine) {\n if (props.data.product && props.isQuantityEditable) {\n nodes.push(\n
    \n
    {resources.quantityDisplayString}
    \n \n
    \n );\n } else {\n nodes.push(\n
    \n \n {props.data.cartLine.Quantity}\n
    \n );\n }\n }\n\n nodes.push(\n
    \n \n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\n <>\n \n {` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n )) ||\n null}\n
    \n );\n\n return nodes;\n };\n\n return (\n <>\n
    \n
    \n \n
    \n
    \n
    \n \n {MsDyn365.isBrowser ? (\n \n {productName}\n \n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n
    {productDimensions}
    \n ) : (\n ''\n )}\n {renderUnitOfMeasure}\n
    \n \n
    \n {renderDisountLines}\n {renderInventoryLabel}\n {props.showShippingChargesForLineItems &&
    {renderShippingLabel}
    }\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n
    \n {_generateQuantityandPrice()}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n \n )}\n
    \n
    \n {_generateErrorMessage()}\n \n );\n};\n\nexport default CartLine;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderProps } from '../header.props.autogenerated';\n\n/**\n * The header preferred store component.\n */\n@observer\nexport class HeaderPreferredStore extends React.PureComponent> {\n private readonly modalCloseButtonRef: React.RefObject = React.createRef();\n\n /**\n * Handle click on the store selector.\n * @returns : Promise void.\n */\n public handleClick = () => {\n return this._findPreferredStoreOnClick(this.props);\n };\n\n public render(): JSX.Element | undefined {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n slots,\n resources\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- slots can be undefined.\n if (ArrayExtensions.hasElements(slots?.storeSelector)) {\n const storeName =\n storeSelectorStateManager?.preferredStore && storeSelectorStateManager.preferredStore.StoreName\n ? storeSelectorStateManager.preferredStore.StoreName\n : resources.headerPreferredStoreText;\n\n return (\n
    \n \n {storeName}\n \n {slots.storeSelector}\n
    \n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n modules\n } = props;\n if (!storeSelectorStateManager) {\n return;\n }\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && ArrayExtensions.hasElements(modules.storeSelector)) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n await storeSelectorStateManager\n .openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to set preferred store');\n }\n });\n }\n}\n\nexport default HeaderPreferredStore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ILogoProps {\n image: Msdyn365.IImageData;\n gridSettings?: Msdyn365.IGridSettings;\n link?: ILinkData;\n className?: string;\n telemetryContent?: ITelemetryContent;\n requestContext: Msdyn365.IRequestContext;\n typeName?: string;\n}\n\nexport interface ILinkData {\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n linkText?: string;\n}\n\n/**\n *\n * Logo component.\n * @extends {React.PureComponent}\n */\nexport class Logo extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: ILogoProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return
    {this._renderLogo(this.props)}
    ;\n }\n\n private _renderLogo(config: ILogoProps): JSX.Element {\n if (config.link && config.link.linkUrl.destinationUrl) {\n return (\n \n {this._renderImage(config)}\n \n );\n }\n return this._renderImage(config);\n }\n\n private _renderImage(config: ILogoProps): JSX.Element {\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=132&h=28&m=6', w: 0, h: 0 },\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n}\n\nexport default Logo;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderResources } from '../header.props.autogenerated';\n\nexport interface INavIconProps {\n resources: IHeaderResources;\n isExpanded: boolean;\n targetId: string;\n telemetryContent?: ITelemetryContent;\n toggleNavBar(): void;\n}\n\n/**\n *\n * NavIcon component.\n * @extends {React.PureComponent}\n */\n\n@observer\nexport class NavIcon extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: INavIconProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalHeader,\n onTelemetryClick,\n Popover,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\nimport { IHeaderData } from './header.data';\nimport { IHeaderProps, IHeaderResources, IMyAccountLinksData } from './header.props.autogenerated';\n\nexport interface IHeaderState {\n mobileMenuCollapsed: boolean;\n signinPopoverOpen: boolean;\n hasSigninerror?: boolean;\n}\n\nexport interface IHeaderViewProps extends IHeaderProps, IHeaderState {\n logo: React.ReactNode;\n wishListIconDesktop: React.ReactNode;\n wishListIconMobile: React.ReactNode;\n cartIcon: React.ReactNode;\n navIcon: React.ReactNode;\n className: string;\n menuBar: React.ReactNode[];\n search: React.ReactNode[];\n siteOptions: React.ReactNode[];\n HeaderTag: IModuleProps;\n HeaderContainer: INodeProps;\n MobileMenuContainer: INodeProps;\n MobileMenuHeader: React.ReactNode;\n MobileMenuBodyContainer: INodeProps;\n MobileMenuLinksContainer: INodeProps;\n HeaderTopBarContainer: INodeProps;\n Divider: INodeProps;\n\n AccountInfoDropdownParentContainer?: INodeProps;\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\n accountInfoDropdownButton?: React.ReactNode;\n\n signOutLink?: React.ReactNode;\n signInLink?: React.ReactNode;\n switchCustomerLink?: React.ReactNode;\n isOBORequest?: boolean;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n currentDistributor?: React.ReactNode;\n}\n\n/**\n *\n * Header component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Header extends React.PureComponent, IHeaderState> {\n private readonly popOverRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private cart: ICartState | undefined;\n\n private isB2BSite: boolean = false;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return (\n (MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName) ||\n this.props.context.request?.user?.name\n );\n }\n\n /**\n * OBO scenario. The name of worker who shops on behalf of customer.\n */\n @computed public get workerName(): Readonly {\n const worker = this.props.data.employee?.result;\n return worker?.Name;\n }\n\n @computed public get customerName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n if (MsDyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n }\n\n public constructor(props: IHeaderProps) {\n super(props);\n this.popOverRef = React.createRef();\n this._toggleNavbar = this._toggleNavbar.bind(this);\n this._togglePopover = this._togglePopover.bind(this);\n this._keydown = this._keydown.bind(this);\n this.state = {\n mobileMenuCollapsed: true,\n signinPopoverOpen: false,\n hasSigninerror: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isB2BSite = isChannelTypeB2B(this.props.context.request);\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => {\n this.props.data.cart.result;\n },\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: {\n signUpCustomerNotFoundTitle,\n signUpMultipleCustomerFoundTitle,\n signInCustomerNotAuthorizedTitle,\n closeNotificationLabel\n }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(\n user,\n signUpMultipleCustomerFoundTitle,\n signUpCustomerNotFoundTitle,\n signInCustomerNotAuthorizedTitle\n );\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('keydown', this._keydown, false);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n data: { accountInformation, wishlists },\n context: {\n request: { user }\n },\n context,\n resources: { cartLabel, cartQtyLabel }\n } = this.props;\n const { logoLink, logoImage, shouldShowWishlistCount } = this.props.config;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\n const navbarKey = 'header-nav-mobile';\n const customer = accountInformation && accountInformation.result;\n const cartIconSlot = this._getSlot('cartIcon');\n const menuBarSlot = this._getSlot('menuBar');\n const searchSlot = this._getSlot('search');\n let wishlistCount = 0;\n const siteOptionsSlot = this._getSlot('siteOptions');\n const preferredStoreSlot = this._getSlot('storeSelector');\n const currentDistributorSlot = this._getSlot('distributorSelector');\n if (wishlists !== undefined) {\n if (\n !wishlists.result ||\n !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines ||\n !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)\n ) {\n wishlistCount = 0;\n } else {\n wishlistCount = wishlists.result[0].CommerceListLines.length;\n }\n }\n const viewProps: IHeaderViewProps = {\n ...(this.props as IHeaderProps),\n ...this.state,\n logo: (\n \n ),\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: ArrayExtensions.hasElements(cartIconSlot) ? (\n cartIconSlot[0]\n ) : (\n \n ),\n navIcon: (\n \n ),\n menuBar: ArrayExtensions.hasElements(menuBarSlot) ? menuBarSlot : [],\n search: ArrayExtensions.hasElements(searchSlot) ? searchSlot : [],\n siteOptions: ArrayExtensions.hasElements(siteOptionsSlot) ? siteOptionsSlot : [],\n className: headerClassName,\n HeaderTag: {\n moduleProps: this.props,\n className: classnames(headerClassName),\n 'aria-label': this.props.resources.headerAriaLabel,\n tag: 'header'\n },\n HeaderContainer: {\n className: classnames('ms-header__container')\n },\n HeaderTopBarContainer: {\n className: classnames('ms-header__topbar')\n },\n Divider: {\n className: classnames('ms-header__divider')\n },\n MobileMenuContainer: {\n tag: Modal,\n id: navbarKey,\n className: 'ms-header__mobile-hamburger',\n isOpen: !this.state.mobileMenuCollapsed,\n wrapClassName: 'ms-header__modal',\n toggle: this._toggleNavbar\n },\n MobileMenuHeader: ,\n MobileMenuBodyContainer: {\n tag: ModalBody,\n className: 'ms-header__mobile-hamburger-menu-body'\n },\n MobileMenuLinksContainer: {\n className: 'ms-header__mobile-hamburger-menu-links'\n },\n AccountInfoDropdownParentContainer: {\n className: 'ms-header__account-info'\n },\n AccountInfoDropdownPopoverConentContainer: this.displayName\n ? {\n tag: Popover,\n id: 'myprofilePopover',\n className: 'ms-header__account-info-content',\n placement: 'bottom',\n isOpen: this.state.signinPopoverOpen,\n target: this.popOverRef,\n toggle: this._togglePopover\n }\n : undefined,\n signInLink: this._getSigninButton(user, this.props.resources),\n signOutLink: this._getSignOutButton(user, this.props.resources),\n isOBORequest: MsDyn365.isOboRequest(this.props.context.request),\n switchCustomerLink: this._getSwitchCustomerButton(user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(user, this.props.resources),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) && ,\n currentDistributor: this.isB2BSite && ArrayExtensions.hasElements(currentDistributorSlot) ? currentDistributorSlot : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - Link Index.\n * @returns : Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.myAccountLinks?.[linkIndex]) {\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Get the slot.\n * @param slotName - Name of the slot.\n * @returns The slot.\n */\n private _getSlot(slotName: string): React.ReactNode[] | null {\n const { slots } = this.props;\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\n }\n\n /**\n * Renders the sign in button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n !this.displayName && (\n \n \n {resources.signInLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSwitchCustomerButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SwitchCustomer);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const isOBOAccountSelected =\n MsDyn365.isOboRequest(this.props.context.request) && this.props.context.request.cookies.getAccountSelectionCookie();\n return (\n this.displayName &&\n isOBOAccountSelected && (\n this.props.context.request.cookies.removeAccountSelectionCookie()}\n {...attributes}\n >\n
    \n
    {format(resources.shoppingAsText, this.customerName)}
    \n
    {resources.switchCustomerLinkText}
    \n
    \n \n )\n );\n }\n\n private getBusinessPartnerSelectionUrl(): string | undefined {\n const route = MsDyn365.getUrlSync('businessPartnerSelection', this.props.context.actionContext);\n if (!route || !MsDyn365.msdyn365Commerce.isBrowser) {\n return undefined;\n }\n\n // MsDyn365.getUrlSync persists some params in the route and remove other params.\n // Among the persisted params, we need to remove catalogid.\n const persistedParamToRemove = ['catalogid'];\n const url = new URL(route, window.location.href);\n persistedParamToRemove.forEach(param => url.searchParams.delete(param));\n return url.href;\n }\n\n private _getSigninNotification(\n user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string,\n signUpCustomerNotFoundTitle: string,\n signInCustomerNotAuthorizedTitle: string\n ): string | undefined {\n if (!user?.retailServerErrorCode) {\n return undefined;\n }\n\n const { signUpCustomerNotFound, signUpMultipleCustomerFound, signInCustomerNotAuthorized } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n const accountAuthorizationError = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\n\n if (user?.retailServerErrorCode === notFoundError) {\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\n } else if (user?.retailServerErrorCode === multipleAccountError) {\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\n } else if (user?.retailServerErrorCode === accountAuthorizationError) {\n return signInCustomerNotAuthorized !== undefined ? signInCustomerNotAuthorized : signInCustomerNotAuthorizedTitle;\n }\n return user?.retailServerErrorMessage;\n }\n\n private _getAccountInfoDropdownButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n
    \n
    {this.displayName}
    \n {MsDyn365.isOboRequest(this.props.context.request) && this.customerName && (\n
    {format(resources.shoppingAsText, this.customerName)}
    \n )}\n
    \n \n )\n );\n }\n\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\n const { myAccountLinks } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n if (!this.displayName || !myAccountLinks || !ArrayExtensions.hasElements(myAccountLinks)) {\n return undefined;\n }\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\n payLoad.contentAction.etext = cta.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: cta.ariaLabel,\n className: 'ms-signin-info__account-link-button',\n linkText: cta.linkText,\n linkUrl: cta.linkUrl.destinationUrl,\n openInNewTab: cta.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n\n return (\n \n );\n });\n }\n\n private _toggleNavbar(): void {\n this.setState({\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\n });\n }\n\n private _togglePopover(): void {\n this.setState({\n signinPopoverOpen: !this.state.signinPopoverOpen\n });\n }\n\n private _keydown(event: KeyboardEvent): void {\n if (event.keyCode === KeyCodes.Escape) {\n this.setState({ mobileMenuCollapsed: true });\n }\n }\n}\n\nexport default Header;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHeaderViewProps } from './header';\n\nconst headerView: React.FC = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer,\n Divider\n } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {props.currentDistributor}\n {_renderDesktopAccountBlock(props)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n \n \n {props.MobileMenuHeader}\n {_renderReactFragment(props.menuBar)}\n \n {props.accountLinks ? props.accountLinks.map(link => link) : false}\n {props.siteOptions}\n {props.wishListIconMobile}\n {props.signInLink}\n {props.signOutLink}\n \n \n \n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map(link => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return {signInLink};\n }\n }\n props.context.telemetry.error('Header content is empty, module wont render.');\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

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

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

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

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

    {this.props.moduleHeadingText}

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

    \n {ariaLabelProduct}\n

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

    \n {ariaLabelQuantity}\n

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

    {this.props.moduleHeadingText}

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

    \n {ariaLabelProduct}\n

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

    \n {ariaLabelQuantity}\n

    \n \n
    \n );\n\n const addtoCartNode = (\n
    \n \n {ariaLabelAddtoCart}\n \n
    \n );\n\n const userMessageNode =\n quickOrderState && quickOrderState.stateMessage ? (\n \n \n {quickOrderState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToCartBtn: addtoCartNode,\n quantity: quantityNode,\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order.\n */\nexport class QuickOrderProduct {\n @observable\n public isSelected: boolean;\n\n public readonly cartLine: CartLine;\n\n public readonly simpleProduct: SimpleProduct;\n\n public constructor(cartLine: CartLine, simpleProduct: SimpleProduct) {\n this.cartLine = cartLine;\n this.simpleProduct = simpleProduct;\n this.isSelected = false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order table header resources.\n */\nexport interface IQuickOrderTableHeaderResources {\n quickOrderProductNumberText: string;\n quickOrderProductText: string;\n quickOrderUnitPriceText: string;\n quickOrderUnitOfMeasureText: string;\n quickOrderQuantityText: string;\n quickOrderTotalText: string;\n quickOrderActionsText: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderTableHeaderResources;\n}\n\n/**\n * Interface for quick order table header component.\n */\nexport interface IQuickOrderTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order header cells for desktop.\n * @param props -- The quick order table header props.\n * @returns The list of cells for quick order header component in desktop version.\n */\nconst QuickOrderDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderProductNumberText}\n {resources.quickOrderProductText}\n {resources.quickOrderUnitPriceText}\n {resources.quickOrderUnitOfMeasureText}\n {resources.quickOrderQuantityText}\n {resources.quickOrderTotalText}\n {resources.quickOrderActionsText}\n \n );\n};\n\n/**\n * Get the quick order header cells for mobile.\n * @param props -- The quick order table header props.\n * @returns The quick order header component in desktop version.\n */\nconst QuickOrderMobileHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderProductNumberText}\n \n \n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderTableHeaderComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { CartLine, format, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Data required to render each quick order row.\n */\nexport interface IQuickOrderTableRowData {\n cartLine: CartLine;\n product: SimpleProduct;\n}\n\n/**\n * Resources for quick order table rows.\n */\nexport interface IQuickOrderTableRowResources {\n quickOrderQuantityMobileText: string;\n quickOrderProductDimensionsSeparator: string;\n quickOrderViewDetailsButtonText: string;\n quickOrderViewDetailsButtonAriaLabel: string;\n quickOrderRemoveItemButtonAriaLabel: string;\n quickOrderInputQuantityAriaLabel: string;\n quickOrderDecrementButtonAriaLabel: string;\n quickOrderIncrementButtonAriaLabel: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderTableRowResources;\n}\n\n/**\n * The default image settings for quick order table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderTableRowProductImageComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const fallbackImageUrl = getFallbackImageUrl(\n props.data.product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
    \n \n
    \n );\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderExtraActionsPopupComponent: React.FC = (props: IQuickOrderTableRowProps): JSX.Element | null => {\n const product: SimpleProduct = props.data.product;\n\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n\n return (\n
    \n
    \n );\n};\n\n/**\n * Renders quick order table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order rows for desktop view.\n */\nexport const QuickOrderDesktopTableRowCellComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const product: SimpleProduct = props.data.product;\n const cartLine: CartLine = props.data.cartLine;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
    \n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderProductDimensionsSeparator)}\n \n
    \n \n {cartLine.Price}\n {cartLine.UnitOfMeasureSymbol}\n \n \n \n {cartLine.TotalAmount}\n \n \n ),\n submitButton: (\n \n {props.resources.submitReviewButtonText}\n \n ),\n rating: ratingsInput(props),\n ratingLabel: ratingsLabel(props),\n titleInput: titleInput(props),\n titleLabel: titleLabel(props),\n textInput: textInput(props),\n textLabel: textLabel(props),\n privacyPolicyUrl: privacyPolicyLink(props),\n form: { tag: 'form', className: 'ms-review-modal-form', autoComplete: 'off' },\n inputRow: { tag: 'div', className: 'ms-review-modal-row', autoComplete: 'off' },\n error: (\n \n {props.resources.errorMessageText}\n \n )\n };\n};\n\nconst modalHeaderNode = (props: IReviewModalProps) => {\n return (\n \n {props.userReview && props.userReview.reviewId ? props.resources.editReviewModalTitle : props.resources.writeReviewModalTitle}\n \n );\n};\n\nconst submitDisabled = (props: IReviewModalProps) => {\n return !props.rating || !stripWhiteSpacesFromString(props.reviewText) || !stripWhiteSpacesFromString(props.reviewTitle);\n};\n\nconst ratingsInput = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst ratingsLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst titleInput = (props: IReviewModalProps) => {\n const maxLength = props.context.app.config.reviewTitleMaxLength;\n\n return (\n \n );\n};\n\nconst titleLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst reviewTextWidth: number = 50;\n\nconst textInput = (props: IReviewModalProps) => {\n const maxLength = props.context.app.config.reviewTextMaxLength;\n return (\n \n );\n};\n\nconst textLabel = (props: IReviewModalProps) => {\n return (\n \n );\n};\n\nconst privacyPolicyLink = (props: IReviewModalProps) => {\n const policyTextBlocks = props.resources.privacyPolicyTextFormat.split('{0}');\n const isSeparatorAtStart = props.resources.privacyPolicyTextFormat.startsWith('{0}');\n const isSeparatorAtEnd = props.resources.privacyPolicyTextFormat.endsWith('{0}');\n const privacyPolicyUrl = getUrlSync('rnrPrivacyPolicy', props.context.actionContext);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.PrivacyPolicy);\n const privacyPolicyAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n return (\n

    \n {isSeparatorAtStart ? '' : policyTextBlocks[0]}\n \n {props.resources.privacyPolicyTitle}\n \n {isSeparatorAtEnd ? '' : isSeparatorAtStart ? policyTextBlocks[0] : policyTextBlocks[1]}\n

    \n );\n};\n\nconst onSubmit = (props: IReviewModalProps): void => {\n if (props.product) {\n submitReview(\n props.product,\n props.reviewTitle,\n props.reviewText,\n props.rating,\n props.context,\n props.userReview,\n props.onReviewComplete\n );\n }\n};\n\n/**\n * This method strips content of extra white spaces.\n * @param text The text to be stripped of extra white spaces.\n */\nconst stripWhiteSpacesFromString = (text: string): string => {\n return text\n .replace(new RegExp('\\\\r?\\\\n|\\\\r+', 'g'), ' ')\n .replace(new RegExp('\\\\s+', 'g'), ' ')\n .trim();\n};\n\nexport const submitReview = (\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n) => {\n const { request } = context;\n const { user } = request;\n if (user && request) {\n const input = new SubmitUserReviewInput(\n product.RecordId.toString(),\n getRnrPartnerId(context.actionContext),\n request.apiSettings.channelId.toString(),\n request.locale,\n {\n productName: product && product.Name,\n rating,\n reviewText: stripWhiteSpacesFromString(text),\n title: stripWhiteSpacesFromString(title),\n userEmail: user.emailAddress,\n userName: user.name\n },\n request.user.token,\n getRnrAuthEndpointId(context.actionContext)\n );\n\n submitUserReview(input, context.actionContext)\n .then(reviewId => {\n const review = reviewId\n ? {\n rating,\n title: stripWhiteSpacesFromString(title),\n reviewText: stripWhiteSpacesFromString(text),\n submittedDateTime: new Date(),\n helpfulPositive: userReview ? userReview.helpfulPositive : 0,\n helpfulNegative: userReview ? userReview.helpfulNegative : 0,\n reviewId,\n userName: request.user.firstName || request.user.name\n }\n : userReview;\n\n const getReviewInput = new GetUserReviewInput(input.productId!, input.tenantId, input.authorization, input.serviceEndpoint);\n context.actionContext.update(getReviewInput, review);\n\n if (onReviewSubmission) {\n onReviewSubmission(!!reviewId);\n }\n })\n .catch(() => {\n const productId = product.RecordId;\n context.telemetry.error(`Failed to submit review for product with recordId: ${productId}`);\n context.telemetry.debug(`Failed to submit review for product with recordId: ${productId}`);\n if (onReviewSubmission) {\n onReviewSubmission(false);\n }\n });\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { OrderBy } from '../actions/inputs/get-product-reviews-input';\n\nexport interface IRnrKeyValuePair {\n key: string;\n value: string;\n}\n\nexport interface IRnrOrderByKeyValuePair {\n key: OrderBy;\n value: string;\n}\n\nexport function setFocusOnElement(id: string): void {\n const element = document.getElementById(id);\n if (element) {\n element.focus();\n }\n}\n\nexport const TOGGLE_REVIEW_MODAL_BUTTON_ID: string = 'reviewproductid';\nexport const TOGGLE_EDIT_MODAL_BUTTON_ID: string = 'ms-write-review__edit';\nexport const TOGGLE_EDIT_MODAL_BUTTON_CARD_ID: string = 'ms-reviews-list__edit';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { format, INodeProps, Progress } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IHistogramItemsProps {\n ratingsSummary: RatingsSummary;\n resources: IHistogramItemsResources;\n locale: string;\n onClick(stars: number): void;\n}\n\nexport interface IHistogramItemsResources {\n barItemAriaLabel: string;\n}\n\nexport interface IHistogramItemViewProps {\n starLabel: React.ReactElement;\n bar: React.ReactElement;\n percentage: React.ReactElement;\n buttonProps: INodeProps;\n}\n\n/**\n * CartLineItems component.\n */\n\nexport const HistogramItems = (props: IHistogramItemsProps): IHistogramItemViewProps[] => {\n const { ratingsSummary } = props;\n const totalRatingsCount: number = ratingsSummary.totalRatingsCount || 0;\n if (totalRatingsCount === 0) {\n return [];\n }\n return [\n renderItem(props, 5, ratingsSummary.star5Count, totalRatingsCount),\n renderItem(props, 4, ratingsSummary.star4Count, totalRatingsCount),\n renderItem(props, 3, ratingsSummary.star3Count, totalRatingsCount),\n renderItem(props, 2, ratingsSummary.star2Count, totalRatingsCount),\n renderItem(props, 1, ratingsSummary.star1Count, totalRatingsCount)\n ];\n};\n\nconst renderItem = (props: IHistogramItemsProps, stars: number, count?: number, totalCount?: number): IHistogramItemViewProps => {\n count = count || 0;\n totalCount = totalCount || 0;\n const percentage = totalCount === 0 ? 0 : count / totalCount;\n const formattedPercent = new Intl.NumberFormat(props.locale, { style: 'percent' }).format(percentage);\n const ariaLabel = format(props.resources.barItemAriaLabel, stars, formattedPercent);\n\n return {\n starLabel: (\n \n ),\n percentage: (\n \n ),\n bar: ,\n buttonProps: {\n tag: 'button',\n className: 'ms-ratings-histogram__item',\n onClick: () => {\n props.onClick(stars);\n }\n }\n };\n};\n\nexport const AverageRatingNumber: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return (\n

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

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

    {props.summary.totalRatingsCount}

    ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { format, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createRatingsReviewsStateInput } from '../../actions/ratings-reviews-state-data-action';\nimport { AverageRatingNumber, HistogramItems, IHistogramItemViewProps, TotalReviews } from './component/components';\nimport { IRatingsHistogramData } from './ratings-histogram.data';\nimport { IRatingsHistogramProps } from './ratings-histogram.props.autogenerated';\n\nexport interface IRatingsHistogramViewProps extends IRatingsHistogramProps {\n className: string;\n histogramItems: IHistogramItemViewProps[];\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n averageRating: React.ReactNode;\n averageNumber: React.ReactNode;\n totalReviews: React.ReactNode;\n histogramProps: INodeProps;\n ratingsSummaryProps: INodeProps;\n callbacks: IRatingsHistogramCallbacks;\n}\n\nexport interface IRatingsHistogramCallbacks {\n selectFilterBy(stars: number): void;\n}\n\n/**\n * RatingsHistogram component.\n * @extends {React.Component>}\n */\n@observer\nclass RatingsHistogram extends React.PureComponent> {\n constructor(props: IRatingsHistogramProps) {\n super(props);\n this.selectFilterBy = this.selectFilterBy.bind(this);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const ratingCount = ratingsSummary && ratingsSummary.totalRatingsCount ? `${ratingsSummary.totalRatingsCount}` : '0';\n\n const completeClass = classname('ms-ratings-histogram', className);\n const viewProps: IRatingsHistogramViewProps = {\n ...this.props,\n className: completeClass,\n callbacks: {\n selectFilterBy: this.selectFilterBy\n },\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n histogramItems: ratingsSummary\n ? HistogramItems({\n ratingsSummary,\n resources: { ...resources },\n locale: this.props.context.request.locale,\n onClick: this.selectFilterBy\n })\n : [],\n averageRating: ratingsSummary && (\n \n ),\n averageNumber: ratingsSummary && ,\n totalReviews: ratingsSummary && ,\n ratingsSummaryProps: { className: 'ms-ratings-histogram__summary' },\n heading: heading && (\n \n ),\n histogramProps: { className: 'ms-ratings-histogram__histogram' }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public selectFilterBy(stars: number): void {\n const filterKey = `${stars}`;\n this.props.context.actionContext.update(createRatingsReviewsStateInput({ filterKey }), { filterKey });\n }\n}\n\nexport default RatingsHistogram;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHistogramItemViewProps } from './component/components';\nimport { IRatingsHistogramViewProps } from './ratings-histogram';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { ReportReviewConcernInput } from './inputs/report-review-concern-input';\n\nasync function reportReviewConcern(input: ReportReviewConcernInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n throw new Error(\n `[SubmitHelpfulnessVote] Invalid input. ReviewId=${input.reviewId},tenantId=${input.tenantId},locale= ${input.locale},`\n );\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/concerns/review/${input.reviewId}` + `?tenantId=${input.tenantId}` + `&locale=${input.locale}`;\n\n const requestBody = {\n concernCategory: input.concernCategory\n };\n\n const requestHeader = {\n headers: {\n Authorization: `id_token ${input.authToken}`\n }\n };\n\n return sendRequest(requestUrl, 'post', requestBody, requestHeader)\n .then(response => {\n return response.status === 200 || response.status === 201;\n })\n .catch(error => {\n ctx.trace('[ReportReviewConcernInput] Failed to report a concern');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[ReportReviewConcernInput] Failed to report a concern');\n return false;\n });\n}\n\nfunction inputIsValid(input: ReportReviewConcernInput): boolean {\n return input && input.reviewId.length > 0 && input.tenantId.length > 0 && input.locale.length > 0 && input.authToken.length > 0;\n}\n\nexport const reportReviewConcernDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/report-review-concern',\n action: >reportReviewConcern\n});\n\nexport default reportReviewConcernDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { SubmitHelpfulnessVoteInput } from './inputs/submit-helpfulness-vote-input';\n\nasync function submitHelpfulnessVote(input: SubmitHelpfulnessVoteInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n throw new Error(\n `[SubmitHelpfulnessVote] Invalid input. ReviewId=${input.reviewId},tenantId=${input.tenantId}, locale= ${input.locale},`\n );\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/votes/review/${input.reviewId}` + `?tenantId=${input.tenantId}` + `&locale=${input.locale}`;\n\n const requestBody = {\n isHelpful: !!input.isHelpful\n };\n\n const requestHeader = {\n headers: {\n Authorization: `id_token ${input.authToken}`\n }\n };\n\n return sendRequest(requestUrl, 'post', requestBody, requestHeader)\n .then(response => {\n return response.status === 200 || response.status === 201;\n })\n .catch(error => {\n ctx.trace('[SubmitHelpfulnessVote] Failed to vote on a review');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[SubmitHelpfulnessVote] Failed to vote on a review');\n return false;\n });\n}\n\nfunction inputIsValid(input: SubmitHelpfulnessVoteInput): boolean {\n return input && input.reviewId.length > 0 && input.tenantId.length > 0 && input.locale.length > 0 && input.authToken.length > 0;\n}\n\nexport const submitHelpfulnessVoteDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/submit-helpfulness-vote',\n action: >submitHelpfulnessVote\n});\n\nexport default submitHelpfulnessVoteDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\nexport enum ReviewConcernCategory {\n OffensiveContent = '1',\n ReviewResponse = '7',\n SpamAdvertising = '8',\n Profanity = '9'\n}\n\n/**\n * ReportReviewConcern Input Action.\n */\nexport class ReportReviewConcernInput implements IActionInput {\n public reviewId: string;\n\n public tenantId: string;\n\n public locale: string;\n\n public serviceEndpoint: string;\n\n public concernCategory: string;\n\n public authToken: string;\n\n constructor(reviewId: string, tenantId: string, locale: string, concernCategory: string, authToken: string, serviceEndpoint: string) {\n this.reviewId = reviewId;\n this.tenantId = tenantId;\n this.locale = locale;\n this.concernCategory = concernCategory;\n this.authToken = authToken;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'ReportReviewConcern';\n\n public getCacheObjectType = () => 'ReportReviewConcern';\n\n public dataCacheType = (): CacheType => 'none';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n format,\n getPayloadObject,\n getTelemetryAttributes,\n ILabeledDropdownOption,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IReviewCountResources {\n pageReviewCountText: string;\n}\n\nexport interface IReviewCountProps {\n resources: IReviewCountResources;\n currentPage: number;\n reviewsCount: number;\n reviewsShownOnEachPage: number;\n}\n\nexport const ReviewCount: React.FC = (props: IReviewCountProps) => {\n const { currentPage, resources, reviewsCount, reviewsShownOnEachPage } = props;\n\n return (\n \n {format(\n resources.pageReviewCountText,\n _getReviewStartNumber(currentPage, reviewsShownOnEachPage),\n _getReviewEndNumber(currentPage, reviewsCount, reviewsShownOnEachPage),\n reviewsCount\n )}\n \n );\n};\n\nexport interface IPageControlResources {\n previousButtonText: string;\n nextButtonText: string;\n pageReviewAriaLabel: string;\n}\n\nexport interface IPageControlsProps {\n resources: IPageControlResources;\n currentPage: number;\n reviewsCount: number;\n reviewsShownOnEachPage: number;\n selectedSortByOption: ILabeledDropdownOption;\n selectedFilterByOption: ILabeledDropdownOption;\n telemetryContent?: ITelemetryContent;\n updateReviews(\n skipItems: number,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ): Promise;\n}\n\nexport const PageControls: React.FC = (props: IPageControlsProps) => {\n const { currentPage, resources, reviewsCount, reviewsShownOnEachPage } = props;\n const previousPageClick = React.useCallback(() => {\n return _getPreviousPageData(props);\n }, [props]);\n const nextPageClick = React.useCallback(() => {\n return _getNextPageData(props);\n }, [props]);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Next);\n const nextAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Previous;\n const previousAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n return (\n
    \n {_hasPreviousPage(currentPage) && (\n \n {resources.previousButtonText}\n \n )}\n {_hasNextPage(currentPage, reviewsCount, reviewsShownOnEachPage) && (\n \n {resources.nextButtonText}\n \n )}\n
    \n );\n};\n\nconst _hasPreviousPage = (currentPage: number): boolean => {\n return currentPage > 1;\n};\n\nconst _hasNextPage = (currentPage: number, reviewsCount: number, reviewsShownOnEachPage: number): boolean => {\n return _getPagesCount(reviewsCount, reviewsShownOnEachPage) > currentPage;\n};\n\nconst _getReviewsShown = (reviewsShownOnEachPage: number) => {\n return Math.min(25, reviewsShownOnEachPage);\n};\n\nconst _getPagesCount = (reviewsCount: number, reviewsShownOnEachPage: number): number => {\n return Math.ceil(reviewsCount / _getReviewsShown(reviewsShownOnEachPage));\n};\n\nconst _paginationAriaLabel = (\n pageReviewAriaLabel: string,\n currentPage: number,\n reviewsCount: number,\n reviewsShownOnEachPage: number,\n isNextPage: boolean,\n page?: number\n): string => {\n const pageModifier = isNextPage ? 1 : -1;\n return format(\n pageReviewAriaLabel,\n _getReviewStartNumber(currentPage, reviewsShownOnEachPage, currentPage + pageModifier),\n _getReviewEndNumber(currentPage, reviewsCount, reviewsShownOnEachPage, currentPage + pageModifier),\n reviewsCount\n );\n};\n\nconst _getReviewStartNumber = (currentPage: number, reviewsShownOnEachPage: number, page?: number): number => {\n return ((page || currentPage) - 1) * _getReviewsShown(reviewsShownOnEachPage) + 1;\n};\n\nconst _getReviewEndNumber = (currentPage: number, reviewsCount: number, reviewsShownOnEachPage: number, page?: number): number => {\n const pageUsed = page || currentPage;\n const pageReviewCount = pageUsed * _getReviewsShown(reviewsShownOnEachPage);\n return pageReviewCount < reviewsCount ? pageReviewCount : reviewsCount;\n};\n\nconst _getPreviousPageData = async (props: IPageControlsProps) => {\n await props.updateReviews(\n _getReviewStartNumber(props.currentPage, props.reviewsShownOnEachPage) - 1 - _getReviewsShown(props.reviewsShownOnEachPage),\n props.selectedSortByOption,\n props.selectedFilterByOption,\n props.currentPage - 1,\n false\n );\n};\n\nconst _getNextPageData = async (props: IPageControlsProps) => {\n await props.updateReviews(\n _getReviewEndNumber(props.currentPage, props.reviewsCount, props.reviewsShownOnEachPage),\n props.selectedSortByOption,\n props.selectedFilterByOption,\n props.currentPage + 1,\n 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 { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n Alert,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ReviewConcernCategory } from '../../../actions/inputs/report-review-concern-input';\nimport { IRnrKeyValuePair } from '../../../common/rnrInterface';\n\nexport interface IReportReviewModalProps {\n resources: IReportReviewModalResources;\n context: ICoreContext>;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n reportedKey: string;\n hasError: boolean;\n telemetryContent?: ITelemetryContent;\n onModalToggle(): void;\n onRadioChange(event: React.ChangeEvent): void;\n reportReview(): void;\n}\n\nexport interface IReportReviewModalResources {\n reportConcernText: string;\n feedbackThankYouText: string;\n reportModalMessage: string;\n reportSubmittedMessage: string;\n reportSpamText: string;\n offensiveContentText: string;\n profanityContentText: string;\n okReportReviewText: string;\n cancelReportReviewText: string;\n reportReviewButtonText: string;\n errorMessageText: string;\n}\n\nexport interface IReportReviewModalViewProps {\n modal: INodeProps;\n modalHeader: INodeProps;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n header: React.ReactElement;\n headerSubmitted: React.ReactElement;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n succesfulButton: React.ReactElement;\n reportMessage: React.ReactElement;\n reportSubmittedMessage: React.ReactElement;\n radioButtons: React.ReactElement;\n error: React.ReactElement;\n}\n\nlet reportConcernDropdownOptions: IRnrKeyValuePair[];\n\n/**\n * CartLineItems component.\n */\n\nexport const ReportReviewModal = (props: IReportReviewModalProps): IReportReviewModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SubmitReview);\n const submitReviewAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.SuccessButton;\n const successAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n reportConcernDropdownOptions = [\n { key: ReviewConcernCategory.SpamAdvertising, value: props.resources.reportSpamText },\n { key: ReviewConcernCategory.OffensiveContent, value: props.resources.offensiveContentText },\n { key: ReviewConcernCategory.Profanity, value: props.resources.profanityContentText }\n ];\n\n return {\n modal: {\n tag: Modal,\n className: 'ms-report-review-modal msc-modal-input-required',\n toggle: props.onModalToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: { tag: ModalHeader, toggle: props.onModalToggle, className: 'ms-report-review-modal-header' },\n modalFooter: { tag: ModalFooter, className: 'ms-report-review-modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-report-review-modal-body' },\n header:

    {props.resources.reportConcernText}

    ,\n headerSubmitted:

    {props.resources.feedbackThankYouText}

    ,\n cancelButton: (\n \n ),\n submitButton: (\n \n ),\n succesfulButton: (\n \n ),\n reportMessage:

    {props.resources.reportModalMessage}

    ,\n reportSubmittedMessage:

    {props.resources.reportSubmittedMessage}

    ,\n radioButtons: radioPairs(props),\n error: (\n \n {props.resources.errorMessageText}\n \n )\n };\n};\n\nconst radioPairs = (props: IReportReviewModalProps) => {\n const pairs = [];\n for (const option of reportConcernDropdownOptions) {\n const inputId = `report-review-${option.key}`;\n const checked = option.key === props.reportedKey;\n pairs.push(\n
    \n \n \n
    \n );\n }\n\n return
    {pairs}
    ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric, isOboRequest } from '@msdyn365-commerce/core';\nimport { Button, format, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { TOGGLE_EDIT_MODAL_BUTTON_CARD_ID } from '../../../common/rnrInterface';\n\nexport interface IReviewCardResources {\n wasReviewHelpfulText: string;\n yesButtonText: string;\n noButtonText: string;\n editReviewCardText: string;\n reportedText: string;\n reportConcernText: string;\n reviewRatingNarratorText: string;\n}\n\nexport interface IReviewCardProps {\n review: Review;\n resources: IReviewCardResources;\n context: ICoreContext>;\n isUserReview?: boolean;\n parentId: string;\n parentType: string;\n reportedReviews: string[];\n returnRef: React.RefObject | undefined;\n reportedReviewId: string;\n votedReviews: { reviewId: string; approved: boolean }[];\n toggleWriteReviewModal?(): void;\n toggleReportReviewModal(reviewId: string): void;\n updateReviewHelpfulness(reviewId: string, isHelpful: boolean): void;\n}\n\nexport interface IReviewCardViewProps {\n cardProps: INodeProps;\n name: React.ReactElement;\n rating: React.ReactElement;\n date: React.ReactElement;\n reviewTitle: React.ReactElement;\n reviewText: React.ReactElement;\n ratingHelpfulLabel?: React.ReactElement;\n like?: React.ReactElement;\n dislike?: React.ReactElement;\n edit: React.ReactNode;\n report: React.ReactNode;\n responseName: React.ReactNode;\n responseDate: React.ReactNode;\n responseText: React.ReactNode;\n cardBodyProps: INodeProps;\n responseProps: INodeProps;\n reviewProps: INodeProps;\n controlsProps: INodeProps;\n headerProps: INodeProps;\n}\n\n/**\n * Review card component.\n */\n\nexport const ReviewCard = (props: IReviewCardProps): IReviewCardViewProps => {\n const className = props.isUserReview ? 'ms-reviews-list__card ms-reviews-list__user-review' : 'ms-reviews-list__card';\n return {\n cardProps: { className, key: props.review.reviewId },\n name:

    {props.review.userName}

    ,\n rating: rating(props),\n date:

    {renderDate(props, props.review.submittedDateTime)}

    ,\n reviewTitle:

    {props.review.title}

    ,\n reviewText:

    {props.review.reviewText}

    ,\n ratingHelpfulLabel: props.isUserReview ? (\n undefined\n ) : (\n

    {props.resources.wasReviewHelpfulText}

    \n ),\n like: props.isUserReview ? undefined : voteHelpfulButton(props, true),\n dislike: props.isUserReview ? undefined : voteHelpfulButton(props, false),\n edit: editButton(props),\n report: reportToggle(props),\n responseName: props.review.userResponse ? (\n

    {props.review.userResponse.responderName}

    \n ) : (\n undefined\n ),\n responseText: props.review.userResponse ? (\n

    {props.review.userResponse.responseText}

    \n ) : (\n undefined\n ),\n responseDate: props.review.userResponse ? (\n

    {renderDate(props, props.review.userResponse.submittedDateTime)}

    \n ) : (\n undefined\n ),\n cardBodyProps: { className: 'ms-reviews-list__card-body' },\n responseProps: { className: 'ms-reviews-list__response' },\n reviewProps: { className: 'ms-reviews-list__review' },\n controlsProps: { className: 'ms-reviews-list__card-controls' },\n headerProps: { className: 'ms-reviews-list__card-header' }\n };\n};\n\nconst rating = (props: IReviewCardProps) => {\n return (\n \n );\n};\n\nconst isVotedFor = (props: IReviewCardProps, isHelpful: boolean): boolean => {\n for (let i = 0; i < props.votedReviews.length; i++) {\n if (props.votedReviews[i].reviewId === props.review.reviewId) {\n return props.votedReviews[i].approved === isHelpful;\n }\n }\n\n return false;\n};\n\nconst voteHelpfulButton = (props: IReviewCardProps, isHelpful: boolean) => {\n const isVoted = isVotedFor(props, isHelpful);\n const isDisabled = props.isUserReview || isVoted || isOboRequest(props.context.request) ? 'disabled' : '';\n let className = isHelpful ? 'ms-reviews-list__like' : 'ms-reviews-list__dislike';\n className = `${className} ${isDisabled}`;\n const label = isHelpful ? props.resources.yesButtonText : props.resources.noButtonText;\n let voteCount = (isHelpful ? props.review.helpfulPositive : props.review.helpfulNegative) || 0;\n voteCount = isVoted ? voteCount + 1 : voteCount;\n const title = `(${voteCount})`;\n const user = props.context.request.user;\n const onClickMethod = () => {\n props.updateReviewHelpfulness(props.review.reviewId!, isHelpful);\n };\n const onClick = isDisabled ? undefined : onClickMethod;\n\n if (user.isAuthenticated) {\n return (\n \n );\n }\n return (\n \n );\n};\n\nconst editButton = (props: IReviewCardProps) => {\n if (props.isUserReview && !isOboRequest(props.context.request)) {\n return (\n \n );\n }\n\n return undefined;\n};\n\nconst renderDate = (props: IReviewCardProps, date?: Date): string | Date => {\n if (!date) {\n return '';\n }\n\n try {\n return new Intl.DateTimeFormat(props.context.request.locale, { month: 'long', day: 'numeric', year: 'numeric' }).format(\n new Date(date)\n );\n } catch {\n return date;\n }\n};\n\n/**\n * On Click Handler.\n * @param props -Review card props.\n * @returns Report review modal.\n */\nconst onClick = (props: IReviewCardProps) => () => {\n props.toggleReportReviewModal(props.review.reviewId!);\n};\n\nconst reportToggle = (props: IReviewCardProps) => {\n const user = props.context.request.user;\n if (props.isUserReview || isOboRequest(props.context.request)) {\n return undefined;\n } else if (!user.isAuthenticated) {\n return (\n \n );\n }\n\n if (props.reportedReviews.includes(props.review.reviewId!)) {\n return

    {props.resources.reportedText}

    ;\n }\n\n const ref = props.review.reviewId === props.reportedReviewId ? props.returnRef : undefined;\n\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\n/**\n * SubmitHelpfulnessVote Input Action.\n */\nexport class SubmitHelpfulnessVoteInput implements IActionInput {\n public reviewId: string;\n\n public tenantId: string;\n\n public locale: string;\n\n public serviceEndpoint: string;\n\n public isHelpful: boolean;\n\n public authToken: string;\n\n constructor(reviewId: string, tenantId: string, locale: string, isHelpful: boolean, authToken: string, serviceEndpoint: string) {\n this.reviewId = reviewId;\n this.tenantId = tenantId;\n this.locale = locale;\n this.isHelpful = isHelpful;\n this.authToken = authToken;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'SubmitHelpfulnessVote';\n\n public getCacheObjectType = () => 'SubmitHelpfulnessVote';\n\n public dataCacheType = (): CacheType => 'none';\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n getRnrAuthEndpointId,\n getRnrEndpointId,\n getRnrPartnerId,\n getSelectedProductIdFromActionInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n format,\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n LabeledDropdown\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { reportReviewConcern, submitHelpfulnessVote } from '../..';\nimport { getReviewsForGivenProduct } from '../../actions/get-product-reviews';\nimport { GetProductReviewsInput } from '../../actions/inputs/get-product-reviews-input';\nimport { ReportReviewConcernInput, ReviewConcernCategory } from '../../actions/inputs/report-review-concern-input';\nimport { SubmitHelpfulnessVoteInput } from '../../actions/inputs/submit-helpfulness-vote-input';\nimport { IReviewModalViewProps, ReviewModal, submitReview } from '../../common/review-modal';\nimport { IRnrKeyValuePair, IRnrOrderByKeyValuePair } from '../../common/rnrInterface';\nimport { PageControls, ReviewCount } from './components/components';\nimport { IReportReviewModalViewProps, ReportReviewModal } from './components/report-review-modal';\nimport { IReviewCardViewProps, ReviewCard } from './components/review-card';\nimport { IReviewsListData } from './reviews-list.data';\nimport { IReviewsListProps } from './reviews-list.props.autogenerated';\n\nexport interface IReviewsListState {\n skipItems: number;\n listOfReviews: Review[];\n currentPage: number;\n reviewsCount: number;\n showSpinner: boolean;\n isFilterApplied: boolean;\n selectedSortByOption: ILabeledDropdownOption;\n selectedFilterByOption: ILabeledDropdownOption;\n userReviewRating: number;\n userReviewTitle: string;\n userReviewText: string;\n isReviewModalOpen: boolean;\n hasReviewError: boolean;\n isReportModalOpen: boolean;\n hasReportError: boolean;\n reportingReviewId: string;\n reportedKey: string;\n reported: boolean;\n reportedReviews: string[];\n votedReviews: { reviewId: string; approved: boolean }[];\n}\n\nexport interface IReviewsListCallbacks {\n toggleModal(): void;\n updateReviewTitle(title: string): void;\n updateReviewText(text: string): void;\n updateRating(rating: number): void;\n onReviewSubmitted(isSuccessful: boolean): void;\n submitReview(\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: Msdyn365.ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n ): void;\n updateReviewHelpfulnessVote(reviewId: string, isHelpful: boolean): void;\n toggleReportModal(reviewId: string): void;\n reportReview(reviewId: string, reportedKey: string): void;\n updateSortByDropdown(notification: ILabeledDropdownOnChangeNotification): void;\n updateFilterByDropdown(notification: ILabeledDropdownOnChangeNotification): void;\n updateReviews(\n skipItems: number,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ): void;\n}\n\nexport interface IReviewsListViewProps extends IReviewsListProps {\n state: IReviewsListState;\n className: string;\n callbacks: IReviewsListCallbacks;\n moduleProps: IModuleProps;\n reviewModal: IReviewModalViewProps;\n reportReviewModal: IReportReviewModalViewProps;\n sortByDropdown: React.ReactNode;\n filterByDropdown: React.ReactNode;\n averageRating: React.ReactNode;\n reviewCount: React.ReactElement;\n refineReviewsProps: INodeProps;\n reviewsListProps: INodeProps;\n reviewCards: IReviewCardViewProps[];\n userReview?: IReviewCardViewProps;\n pageControls: React.ReactNode;\n noReviewsMessage: React.ReactElement;\n noReviewsWithFilterMessage: React.ReactElement;\n heading: React.ReactNode;\n sortByOptions: IRnrOrderByKeyValuePair[];\n filterByOptions: IRnrOrderByKeyValuePair[];\n}\n\n/**\n *\n * ReviewsList component.\n * @extends {React.Component, IReviewsListState>}\n */\n@observer\nclass ReviewsList extends React.Component, IReviewsListState> {\n public sortByDropdownOptions: IRnrOrderByKeyValuePair[] = [\n { key: 'MostHelpful', value: this.props.resources.mostHelpfulSortOptionText },\n { key: 'MostRecent', value: this.props.resources.mostRecentSortOptionText },\n { key: 'HighestRating', value: this.props.resources.highestRatedSortOptionText },\n { key: 'LowestRating', value: this.props.resources.lowestRatedSortOptionText }\n ];\n\n public filterByDropdownOptions: IRnrKeyValuePair[] = [\n { key: '1;2;3;4;5', value: this.props.resources.allRatinsFilterByOptionText },\n { key: '5', value: this.props.resources.fiveStarFilterByOptionText },\n { key: '4', value: this.props.resources.fourStarFilterByOptionText },\n { key: '3', value: this.props.resources.threeStarFilterByOptionText },\n { key: '2', value: this.props.resources.twoStarFilterByOptionText },\n { key: '1', value: this.props.resources.oneStarFilterByOptionText }\n ];\n\n private readonly _userReviewModalToggle: React.RefObject;\n\n private readonly _userReportModalToggle: React.RefObject;\n\n private readonly telemetryContent?: ITelemetryContent;\n private readonly reviewsListCallbacks: IReviewsListCallbacks = {\n updateReviewTitle: (title: string): void => {\n this.setState({ userReviewTitle: title });\n },\n updateReviewText: (text: string): void => {\n this.setState({ userReviewText: text });\n },\n updateRating: (rating: number): void => {\n this.setState({ userReviewRating: rating });\n },\n onReviewSubmitted: (isSuccessful: boolean): void => {\n if (isSuccessful) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n },\n submitReview,\n // @ts-expect-error\n toggleModal: this._toggleReviewModal,\n // @ts-expect-error\n updateReviewHelpfulnessVote: this.updateReviewHelpfulnessVote,\n toggleReportModal: (reviewId: string): void => {\n this.state.isReportModalOpen ? this._onReportModalOpen(reviewId) : this._onReportModalClose();\n },\n // @ts-expect-error\n reportReview: this._reportReviewCallback,\n // @ts-expect-error\n updateFilterByDropdown: this.updateFilterByDropdown,\n // @ts-expect-error\n updateSortByDropdown: this.updateSortByDropdown,\n // @ts-expect-error\n updateReviews: this.updateReviews\n };\n constructor(props: IReviewsListProps) {\n super(props);\n const {\n userReview: { result: userReview }\n } = this.props.data;\n\n this.state = {\n skipItems: 0,\n reviewsCount: 0,\n listOfReviews: [],\n currentPage: 1,\n showSpinner: false,\n isFilterApplied: false,\n selectedSortByOption: this.sortByDropdownOptions[0],\n selectedFilterByOption: this.filterByDropdownOptions[0],\n userReviewRating: userReview ? userReview.rating : 0,\n userReviewText: userReview ? userReview.reviewText : '',\n userReviewTitle: userReview ? userReview.title : '',\n isReviewModalOpen: false,\n hasReviewError: false,\n isReportModalOpen: false,\n hasReportError: false,\n reported: false,\n reportedKey: ReviewConcernCategory.SpamAdvertising,\n reportingReviewId: '',\n reportedReviews: [],\n votedReviews: []\n };\n\n this._userReviewModalToggle = React.createRef();\n this._userReportModalToggle = React.createRef();\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public shouldComponentUpdate(nextProps: IReviewsListProps, nextState: IReviewsListState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n public componentDidMount = async () => {\n this.props.data.reviewsList.then(reviewsList => {\n if (\n reviewsList &&\n reviewsList.pagingInfo &&\n reviewsList.pagingInfo.totalItems &&\n reviewsList.items &&\n reviewsList.items.length > 0\n ) {\n this.setState({\n listOfReviews: reviewsList.items,\n reviewsCount: reviewsList.pagingInfo.totalItems\n });\n }\n });\n await this.updateReviews(0, this.state.selectedSortByOption, this.state.selectedFilterByOption, 1, this.state.isFilterApplied);\n\n reaction(\n () => this.props.data.ratingsReviewsState.result && this.props.data.ratingsReviewsState.result.filterKey,\n async (filterKey: string | undefined) => {\n const filterKeyValue = Number(filterKey);\n const dropdownItemsCount = this.filterByDropdownOptions.length;\n if (filterKey && !isNaN(filterKeyValue) && filterKeyValue < dropdownItemsCount) {\n const filterByOption = this.filterByDropdownOptions.find((option: IRnrKeyValuePair) => option.key === filterKey);\n if (!filterByOption) {\n this.props.telemetry.warning(`[reviews-list] cannot find filter with key ${filterKey}`);\n } else {\n await this.updateReviews(0, this.state.selectedSortByOption, filterByOption, 1, true);\n const selectedIndex = dropdownItemsCount - filterKeyValue;\n this.setState({\n selectedFilterByOption: this.filterByDropdownOptions[selectedIndex]\n });\n }\n }\n }\n );\n };\n public render(): JSX.Element | null {\n const { className, heading, reviewsShownOnEachPage } = this.props.config;\n const { currentPage, reviewsCount, selectedFilterByOption, selectedSortByOption } = this.state;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const resources = this.props.resources;\n const completeClass = classname('ms-reviews-list', className);\n const viewProps: IReviewsListViewProps = {\n ...this.props,\n state: this.state,\n className: completeClass,\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n callbacks: this.reviewsListCallbacks,\n reviewModal: this._userReviewModal(),\n reportReviewModal: this._reportReviewModal(),\n filterByDropdown: (\n \n ),\n sortByDropdown: (\n \n ),\n averageRating: ratingsSummary && (\n \n ),\n reviewCount: (\n \n ),\n refineReviewsProps: { className: 'ms-reviews-list__refiners' },\n reviewsListProps: { className: 'ms-reviews-list__reviews' },\n reviewCards: this._reviewCards(this.state.listOfReviews),\n userReview: this._userReview(),\n pageControls: (\n \n ),\n noReviewsMessage: (\n \n {resources.noReviewsMessage}\n \n ),\n noReviewsWithFilterMessage: (\n \n {resources.noReviewsWithSelectedFilterMessage}\n \n ),\n heading: heading && heading.text && (\n \n ),\n sortByOptions: this.sortByDropdownOptions,\n filterByOptions: this.filterByDropdownOptions\n } as IReviewsListViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n private readonly _userReview = () => {\n const userReview = this.props.data.userReview.result;\n\n return userReview && this._reviewCard(userReview, true);\n };\n\n private readonly _reviewCards = (reviewList: Review[]) => {\n const userReview = this.props.data.userReview.result;\n const reviewElements: IReviewCardViewProps[] = [];\n\n for (const review of reviewList) {\n if (!review.isTakenDown && review.isPublished && userReview ? review.reviewId !== userReview.reviewId : true) {\n reviewElements.push(this._reviewCard(review, false));\n }\n }\n return reviewElements;\n };\n\n private readonly _reviewCard = (review: Review, userReview: boolean): IReviewCardViewProps => {\n return ReviewCard({\n review,\n resources: { ...this.props.resources },\n context: this.props.context,\n isUserReview: userReview,\n parentId: this.props.id,\n parentType: this.props.typeName,\n reportedReviews: this.state.reportedReviews,\n returnRef: this._userReportModalToggle,\n reportedReviewId: this.state.reportingReviewId,\n toggleWriteReviewModal: this._toggleReviewModal,\n toggleReportReviewModal: this._onReportModalOpen,\n updateReviewHelpfulness: this.updateReviewHelpfulnessVote,\n votedReviews: this.state.votedReviews\n });\n };\n\n private readonly _userReviewModal = (): IReviewModalViewProps => {\n return ReviewModal({\n userReview: this.props.data.userReview.result,\n product: this.props.data.product.result,\n resources: { ...this.props.resources },\n context: this.props.context,\n parentId: this.props.id,\n parentType: this.props.typeName,\n isOpen: this.state.isReviewModalOpen,\n rating: this.state.userReviewRating,\n reviewTitle: this.state.userReviewTitle,\n reviewText: this.state.userReviewText,\n onModalToggle: this._toggleReviewModal,\n onTitleChange: this._onTitleChange,\n onTextChange: this._onTextChange,\n onRatingChange: this._onRatingChange,\n onReviewComplete: this._onReviewComplete,\n renderContextId: 'writeReview-list',\n returnRef: this._userReviewModalToggle,\n hasError: this.state.hasReviewError,\n modalCSS: 'ms-reviews-list'\n });\n };\n\n private readonly _onTitleChange = (event: React.ChangeEvent): void => {\n this.reviewsListCallbacks.updateReviewTitle(event.target.value);\n };\n\n private readonly _onTextChange = (event: React.ChangeEvent): void => {\n this.reviewsListCallbacks.updateReviewText(event.target.value);\n };\n\n private readonly _onRatingChange = (value: number): void => {\n this.reviewsListCallbacks.updateRating(value);\n };\n\n private readonly _toggleReviewModal = (): void => {\n const userReview = this.props.data.userReview.result;\n if (this.state.isReviewModalOpen) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({\n isReviewModalOpen: true,\n userReviewText: userReview!.reviewText,\n userReviewTitle: userReview!.title,\n userReviewRating: userReview!.rating\n });\n }\n };\n\n private readonly _onReviewComplete = (isSuccess: boolean): void => {\n if (isSuccess) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n };\n\n private readonly _reportReviewModal = () => {\n return ReportReviewModal({\n resources: { ...this.props.resources },\n context: this.props.context,\n isOpen: this.state.isReportModalOpen,\n returnRef: this._userReportModalToggle,\n reportedKey: this.state.reportedKey,\n onModalToggle: this._onReportModalClose,\n onRadioChange: this._onRadioChange,\n reportReview: this._reportReview,\n hasError: this.state.hasReportError,\n telemetryContent: this.telemetryContent\n });\n };\n\n private readonly _onReportModalOpen = (reviewId: string) => {\n this.setState({\n isReportModalOpen: true,\n reportingReviewId: reviewId,\n reported: false,\n reportedKey: ReviewConcernCategory.SpamAdvertising\n });\n };\n\n private readonly _onReportModalClose = () => {\n this.setState({ isReportModalOpen: false, hasReportError: false });\n };\n\n private readonly _onRadioChange = (event: React.ChangeEvent) => {\n this.setState({ reportedKey: event.currentTarget.getAttribute('data-key') || '' });\n };\n\n private readonly _reportReviewCallback = (reviewId: string, reportedKey: string) => {\n reportReviewConcern(\n new ReportReviewConcernInput(\n reviewId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n reportedKey,\n this.getUserToken(this.props.context.request),\n getRnrAuthEndpointId(this.props.context.actionContext)\n ),\n this.props.context.actionContext\n )\n .then((_value: boolean) => {\n const reportedReview = this.state.reportedReviews;\n reportedReview.push(reviewId);\n this.setState({ reported: true, reportedReviews: reportedReview, hasReportError: false });\n })\n .catch((error: boolean) => {\n this.setState({ hasReportError: true });\n });\n };\n\n private readonly _reportReview = () => {\n this._reportReviewCallback(this.state.reportingReviewId, this.state.reportedKey);\n };\n\n private readonly updateSortByDropdown = async (notification: ILabeledDropdownOnChangeNotification) => {\n await this.updateReviews(0, notification.selectedOption, this.state.selectedFilterByOption, 1, this.state.isFilterApplied);\n };\n\n private readonly updateFilterByDropdown = async (notification: ILabeledDropdownOnChangeNotification) => {\n await this.updateReviews(0, this.state.selectedSortByOption, notification.selectedOption, 1, true);\n };\n\n private readonly updateReviews = async (\n skipItems: number | 0,\n selectedSortByOption: ILabeledDropdownOption,\n selectedFilterByOption: ILabeledDropdownOption,\n currentPage: number,\n isFilterApplied: boolean\n ) => {\n const productId = getSelectedProductIdFromActionInput(this.props.context.actionContext);\n if (productId === undefined) {\n return;\n }\n const result = await getReviewsForGivenProduct(\n // Task #211227597 Remove this hardcoded values.\n new GetProductReviewsInput(\n productId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n getRnrEndpointId(this.props.context.actionContext),\n selectedSortByOption.key,\n selectedFilterByOption.key,\n skipItems < 0 ? 0 : skipItems,\n this.props.config.reviewsShownOnEachPage\n ),\n this.props.context.actionContext\n );\n if (result && result.items && result.pagingInfo && result.pagingInfo.totalItems !== undefined) {\n this.setState({\n currentPage,\n listOfReviews: result.items,\n selectedSortByOption,\n selectedFilterByOption,\n reviewsCount: result.pagingInfo.totalItems,\n isFilterApplied\n });\n }\n };\n\n private readonly _updateVoteUi = (reviewId: string, isHelpful: boolean): void => {\n let alreadyExists = false;\n let list = this.state.votedReviews.map(review => {\n if (review.reviewId === reviewId) {\n review.approved = isHelpful;\n alreadyExists = true;\n }\n return review;\n });\n\n if (!alreadyExists) {\n list = list.concat({ reviewId, approved: isHelpful });\n }\n\n this.setState({ votedReviews: list });\n };\n\n private readonly updateReviewHelpfulnessVote = (reviewId: string, isHelpful: boolean): void => {\n submitHelpfulnessVote(\n new SubmitHelpfulnessVoteInput(\n reviewId,\n getRnrPartnerId(this.props.context.actionContext),\n this.props.context.request.locale,\n isHelpful,\n this.getUserToken(this.props.context.request),\n getRnrAuthEndpointId(this.props.context.actionContext)\n ),\n this.props.context.actionContext\n )\n .then(() => {\n this._updateVoteUi(reviewId, isHelpful);\n })\n .catch((error: Error) => {\n throw new Error('[submitHelpfulnessVote]Error executing action');\n });\n };\n\n private readonly getUserToken = (context: Msdyn365.IRequestContext): string => {\n return context && context.user && context.user.token;\n };\n}\n\nexport default ReviewsList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewModalViewProps } from '../../common/review-modal';\nimport { IReportReviewModalViewProps } from './components/report-review-modal';\nimport { IReviewCardViewProps } from './components/review-card';\nimport { IReviewsListState, IReviewsListViewProps } from './reviews-list';\n\nconst ReviewsListview: React.FC = props => {\n const {\n averageRating,\n filterByDropdown,\n heading,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n reviewCount,\n reviewModal,\n sortByDropdown,\n state,\n userReview\n } = props;\n\n if (!userReview && reviewCards.length === 0 && !state.isFilterApplied) {\n return {noReviewsMessage};\n }\n\n return (\n \n {heading}\n {averageRating}\n {reviewCount}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview)}\n {reviewCards.map(review => {\n return buildReviewCard(review);\n })}\n \n {reviewCards.length === 0 && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(reviewModal, moduleProps)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nconst buildReviewCard = (props: IReviewCardViewProps) => {\n return (\n \n \n {props.rating}\n {props.name}\n \n \n \n {props.reviewTitle}\n {props.date}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {props.ratingHelpfulLabel}\n {props.like}\n {props.dislike}\n {props.edit}\n {props.report}\n \n \n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n {state.reported ? props.headerSubmitted : props.header}\n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n );\n};\n\nexport default ReviewsListview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport const SignInMessage: React.FC<{ text: string }> = (props: { text: string }) => {\n return

    {props.text}

    ;\n};\n\nexport const SignInButton: React.FC<{ text: string; href: string; ariaLabel: string; telemetryContent?: ITelemetryContent }> = (props: {\n text: string;\n href: string;\n ariaLabel: string;\n telemetryContent?: ITelemetryContent;\n}) => {\n const { text, href, ariaLabel, telemetryContent } = props;\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n \n );\n};\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n telemetryContent?: ITelemetryContent;\n onClick(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, telemetryContent, id } = props;\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.WriteReview);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\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 { Review } from '@msdyn365-commerce/commerce-entities';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { IReviewModalViewProps, ReviewModal, submitReview } from '../../common/review-modal';\nimport { TOGGLE_REVIEW_MODAL_BUTTON_ID } from '../../common/rnrInterface';\nimport { ModalToggle, SignInButton, SignInMessage } from './components/components';\nimport { IWriteReviewData } from './write-review.data';\nimport { IWriteReviewProps } from './write-review.props.autogenerated';\n\nexport interface IWriteReviewCallbacks {\n toggleModal(): void;\n updateReviewTitle(title: string): void;\n updateReviewText(text: string): void;\n updateRating(rating: number): void;\n onReviewSubmitted(isSuccessful: boolean): void;\n submitReview(\n product: SimpleProduct,\n title: string,\n text: string,\n rating: number,\n context: Msdyn365.ICoreContext,\n userReview?: Review,\n onReviewSubmission?: (isSuccessful: boolean) => void\n ): void;\n}\n\nexport interface IWriteReviewState {\n rating: number;\n reviewTitle: string;\n reviewText: string;\n isReviewModalOpen: boolean;\n hasReviewError: boolean;\n}\n\nexport interface IWriteReviewViewProps extends IWriteReviewProps {\n state: IWriteReviewState;\n className: string;\n callbacks: IWriteReviewCallbacks;\n signInMessage: React.ReactNode;\n signInButton: React.ReactNode;\n modalToggle: React.ReactNode;\n reviewModal: IReviewModalViewProps;\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n}\n\n/**\n * This module is enables user's to leave ratings and reviews on a specific product\n * WriteReview module.\n * @extends {React.PureComponent>}\n */\nclass WriteReview extends React.PureComponent, IWriteReviewState> {\n private readonly _modalToggleRef: React.RefObject | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n private readonly writeReviewCallbacks: IWriteReviewCallbacks = {\n // @ts-expect-error\n toggleModal: this._toggleReviewModal,\n updateReviewTitle: (title: string): void => {\n this.setState({ reviewTitle: title });\n },\n updateReviewText: (text: string): void => {\n this.setState({ reviewText: text });\n },\n updateRating: (rating: number): void => {\n this.setState({ rating });\n },\n onReviewSubmitted: (isSuccessful: boolean): void => {\n if (isSuccessful) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else {\n this.setState({ hasReviewError: true });\n }\n },\n submitReview\n };\n public constructor(props: IWriteReviewProps) {\n super(props);\n const {\n userReview: { result: userReview }\n } = this.props.data;\n this._toggleReviewModal = this._toggleReviewModal.bind(this);\n this._modalToggleRef = React.createRef();\n const rating = userReview ? userReview.rating : 0;\n const reviewTitle = userReview ? userReview.title : '';\n const reviewText = userReview ? userReview.reviewText : '';\n\n this.state = {\n isReviewModalOpen: false,\n rating,\n reviewTitle,\n reviewText,\n hasReviewError: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n product: { result: product },\n userReview: { result: userReview }\n } = this.props.data;\n\n const userInfo = this.props.context && this.props.context.request && this.props.context.request.user;\n const completeClass = classnames('ms-write-review', 'msc-modal-input-required', className);\n const viewProps = {\n ...this.props,\n state: this.state,\n className: completeClass,\n moduleProps: {\n moduleProps: this.props,\n className: completeClass,\n id: null\n },\n callbacks: this.writeReviewCallbacks,\n signInMessage: ,\n signInButton: (\n \n ),\n modalToggle: !Msdyn365.isOboRequest(this.props.context.request) && product && (\n \n ),\n reviewModal: this._buildUserReviewModal(),\n heading: heading && heading.text && (\n \n )\n } as IWriteReviewViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n private readonly _onTitleChange = (event: React.ChangeEvent): void => {\n this.writeReviewCallbacks.updateReviewTitle(event.target.value);\n };\n\n private readonly _onTextChange = (event: React.ChangeEvent): void => {\n this.writeReviewCallbacks.updateReviewText(event.target.value);\n };\n\n private readonly _onRatingChange = (value: number): void => {\n this.writeReviewCallbacks.updateRating(value);\n };\n\n private readonly _toggleReviewModal = (): void => {\n const userReview = this.props.data.userReview.result;\n if (this.state.isReviewModalOpen) {\n this.setState({ isReviewModalOpen: false, hasReviewError: false });\n } else if (userReview) {\n this.setState({\n isReviewModalOpen: true,\n reviewText: userReview.reviewText,\n reviewTitle: userReview.title,\n rating: userReview.rating\n });\n } else {\n this.setState({\n isReviewModalOpen: true,\n reviewText: '',\n reviewTitle: '',\n rating: 0\n });\n }\n };\n\n /**\n * This method builds the user review modal.\n * @param config The module config.\n */\n private _buildUserReviewModal(): IReviewModalViewProps {\n return ReviewModal({\n userReview: this.props.data.userReview.result,\n product: this.props.data.product.result,\n resources: { ...this.props.resources },\n context: this.props.context,\n parentId: this.props.id,\n parentType: this.props.typeName,\n isOpen: this.state.isReviewModalOpen,\n rating: this.state.rating,\n reviewTitle: this.state.reviewTitle,\n reviewText: this.state.reviewText,\n onModalToggle: this._toggleReviewModal,\n onTitleChange: this._onTitleChange,\n onTextChange: this._onTextChange,\n onRatingChange: this._onRatingChange,\n onReviewComplete: this.writeReviewCallbacks.onReviewSubmitted,\n renderContextId: 'writeReview',\n returnRef: this._modalToggleRef,\n hasError: this.state.hasReviewError,\n telemetryContent: this.telemetryContent\n });\n }\n}\n\nexport default WriteReview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewModalViewProps } from '../../common/review-modal';\nimport { IWriteReviewViewProps } from './write-review';\n\nconst WriteReviewView: React.FC = props => {\n const { heading, signInMessage, signInButton, modalToggle, reviewModal, moduleProps } = props;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {modalToggle}\n {createReviewModal(reviewModal, moduleProps)}\n \n )}\n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nexport default WriteReviewView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * Types of product refiner values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerValueDataTypeValue {\n /**\n * Range slider is used for selections like price.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Range = 1,\n\n /**\n * Range input is a different way to specify ranges and can be expressed with input boxes\n * as well as a set of discrete single-select type values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n RangeInput = 4,\n\n /**\n * This is a discrete list item, either multi-select or single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n List = 5,\n\n /**\n * Boolean types allows only single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Boolean = 6\n}\n\n/**\n * Types of product refiners.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerTypeValue {\n /**\n * Refiner values are single-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Single = 0,\n\n /**\n * Refiner values are multi-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Multi = 1\n}\n\n/**\n * ProductRefinerSource enum type.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerSource {\n /**\n * The None member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n None = 0,\n\n /**\n * The Attribute member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Attribute = 1,\n\n /**\n * The Category member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Category = 2,\n\n /**\n * The Price member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Price = 3,\n\n /**\n * The Rating member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Rating = 4\n}\n\n/**\n * Checks if the data type value corresponds to a slider.\n * @param dataTypeValue\n */\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n */\nexport function findMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue | undefined {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n * @param refinementCriterion\n */\nexport function isMatchingRefinementCriterion(productRefinerValue: ProductRefinerValue, refinementCriterion: ProductRefinerValue): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n (isRangeType(refinementCriterion.DataTypeValue) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (isMatchingRefinementCriterion(itemToggleNotification.productRefinerValue, selectedCriterion)) {\n toggledItemFound = true;\n if (itemToggleNotification.isSelecting) {\n const next = {\n ...selectedCriterion,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n selectedCriterion.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n selectedCriterion.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n } // Else the item is being de-selected, so omit it from the refinement criteria\n } else {\n // Keep existing criterion because it is not in the item toggle notification\n updatedRefinementCriteria.push(selectedCriterion);\n }\n });\n\n if (!toggledItemFound) {\n const next = {\n ...itemToggleNotification.productRefinerValue,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n itemToggleNotification.productRefinerValue.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n\n // If single select, then deselect any others in the parent refiner group\n if (\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\n ) {\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\n // Do nothing\n } else {\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(child, criterion)\n );\n if (matchingIndex > -1) {\n updatedRefinementCriteria.splice(matchingIndex, 1);\n }\n }\n });\n }\n }\n\n return updatedRefinementCriteria;\n}\n\nexport function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string | undefined,\n telemetry: ITelemetry\n): string {\n if (!amount || !currency) {\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\n return amount || '';\n }\n const priceAmount = (amount && Number(amount)) || 0;\n let result: string;\n\n try {\n result = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0\n }).format(priceAmount);\n } catch (error) {\n result = `${priceAmount} ${currency}`;\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ProductListInventoryFilteringOptions } from '../actions';\nimport { IChoiceSummaryProps } from './choice-summary.props';\nimport { isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent {\n private readonly closeButtonGlyph: string = 'msi-close-btn';\n\n private readonly payLoad: IPayLoad;\n\n @computed get selectedRefinersMap(): IRefinerMap[] {\n let { selectedChoices } = this.props;\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n selectedChoices = selectedChoices.filter(choice => {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\n );\n return parent && parent.RecordId !== channelInventoryConfigurationId;\n });\n }\n return selectedChoices.map((selectedRefiner: ProductRefinerValue, index) => {\n return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\n const items = this.selectedRefinersMap;\n this.payLoad.contentAction.etext = clearAllText;\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
    \n {items.length > 0 && label && {label}}\n
      \n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
    • \n \n {item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString ||\n item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString}\n \n \n
    • \n );\n })}\n
    \n {items.length > 0 && clearAllText && (\n \n {clearAllText}\n \n )}\n
    \n );\n }\n\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue, index: string): string {\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\n const overallFormat = choiceFormat || '{1}';\n const rangeFormat = choiceRangeValueFormat;\n let refinerName = '';\n if (refinerHierarchy && refinerHierarchy.find) {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\n );\n\n if (!parent) {\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\n } else {\n refinerName = parent.KeyName || '';\n }\n }\n\n let refinerValueName: string;\n if (isRangeType(productRefinerValue.DataTypeValue)) {\n refinerValueName = rangeFormat\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\n } else if (productRefinerValue.RefinerRecordId === 0) {\n const filterValue = refinerValues?.Values.find(\n refiner => refiner.LeftValueBoundString === productRefinerValue.LeftValueBoundString\n );\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\n } else {\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n }\n\n if (refinerName === 'Rating' || refinerName === 'Price') {\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n }\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}_${index}`);\n }\n\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\n if (!amount || !currency) {\n this.props.telemetry.trace('[choice-summary] could not format price');\n return amount || '';\n }\n let result = amount;\n\n try {\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\n } catch (error) {\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLElement;\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\n\n if (this.props.onChoiceClicked) {\n this.props.onChoiceClicked({\n clearAll,\n itemClicked: target,\n choiceClicked: selectedRefiner,\n nextItemToFocus: target.nextSibling as HTMLElement\n });\n }\n };\n\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\n return (result && result.value) || undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IErrorMessage {\n text?: string;\n}\n\nexport const ErrorMessage: React.FC = ({ text }) => {\n return (\n \n
    \n {` `}\n {text}\n {` `}\n
    \n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\n\ninterface IFeatureSearchResultItem {\n product: SimpleProduct | null;\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n recommendation?: string;\n}\n\nexport const FeatureSearchResultItem: React.FC = ({\n product,\n context,\n imageSettings,\n resources,\n telemetryContent,\n recommendation\n}) => {\n if (product === null) {\n return null;\n }\n\n const productName = product.Name;\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\n const fallbackImage = getFallbackImageUrl(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const heading =\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n
    \n \n
    \n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n
    \n \n
    \n

    {heading}

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

    {title}

    ;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\n \n {' '}\n {text}{' '}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ISearchResultModalViewProps {\n modal: React.ReactElement;\n modalHeader: React.ReactElement;\n modalFooter: React.ReactElement;\n modalBody: React.ReactElement;\n}\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n onClick(): void;\n}\n\nexport interface ISearchResultModalResources {\n modalTitle: string;\n modalCloseButtonText: string;\n}\n\nexport interface ISearchResultModalProps {\n resources: ISearchResultModalResources;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, id } = props;\n return (\n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n \n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\ninterface IProductSearchResultItems {\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities\n}) => {\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return (\n
      \n {products.map((product: ProductSearchResult, index: number) => (\n
    • \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n
    • \n ))}\n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n \n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n \n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component {\n private readonly anchorType: React.RefObject;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \n \n
  • \n );\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n \n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n \n \n \n \n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n \n \n \n );\n }\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { DisplayTemplate, ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeType } from './utilities';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n const isExpanded = this.props.isExpandedOnInitialLoad;\n\n // If (this.props.productRefinerHierarchy.DataTypeValue === ProductRefinerValueDataTypeValue.Range) {\n // isExpanded = true;\n // }\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n
    \n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n
    \n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (isRangeType(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n
  • \n \n
  • \n );\n });\n return
      {listItems}
    ;\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC = ({ text, className }) => (\n \n {` `}\n {text}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport {\n ChannelInventoryConfiguration,\n format,\n ProductPrice,\n ProductRefinerValue,\n SortColumn,\n StoreOperationsDataActions,\n TextValueTranslation\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n IFullProductsSearchResultsWithCount,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n private _isMounted: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n channelInventoryConfiguration: undefined\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n this._isMounted = true;\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: this.props.context.actionContext\n });\n if (this._isMounted) {\n this.setState({ channelInventoryConfiguration });\n }\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n await this._updateVariantAvailability();\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n await this._updateVariantAvailability();\n }\n\n public componentWillUnmount(): void {\n this._isMounted = false;\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n /**\n * Get products variants dimension availabilities.\n * @returns Void.\n */\n private readonly _updateVariantAvailability = async (): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n await this._getProductsDimensionsAvailabilities();\n }\n };\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n };\n\n /**\n * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n }\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n\n const dropdown = (\n <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\n />\n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = listPageState?.currentPageNumber\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\n />\n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n const { channelInventoryConfiguration } = this.state;\n const isInventorySortableAttribute =\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\n\n const isInventoryProductAttribute =\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\n\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n isInventorySortableAttribute ||\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n isInventoryProductAttribute)\n );\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const { channelInventoryConfiguration } = this.state;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\n return (\n <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\n refinerValues={refinerValueName}\n />\n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation }\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n return (\n <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\n />\n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\n !actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\n );\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { SocialMedia, SocialMediaComponent } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISocialShareItemConfig, ISocialShareItemProps, socialMedia } from './social-share-item.props.autogenerated';\n\nexport interface ISocialShareItemViewProps extends ISocialShareItemProps<ISocialShareItemConfig> {\n SocialShareItemElement: React.ReactNode | null;\n SocialShareItem: IModuleProps;\n}\n\n/**\n *\n * SocialShareItem component.\n * @extends {React.PureComponent<ISocialShareItemProps<ISocialShareItemConfig>>}\n */\nclass SocialShareItem extends React.PureComponent<ISocialShareItemProps<ISocialShareItemConfig>> {\n constructor(props: ISocialShareItemProps<ISocialShareItemConfig>) {\n super(props);\n\n this._getSocialShareItem = this._getSocialShareItem.bind(this);\n }\n\n public render(): JSX.Element | null {\n const viewprops = {\n ...this.props,\n SocialShareItem: {\n moduleProps: this.props,\n className: 'ms-social-share-item'\n },\n SocialShareItemElement: this._getSocialShareItem()\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n\n private _getSocialShareItem(): React.ReactNode | null {\n const src = this.props.config.icon;\n if (MsDyn365.isBrowser) {\n switch (this.props.config.socialMedia) {\n case socialMedia.facebook:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Facebook}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_facebook`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.twitter:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Twitter}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_twitter`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.pinterest:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Pinterest}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_pinterest`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.linkedin:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Linkedin}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_linkedin`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.mail:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Mail}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_mail`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n default:\n return null;\n }\n }\n return null;\n }\n}\n\nexport default SocialShareItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISocialShareItemViewProps } from './social-share-item';\n\nexport const SocialShareItemView: React.FC<ISocialShareItemViewProps> = props => {\n const { SocialShareItem, SocialShareItemElement } = props;\n\n if (!SocialShareItemElement) {\n props.context.telemetry.error('Social media is not valid, module wont render');\n return null;\n }\n return <Module {...SocialShareItem}>{SocialShareItemElement}</Module>;\n};\n\nexport default SocialShareItemView;\n"],"names":["async","getValidProductImages","productId","channelId","actionContext","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","then","mediaLocations","Promise","all","map","validateMediaLocaionAsync","pairs","filter","pair","catch","error","telemetry","mediaLocation","imageData","src","Uri","altText","AltText","resolve","http","XMLHttpRequest","open","onload","status","onerror","send","e","MediaGallery","React","constructor","props","super","defaultGalleryImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","defaultThumbnailImageSettings","noneWineProductImageSettings","xl","isWineProduct","usePNGImageSetting","_modifiedViewports$xs","_modifiedViewports$sm","_modifiedViewports$md","_modifiedViewports$lg","_modifiedViewports$xl","modifiedViewports","replace","onExiting","this","setState","animating","onExited","next","nextIndex","isLastItem","state","activeIndex","goToIndex","previous","isFirstItem","mediaGalleryItems","length","index","_getCarouselItem","image","_image$altText","Image","Object","assign","className","gridSettings","context","request","imageSettings","config","useAlternateImageSettings","galleryImageSettings","loadFailureBehavior","id","_getThumbnailItem","modifiedActiveIndex","_image$altText2","ThumbnailItemContainerProps","tag","classnames","role","tabIndex","key","onClick","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","thumbnailImageSettings","event","which","KeyCodes","Enter","Space","preventDefault","undefined","modifiedImageSettings","_this$props$data$prod","isGiftCard","data","product","result","ItemId","toLowerCase","giftCardImage","app","reaction","RecordId","apiSettings","render","resources","wineAttributes","productSpecificationData","attribute","Name","toUpperCase","attr","TextValue","value","Error","showPaginationTooltip","_mapProductToImageData","isVertical","thumbnailsOrientation","productUrl","getProductUrlSync","isProductLightbox","window","location","parent","viewProps","_objectSpread","isProductLightBox","moduleProps","CarouselProps","Carousel","items","item","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","handleOnExited","handleOnExiting","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","renderView","PrimaryImageUrl","_renderThumbnailItem","thumbnail","Node","Module","thumbnails","_renderThumbnails","slots","productLink","SuggestionType","AutoSuggestInput","searchText","top","suggestionType","hitPrefix","hitSuffix","getCacheKey","getCacheObjectType","dataCacheType","searchQuery","topResultsCount","_getAutoSuggest","input","autosuggest","ctx","searchCriteria","ProductSearchCriteria","SearchCondition","Context","ChannelId","requestContext","CatalogId","catalogId","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","callerContext","queryResultSettings","Paging","Top","ImageUrl","generateImageUrl","AllSearchResults","createObservableDataAction","action","autoSuggestPromises","inputData","payLoad","KeywordSuggestionsComponent","suggestions","getPayloadObject","telemetryContent","reactNodes","push","_assembleNode","text","ariaLabel","Value","RegExp","contentAction","etext","getTelemetryAttributes","Id","href","_generateLink","_getHighlightedText","suggestion","searchPageURL","searchQsp","formattedLink","route","indexOf","formattedText","dangerouslySetInnerHTML","getRichTextHtml","ProductSuggestionsComponent","autoSuggestProps","productSuggestionHeading","moduleType","moduleId","title","_renderTitle","productAutoSuggestionHeading","_renderThumbnail","price","Value3","DecimalValue","_renderPrice","LiProduct","_getLiWrapper","AProduct","_getAWrapper","recid","getProductPageUrlSync","adjustedPrice","basePrice","PriceComponent","typeName","CustomerContextualPrice","BasePrice","cropFocalRegion","defaultImageSettings","CategorySuggestionsComponent","categorySuggestionHeading","categoryAutoSuggestionHeading","format","splitValue","split","pop","_getCategoryLink","searchRefiners","urlPath","categoryRefiners","find","refiners","KeyName","refiner","Values","RefinerRecordId","parseInt","encodedRefiner","encodeURIComponent","JSON","stringify","compressRefiners","compressedRefinerKeys","compressedRefiners","forEach","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","isSearchFormExpanded","searchTextInput","handleInputChange","maxChars","disableSubmitSearch","handleCancelSearchChange","query","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","onInputChange","target","labelNode","htmlFor","inputNode","type","name","placeholder","ref","onChange","maxLength","submitBtnNode","Button","label","cancelBtn","submitBtn","LabelComponent","searchLabelClass","searchtext","searchCollapsedLabel","attributes","innerRef","Search","waitTime","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","keyCode","Escape","formReference","current","contains","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","update","createSearchStateInput","_handleInputChange","cancellabelDebounce","cancel","_debounce","getSearchSuggestionsAction","_getSuggestionType","inputSuggestionType","results","_getSearchRefiners","autoSuggestAriaLabel","_setAutoSuggestResultCount","exception","debug","setTimeout","suggestionTypes","distinctSuggestionTypes","suggestionTypeItem","charAt","slice","join","_handleSubmit","focus","searchURL","_appendQueryParams","getUrlSync","document","_handleCancelSearchChange","isInitialState","qsp","_result$AllSearchResu","itemCount","i","Product","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","setAttribute","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","searchInputMaxLength","suggestionTypeCriterion","searchFormClass","getTelemetryObject","telemetryPageName","friendlyName","body","addEventListener","componentWillUnmount","removeEventListener","componentDidUpdate","params","isEditor","searchLabelArialLabel","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","keywordSuggestions","Keyword","None","productSuggestions","categorySuggestions","Category","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","FormWrapper","autoComplete","onSubmit","UlKeyword","UlProduct","UlCategory","form","autosuggestKeyword","autosuggestProduct","autosuggestCategory","callbacks","getProductSearchRefinersAsync","_renderForm","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","closeAnimation","pause","pauseOnHover","ride","autoplay","transitionType","content","hideFlipper","dismissEnabled","handleDismissCarousel","dismissCarouselAriaText","ariaLabelForDismissButton","indicatorAriaText","ariaLabelForSlide","flipperPrevious","flipperNext","handleKeyDown","getElementsByClassName","focusable","getElementById","elements","querySelectorAll","firstFocusable","lastFocusable","ctrlKey","altKey","keys","9","shiftKey","console","log","BulkPurchase","_errorCssClass","_errorCssGlyphClass","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_onErrorMessage","errorMessage","stateMessage","messageText","statusCssString","messageGlyph","isOpen","_toggleCollapse","isExpanded","hasDimensionsInProps","ArrayExtensions","hasElements","productDimensions","hasDimensionsInData","container","_renderCollapseContent","_renderCollapseButton","_renderCollapse","bulkPurchaseHeaderTitle","Collapse","_renderMainContent","isMobileDevice","isMobile","variant","VariantType","Viewport","userMessageNode","Alert","color","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_featureState$result","_this$props$data$orde","_this$props$data$cust","featureState","isMultipleCatalogsFeatureEnabled","IsEnabled","getCatalogId","validateCatalogId","ProductDimensionsMatrix","dimensions","orderTemplates","customerInformation","dimensionOnChange","onErrorMessage","isMultipleCatalogFeatureEnabledInHq","BulkPurchaseViewComponent","validateCartAsync","cart","propsContext","cartResult","cartVersion","shouldRetry","arguments","Version","warning","AsyncResult","_validationResult$Val","validationResult","CartsDataActions","bypassCache","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","ProductId","Behavior","MaximumQuantity","cartLineId","LineId","toString","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","_renderDeliveryLocation","cartLine","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","orgUnitLocations","foundProductDeliveryOption","productDeliveryOptions","deliveryOption","delivery","DeliveryOptions","option","Code","DeliveryMode","Description","shippingText","_renderStoreLocation","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","cartlines","cartline","foundProductAvailability","_foundProductAvailabi","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","foundProductDeliveryOptions","removeButtonText","removeItemClickHandler","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","TelemetryConstant","RemoveCartItem","removeCartItemAttribute","MsDyn365","isBrowser","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","searchParams","set","hasError","Quantity","CartLineItemComponent","catalogs","currentQuantity","isOutOfStock","isQuantityEditable","primaryImageUrl","displayMode","channelDeliveryOptionConfig","deliveryLocation","remove","storeLocation","getMiniCartData","miniCartData","CartLines","hasInvoiceLine","getActiveCartProductsAction","ActiveCartProductsInput","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","retailMultiplePickUpOptionEnabled","getSortedCartLines","sortOrder","lines","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","_removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","isCartValid","payload","TelemetryEvent","CheckOut","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","_this$props$data$cart","_setQuantityLimitsFeatureFlag","_validateCart","prevProps","shouldComponentUpdate","nextProps","nextState","_this$props$context$r","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$chan","_this$props$data$feat","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","guestCheckoutUrl","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","channel","EmailDeliveryModeCode","cartLines","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","includeFlyout","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","flyoutTitle","flyoutTooltip","UncontrolledTooltip","placement","hideArrow","trigger","shouldShowCloseButton","cartPageUrl","hideAriaHidden","TotalAmount","priceString","totalPriceFormatString","cultureFormatter","formatCurrency","feature","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","CartlinesWrapper","miniCartWrapper","miniCartItemWrapper","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","goToCartButton","checkoutBlockedDueToUnavailableFunds","totalPrice","_cart$result$cart$Ver","_cart$result","lastValidatedCartVersion","ValidationResultsPairs","isAbsoluteUrl","urlCheck","returnURL","msdyn365Commerce","origin","includes","_this$props$data$cata","PickupDeliveryModeCode","FlyoutCartLineItems","cartLinesSortOrder","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","quantityDisplayString","quantityDisplayText","salesAgreementPricePrompt","inputQuantityAriaLabel","discountStringText","originalPriceText","currentPriceText","shippingChargesText","removeCartButtonText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","pickupDeliveryModeCode","_featureStatuses$find","_featureStatuses$find2","featureStatuses","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find3","customerInfo","IsB2b","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","__decorate","observer","renderModuleAttributes","_renderCartlines","_ref","description","isChecked","ariaSetSize","ariaPosInSet","checked","CheckoutDeliveryOptions","selectedItemId","isLoading","checkoutErrorRef","init","moduleState","onEdit","isSelectDefaultOptionEnabled","onCancel","useDefaultDeliveryOption","canShip","cartDeliveryMode","getSavedDeliveryOption","loadDeliveryOptions","_this$props$data$chec","checkout","checkoutCart","getCartLinesForShipping","isDeliveryModeExists","deliveryMode","getDeliveryOptionSelected","selectedItem","priceFree","get","channelConfig","DeliveryOption","DescriptionComponent","freePriceText","currencyCode","Currency","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","ErrorTitleComponent","ErrorMessageComponent","getDeliveryOptionList","count","code","radioButton","RadioButtonComponent","onDeliveryOptionChange","getSaveButton","saveBtnLabel","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","_this$props$data$chec2","information","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","_this$props$data$chec3","updateCartDeliverySpecification","savedDeliveryOption","_this$props$data$chec4","onReady","cartLinesForShipping","deliveryModeId","trim","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","onPending","response","_response$errorDetail","errorDetails","LocalizedMessage","StringExtensions","isNullOrEmpty","genericErrorMessage","setIsCancellable","_this$channelDelivery","PickupDeliveryModeCodes","getDeliveryOptions","_this$props$data$chec5","cartId","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","deliveryOptionFilter","filterDeliveryModeOption","FilterDeliveryModeOption","FilterOutNonCarrierDeliveryMode","getDeliveryOptionsAsync","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","_unused","deliveryOptionsNotFound","_this$props$data$chec6","_this$props$data$chec7","updateHasCartDeliveryMode","newHasCartDeliveryMode","isPaymentVerificationRedirection","_this$props$data$chec8","getStoredDeliveryOptions","_this$props$data$chec9","_this$props$data$chec10","_this$props$data$chec11","_this$props$data$chec12","_this$props$data$chec13","_this$props$data$chec14","isExpressCheckoutApplied","isExpressPaymentAppliedInCartPage","currentTarget","_this$props$data$cart2","properties","ExtensionProperties","property","Key","StringValue","parse","_this$expressPaymentD","_this$expressPaymentD2","expressPaymentDetailsFromCartPage","isExpressCheckoutAppliedInCartPage","_this$props$data$chec19","when","isDataReady","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec20","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec21","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","isReady","isUpdating","isError","isShowList","isShowSelected","deliveryOptionAriaLabel","deliveryOptionsData","alert","ErrorComponent","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","Waiting","saveButton","editButton","cancelButton","observable","computed","withModuleState","DeliveryOptionList","DeliveryOptionSelected","_ref2","onApplyHandler","onApplyGiftCard","onChangeNumberHandler","onEnterGiftCardNumber","onChangePinHandler","onEnterGiftCardPin","onChangeExpHandler","onEnterGiftCardExp","getForm","options","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardPin","giftCardExp","supportExternalGiftCard","additionalFields","disableAddGiftCard","applyGiftCardButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","formProps","inputPinLabel","inputExpLabel","alertFieldLabel","assertive","fade","includeAlertClass","inputNumber","inputPin","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","onRemoveHandler","onRemoveGiftCard","giftCard","_giftCard$Id","getItem","getFormattedPrice","canRemove","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","Balance","CardCurrencyCode","giftCardLast4Digit","substr","selectedGiftCard","removeButton","itemProps","getList","giftCards","listProps","SupportedGiftCardType","CheckoutGiftCard","_this","isFetchingGiftCard","isRequired","isEnabled","giftCardExtends","onSkip","couldPaidByGiftCard","giftCardSupported","External","shouldBeEnabledForGuest","handleCancelOrSubmit","hasSelectedItem","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","getGiftCard","addGiftCard","Pin","ExpirationDate","TenderTypeId","findGiftcardTenderTypes","tenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","tenderType","OperationId","ConnectorId","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","getTenderTypesAsync","internalGiftcardTenderTypes","OPERATIONS","PayGiftCertificate","externalGiftcardTenderTypes","Both","month","Number","year","getGiftCardAsync","activeGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","card","resolveCardTypesAsync","CardType","GiftCard","loyaltyAmount","customerAccountAmount","reduce","getLoyaltyAmount","getGiftCardTotalAmount","getCustomerAccountAmount","componentDidMount","showAdditionalFields","shouldPayGiftCard","isOBORequest","EnabledPaymentsForOBO","moduleClassName","checkoutGiftCardProps","showGiftCard","TitleCompoent","From","SelectedGiftCard","GiftCardList","_ref3","_ref4","_objectWithoutProperties","_excluded","AddResource","_ref5","ShowResource","_ref6","min","max","step","ariaValueMax","ariaValueMin","ariaValueNow","onBlur","CheckoutLoyalty","_defaultLoyaltyPoints","loyaltyCard","CardNumber","LoyaltyCardId","updateLoyaltyCardId","loyaltyCardNumber","shouldPayLoyalty","_setErrorMessage","_clearError","_dialogToggleRef","_applyLoyaltyPoints","bind","_removeLoyaltyPoints","_onInputChange","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","Loyalty","isShowLoyalty","isShowAddLoyalty","checkoutLoyalty","showLoyalty","heading","Heading","headingTag","loyaltyHeadingText","coveredAmountText","TextComponent","loyaltyCoveredAmountText","amount","addLoyalty","drawer","Drawer","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","cardNumber","rewardPoints","RewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","payWithLoyaltyAmountLabel","loyaltyAmountInput","InputComponent","loyaltyAmountApplyButton","applyCheckoutLoyaltyPaymentText","isNaN","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","removeCheckoutLoyaltyPaymentText","point","RewardPointId","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","ActivePoints","expiringPointsText","expiringPoints","PointsExpiringSoon","updateLoyaltyAmount","newAmount","parseFloat","num","toFixed","element","isDisabled","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","callActionOrExecute","_points$MaxCurrencyVa","GetLoyaltyTransactionEstimationInput","newMaxPoints","AddCheckoutLoyalty","rewardPoint","ShowCheckoutLoyalty","isValidationPassed","isPlaceOrderLoading","isPlaceOrderClicked","handleCheckoutHeadingChange","checkoutHeading","cartStatus","isEmptyCart","getSlotItems","triggerPaymentWithPlaceOrder","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","onPlaceOrder","checkoutOutOfStockErrorMessage","orderConfirmation","isOverMaxQuantity","_checkout$result","hasOrderConfirmation","updatedCartVersion","updateCartLineEmailAddress","guestCheckoutEmail","placeOrder","handleCheckoutError","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","emailDeliveryCartLines","lineDeliverySpecifications","line","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","updatedCart","_this$props$context$r2","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","_cartlineProduct$Beha","cartlineProduct","isStockedItem","IsStockedProduct","isEmailDelivery","productInventory","_productInventory$Pro","cartLinesInventoryValidation","getActiveChildModuleStates","childIds","getModule","hasModuleState","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","Msdyn365","validateForCheckout","retry","_shouldValidateQuantityLimits","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","isB2BSite","isOrderQuantityLimitsFeatureEnabledInSiteSettings","_saveShippingAndBillingAddress","tokenizedPaymentCard","Zip","address","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","TwoLetterISORegionName","Country","NameOnCard","Street","Address1","StreetNumber","Address2","City","State","ZipCode","Phone","invalidCartVersionErrorMessage","missingRequiredCartTenderLinesErrorMessage","checkoutApiFailureErrorMessage","checkoutResult","apiError","statusCode","errorCode","setCheckoutErrors","_error$data","shouldEnableSinglePaymentAuthorizationCheckout","AdditionalContext","isEditorialMode","isEmpty","isTermsAndConditionAccepted","disableForOBO","isPaidOffByCustomerAccount","amountDue","_this$props$data$chec22","_this$props$data$chec23","asyncResultStatus","AsyncResultStatusCode","LOADING","_this$props$data$chec24","_this$props$data$chec27","email","tenderLine","paymentTenderType","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","_this$props$data$chec25","_this$props$data$chec26","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newTenderLine","newTokenizedPaymentCard","newPaymentTenderType","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","isCartReady","_this$props$data$chec28","isPaymentSectionContainerReady","_this$props$data$chec29","_this$props$data$chec30","_this$props$data$chec31","_this$props$data$chec32","redirectAdditionalContext","isPaymentVerificationRequired","_this$props$data$chec33","isPaymentSectionContainerHasError","_this$props$data$chec34","_this$props$data$chec35","isBillingAddressHasError","_this$props$data$chec36","_this$props$data$chec37","updateIsBillingAddressHasError","newIsBillingAddressHasError","canPlaceOrder","_this$props$data$chec38","_this$props$data$chec39","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","_this$props$data$chec40","_this$props$data$chec41","checkoutErrorLocation","checkoutPaymentErrorLocation","ErrorCode","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","CheckoutPaymentInstrument","_this$props$data$chec42","_this$props$data$chec43","shouldFocusOnCheckoutError","_this$props$data$chec44","_this$props$data$chec45","_this$props$data$chec46","_this$props$data$chec47","_this$props$data$chec48","_this$props$data$chec49","_this$props$data$chec50","_this$props$data$chec51","_this$props$data$chec52","_this$props$data$chec53","_this$props$data$chec54","_this$props$data$chec55","_this$props$data$chec56","_this$props$data$chec57","_document","_this$props$data$chec58","disableGuidedCheckoutFlow","backToShopping","placeOrderText","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","allCheckoutInformation","checkoutInformation","info","checkoutExpressPaymentContainer","isConsentGiven","cookies","device","Type","backToShoppingUrl","termsAndConditions","BackToShopping","backToShoppingAttributes","checkoutBtnText","hasShippingAddress","hasCartDeliveryMode","hasGuestCheckoutEmail","hasExpressPaymentContainer","style","display","hasSalesOrder","salesOrder","checkoutProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","renderMsdyn365Text","AlertComponent","loading","_this$props$data$chec59","_this$props$data$chec60","canShow","guidedForm","GuidedFormComponent","resource","orderSummary","getOrderSummary","invoicePaymentSummary","getInvoicePaymentSummary","lineItems","getLineItems","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","values","every","SUCCESS","FAILED","editProps","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","EmailDelivery","LineItemComponent","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","LineItemDeliveryGroup","LineItemList","lineItem","LineItemGroupComponentWithMultiplePickUp","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","OrderSummaryComponent","_ref9","subtotal","shipping","otherCharge","tax","totalDiscounts","loyalty","customerAccount","orderTotal","PaymentSummaryComponent","_ref10","invoices","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","InvoiceSummary","orderTotalLabel","_getDeliveryLocation","locationMatch","_getLineItemComponent","_input$data$catalogs","_product","showShippingChargesForLineItems","productDimensionTypeAmount","shippingCharges","_cartLine$CatalogId","amountString","priceCurrency","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","_getEmailDeliveryComponents","emailDeliveryText","_getLineItemsComponents","isPickUp","_getCartPickDeliveryMode","cartLineItem","_channelDeliveryOptio","isNullOrWhitespace","_countItems","_filterItemsByDiliveryType","_channelDeliveryOptio2","_getLineItemsByDeliveryType","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","_productDeliveryOptio","suffix","handleLineItemHeadingChange","lineItemsHeading","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","cartLinesGrp","entries","groupByDeliveryType","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","groupTitle","iconClass","_getLineItems","editCartText","EditCart","groupClass","orderSummaryHeading","subTotalLabel","shippingLabel","taxLabel","loyaltyLabel","giftcardLabel","totalDiscountsLabel","freeText","toBeCalculatedText","otherCharges","customerAccountLabel","showLineItems","channelConfiguration","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","orderSummaryProps","OrderSummary","otherChargeLabel","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","isCancelAllowed","hasControlGroup","saveAndContinueBtnLabel","canSubmit","canCancel","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","focusOnFirstFocusableElement","node","child","querySelector","focusOnEditButton","scrollToTitle","formCard","scrollIntoView","getTitle","Tag","_getModules","_getId","isActive","onNext","shouldFocus","children","childrenModules","childModule","childId","childState","setCheckoutErrorFocus","isPending","hasInitialized","changeBtnLabel","CheckoutChange","changeBtnAttributes","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","paymentInstrumentModuleId","CheckoutGuidedForm","currentStep","getEnabledModules","_enableAfterModule","Boolean","nextChildId","_isPaymentSectionContainer","_sectionState$childId","sectionState","currentId","getStep","getId","getHeading","moduleChildId","_state$childIds","shouldCollapseAfterRedirect","hasMissingInfo","hasOrderError","previousModuleHasError","_this$props$requestCo","GuidedCard","enableControl","buttonsStates","onPlaceOrderHandler","isBusy","buttonSetState","setIsBusy","useState","Purchase","PayCard","PayLoyalty","PayCustomerAccount","orderedProducts","redirect","PlaceOrder","balanceCheckButton","GiftCardBalanceCheck","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","Form","Item","CatalogLabelComponent","isB2b","catalog","CartLineItemFunctions","renderProductDimensions","DimensionStrings","Dimensions","productDimension","DimensionTypeValue","DimensionValue","IsGiftCard","DiscountLines","discountLine","OfferId","OfferName","isSalesLine","PeriodicDiscount","EffectiveAmount","EffectivePercentage","inventoryInformationLabel","inventoryCssName","inventoryLabelClassName","IsInvoiceLine","unitOfMeasureDisplayType","DefaultUnitOfMeasure","_props$context$reques","hasShippingMethod","shippingChargeLines","ChargeLines","chargeLine","IsShipping","freightFee","chargeTotal","CalculatedAmount","priceComponent","_cartline$ChargeLines","chargeline","SalesAgreementLineRecordId","_props$context$reques2","_props$primaryImageUr","destructDimensionStrings","fallbackImageUrl","getFallbackImageUrl","OmniChannelMedia","renderDisountLines","renderInventoryLabel","renderUnitOfMeasure","renderShippingLabel","renderOtherCharges","renderSalesAgreementPrompt","productAttribute","productName","imgeClassName","newValue","quantityOnChange","lineIndex","fallBackSrc","NetAmountWithAllInclusiveTax","GrossAmount","ExtendedPrice","NetPrice","salesAgreementLineId","_generateQuantityandPrice","nodes","IncrementalQuantity","currentCount","decrementButtonAriaLabel","incrementButtonAriaLabel","isCartStateReady","classNames","DiscountAmount","priceEditorResources","CartLinePriceEditor","HeaderPreferredStore","modalCloseButtonRef","handleClick","_findPreferredStoreOnClick","storeSelectorStateManager","storeSelector","storeName","preferredStore","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","modules","storeSelectorId","openDialog","showMapViewLink","parentElementRef","onLocationSelected","Logo","_renderLogo","link","linkUrl","destinationUrl","openInNewTab","rel","_renderImage","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","targetId","handleLinkTextChange","linkIndex","_this$props$config$my","myAccountLinks","linkText","popOverRef","_toggleNavbar","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","workerName","customerName","_this$props$data$empl","worker","employee","_this$props$data$acco","customer","accountInformation","FirstName","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","wishlists","logoLink","logoImage","shouldShowWishlistCount","disableTooltip","headerToggleClass","headerClassName","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","logo","wishListIconDesktop","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","wishListIconMobile","navIcon","menuBar","search","siteOptions","HeaderTag","headerAriaLabel","HeaderContainer","HeaderTopBarContainer","Divider","MobileMenuContainer","Modal","wrapClassName","toggle","MobileMenuHeader","ModalHeader","MobileMenuBodyContainer","ModalBody","MobileMenuLinksContainer","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","displayName","Popover","signInLink","_getSigninButton","signOutLink","_getSignOutButton","switchCustomerLink","_getSwitchCustomerButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","accountLinks","_getAccountLinks","currentDistributor","slotName","SignIn","signInLinkText","signInLinkAriaText","onTelemetryClick","_user$signOutUrl","SignOut","signOutLinkText","signOutUrl","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","removeAccountSelectionCookie","shoppingAsText","url","param","delete","retailServerErrorCode","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","cta","editableLink","onTextChange","_renderReactFragment","slot","_renderDesktopAccountBlock","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","Math","totalAmountAfterGiftCard","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","OtherChargeAmount","hasDeliveryMethod","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","ProductCollection","handleHeadingChange","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","validValues","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","initProductState","productPrices","productCollectionProducts","productCollection","equals","listType","getProductPriceForSelectedProducts","ProductPriceForSelectedProductsInput","p","_getProduct","productPrice","_this$state$productsD","trace","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","TotalRatings","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","priceResources","priceRangeSeparator","ProductContainer","productComponent","ProductComponent","ratingAriaLabel","quickViewButton","dimensionAvailabilities","dimensionAvailability","_product$MasterProduc","masterProductId","MasterProductId","_getActivePrice","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSeeAllButton","headingLabel","recommendation","discountIds","searchPageLink","seeAllButtonText","enableAffiliationBasedPricing","shouldDisplaySeeAllButton","recommendationListId","isCarousel","layout","headingComponent","updatedProducts","getProductData","at","ObjectExtensions","isNullOrUndefined","productCollectionViewProps","ProductCollectionContainer","GridComponentProps","seeAllButton","_renderCarousel","carouselContainer","_renderProduct","_renderGrid","gridContainer","PromoBannerCloseButton","closeButtonAriaLabel","onClose","PromoBannerClose","PromoBannerLinks","links","editableLinks","_mapEditableLinks","linkdata","PromoBannerText","PromoBanner","isVisible","handleTextChange","bannerMessages","_next","_isLastItem","_goToIndex","_previous","_isFirstItem","_onDismiss","closeButtonLabel","bannerText","bannerAriaLabel","onDismiss","handleLinks","handleText","promoBannerProps","promoBannerTextProps","promoBannerLinksProps","contentProps","promoBannerText","carouselProps","hideIndicator","closeButton","slides","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","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","onError","getQuickOrderGridAddToCartDialog","_result$cartActionRes","cartActionResult","handlers","removeActionHandler","removeProductList","productList","removeQuickOrderList","QuickOrderGridDrawer","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","onToggle","previousState","collapseProps","_drawerGlyphClass","toggleGlyphClassName","isAnimateGlyph","_drawerOpenGlyph","_drawerCloseGlyph","drawerClass","drawerButtonClassName","toggleButtonProps","block","_generateDrawerButtonInnerMarkup","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","QuickOrderGridFormComponent","productTextInput","quantityTextInput","quickOrderGridState","minQuantity","isAddtoListDisabled","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","handleQuantityChange","handleAddProductListClick","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","pattern","addToListBtn","userMessage","QuickOrderGridProduct","productLine","isSelected","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_product$PrimaryImage","_props$imageSettings","containerClassName","setShowPreviousActions","onChangeHandler","onChangeQuantity","itemKey","onRemoveItem","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","setShowActions","onClickViewDetails","shouldShowActionsNewValue","actionsContainerClassName","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_product$Dimensions","_productListLine$Line","dimension","_dimension$DimensionV","dimensionValue","quickOrderGridProductDimensionsSeparator","moduleTypeName","renderProductPrice","UnitOfMeasure","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","QuickOrderGridTableComponent","setIsMobile","isMobileView","quickOrderGridProducts","isOrderQuantityLimitsFeatureEnabled","updateViewport","quickOrderProduct","_product$ProductDetai","_quickOrderProduct$pr","_quickOrderProduct$pr2","behavior","MinimumQuantity","ProductPrice","callBacks","QuickOrderGrid","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$feat4","_cartConfiguration$re","_cartConfiguration$re2","_waitTime","_dimensionUpdateQueueMaxLength","_dimensionUpdateQueue","FinitePromiseQueue","_dimensions","_initializedDimensions","Set","_cssClassNameConfigure","_className","_isOrderQuantityLimitsFeatureEnabled","_isChannelLimitsFeatureEnabled","_applyDefaultOrderSettingsForCartLine","_quickOrderGridCallbacks","initializeDimension","initializedDimension","add","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","_removeItemRowFromTable","productListLineId","_changeRowQuantity","_removeProductList","token","ProductListsDataActions","reload","_updateStatusState","quickOrderGridDeleteProductListFailedText","productResponse","_cancellabelDebounce","isQuickOrderGridFormExpanded","getScanResult","GetScanResultInput","ProductDimensionFull","_updateQuantitiesInState","_handleQuantityChange","_this$state$productRe","currentValue","inputElement","_quantityInput","HTMLInputElement","minimumQuantity","needToUpdateUIValue","_behavior$MinimumQuan","newCurrentValue","_this$state$productRe2","ProductDimensionType","Color","Configuration","Size","Style","hasProductDimensions","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","configureErrors","errorState","mappedDimensions","_this$_updateDimensio","_updateDimensionValue","selectedProduct","newProduct","getSelectedVariant","SelectedVariantInput","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","productDimensionFull","newValueId","DimensionValues","_getDimensionErrorString","dimensionTypeValue","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_productResponse$Dime","missingDimensions","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","quickOrderTemplateLinesData","orderLineIndex","findIndex","newProductListLine","previousQuantity","newLine","updatedLines","updatedProductList","ProductListLines","ActiveProductListInput","ProductListId","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","productListId","_productResponse$Defa","_createProductList","AddItemToProductListInput","addItemToProductListAction","CreateProductListInput","ProductListType","QuickOrder","createProductList","_productTextInput","_telemetryContent","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","ValidateDefaultOrderSettingsPerLine","_this$state$min","_this$state$max","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","header","quickOrderGridProps","isB2bCustomer","actions","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","configure","getProductConfigure","_renderListContainer","orderActions","_renderQuickOrderGridActions","quickOrderGridDeleteButtonText","topStateMessage","addProductListToBag","QuickOrderGridActionsView","isBulkPurchaseEnabled","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","tableClassName","_getMinQuantityForCartLineItem","_getMaxQuantityForCartLineItem","_getQuantity","_product$Behavior2","applyDefaultOrderSettingsForCartLine","_product$Behavior3","defaultQuantity","DefaultQuantity","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","errors","select","renderConfigure","dropdowns","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","QuickOrderDrawer","_toggle","isManuallyToggled","drawerGlyphClass","animateGlyph","drawerOpenGlyph","drawerCloseGlyph","collapseState","QuickOrderFormComponent","quickOrderState","disableAddtoCart","addQuantityPlaceholderText","handleAddToCartClick","addToCartBtn","QuickOrderProduct","simpleProduct","QuickOrderDesktopHeaderCellsComponent","quickOrderProductNumberText","quickOrderProductText","quickOrderUnitPriceText","quickOrderUnitOfMeasureText","quickOrderQuantityText","quickOrderTotalText","quickOrderActionsText","QuickOrderMobileHeaderCellsComponent","QuickOrderTableHeaderComponent","QuickOrderTableRowProductImageComponent","_props$data$product$P","QuickOrderExtraActionsPopupComponent","QuickOrderDesktopTableRowCellComponent","_cartLine$LineId","quickOrderProductDimensionsSeparator","Price","UnitOfMeasureSymbol","quickOrderInputQuantityAriaLabel","quickOrderDecrementButtonAriaLabel","quickOrderIncrementButtonAriaLabel","quickOrderRemoveItemButtonAriaLabel","QuickOrderMobileTableRowCellComponent","quickOrderQuantityMobileText","QuickOrderTableRowComponent","QuickOrderTableComponent","quickOrderProducts","dimensionUpdateQueue","initializedDimensions","cssClassNameConfigure","quickOrderCallbacks","productText","inputQuantityText","quantityInput","cancellableDebounce","isQuickOrderFormExpanded","_addItemToCart","quickOrderAddedToCartSuccessMessage","quickOrderAddedToCartFailureMessage","_this$props$context$a","defaultDeliveryOption","productAvailableQuantity","_updateAvailability","shouldValidateQuantityLimits","addProductToCartInput","orderQuantityLimitsFeatureIsEnabled","isAddEmailDeliveryItemToCart","addProductToCart","inputProductText","substatus","maxQtyLimitReachedMessage","_getMaxQtyMessage","_result$errorDetails","_getConcatenatedMaxQtyMessage","quickOrderMaxQuantityLimitText","quickOrderAlreadyItemQuantityText","reject","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","productAvailable","quickOrderproductDimensionTypeColorErrorMessage","quickOrderproductDimensionTypeConfigurationErrorMessage","quickOrderproductDimensionTypeSizeErrorMessage","quickOrderproductDimensionTypeAmountErrorMessage","quickOrderproductDimensionTypeStyleErrorMessage","_updateProductAvailability","quickOrderWrongQuantityErrorMsg","quickOrderOutofStockErrorMsg","viewport","quickOrderFormClass","quickOrderFormProductContent","quickOrderFormMsgContent","quickOrderModuleHeading","quickOrderModuleDescription","quickOrderAddtobag","quickOrderProductQuantityInputLabel","quickOrderProductInputLabel","quickOrderProductDimensionTypeColor","quickOrderProductDimensionTypeConfiguration","quickOrderSelectDimensionFormatString","quickOrderProductDimensionTypeSize","quickOrderProductDimensionTypeStyle","quickOrderProductDimensionTypeAmount","quickAddQuantityPlaceholderText","quickOrderProps","isB2B","quickOrderList","_initQuickOrderProducts","productInventoryInfo","maxQuantityForLineItem","addedQuantity","_item$ItemId","minInventory","quickOrderMsgContent","tenantId","inputIsValid","requestUrl","serviceEndpoint","locale","sendRequest","userReviewData","headers","Authorization","authorization","SubmitUserReviewInput","onClickSubmit","ReviewModal","SubmitReview","submitButtonAttribute","cancelButtonAttribute","modal","modalCSS","onModalToggle","applicationNode","returnFocusRef","returnRef","modalHeader","modalHeaderNode","modalFooter","ModalFooter","modalBody","discardReviewButtonText","submitButton","submitDisabled","submitReviewButtonText","rating","ratingsInput","ratingLabel","ratingsLabel","titleInput","titleLabel","textInput","textLabel","privacyPolicyUrl","privacyPolicyLink","inputRow","errorMessageText","userReview","reviewId","editReviewModalTitle","writeReviewModalTitle","stripWhiteSpacesFromString","reviewText","reviewTitle","RatingComponent","readOnly","avgRating","selectRatingAriaLabel","initialRating","parentType","onRatingChange","selectRatingLabel","reviewTitleMaxLength","renderContextId","onTitleChange","reviewTitleAriaLabel","reviewTitleLabel","reviewTextMaxLength","rows","reviewAriaLabel","reviewTextLabel","policyTextBlocks","privacyPolicyTextFormat","isSeparatorAtStart","startsWith","isSeparatorAtEnd","endsWith","PrivacyPolicy","privacyPolicyAttribute","privacyPolicyTitle","submitReview","onReviewComplete","onReviewSubmission","getRnrPartnerId","userEmail","emailAddress","userName","getRnrAuthEndpointId","submitUserReview","review","submittedDateTime","Date","helpfulPositive","helpfulNegative","firstName","getReviewInput","GetUserReviewInput","TOGGLE_REVIEW_MODAL_BUTTON_ID","TOGGLE_EDIT_MODAL_BUTTON_CARD_ID","HistogramItems","ratingsSummary","totalRatingsCount","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","stars","totalCount","percentage","formattedPercent","Intl","NumberFormat","barItemAriaLabel","starLabel","bar","Progress","buttonProps","AverageRatingNumber","summary","averageRating","TotalReviews","RatingsHistogram","selectFilterBy","ratingCount","completeClass","histogramItems","averageRatingAriaLabel","hideCount","averageNumber","totalReviews","ratingsSummaryProps","histogramProps","filterKey","createRatingsReviewsStateInput","histogramItem","authToken","requestBody","concernCategory","requestHeader","isHelpful","ReviewConcernCategory","ReportReviewConcernInput","ReviewCount","currentPage","reviewsCount","reviewsShownOnEachPage","pageReviewCountText","_getReviewStartNumber","_getReviewEndNumber","PageControls","previousPageClick","_getPreviousPageData","nextPageClick","_getNextPageData","Next","nextAttribute","Previous","previousAttribute","_hasPreviousPage","_paginationAriaLabel","pageReviewAriaLabel","previousButtonText","_hasNextPage","nextButtonText","_getPagesCount","_getReviewsShown","ceil","isNextPage","page","pageModifier","pageReviewCount","updateReviews","selectedSortByOption","selectedFilterByOption","reportConcernDropdownOptions","radioPairs","inputId","reportedKey","onRadioChange","reviewRatingNarratorText","voteHelpfulButton","isVoted","isVotedFor","votedReviews","approved","isUserReview","isOboRequest","yesButtonText","noButtonText","voteCount","onClickMethod","updateReviewHelpfulness","toggleWriteReviewModal","editReviewCardText","renderDate","date","DateTimeFormat","day","toggleReportReviewModal","reportToggle","reportConcernText","reportedReviews","reportedText","reportedReviewId","SubmitHelpfulnessVoteInput","ReviewsList","sortByDropdownOptions","mostHelpfulSortOptionText","mostRecentSortOptionText","highestRatedSortOptionText","lowestRatedSortOptionText","filterByDropdownOptions","allRatinsFilterByOptionText","fiveStarFilterByOptionText","fourStarFilterByOptionText","threeStarFilterByOptionText","twoStarFilterByOptionText","oneStarFilterByOptionText","reviewsListCallbacks","updateReviewTitle","userReviewTitle","updateReviewText","userReviewText","updateRating","userReviewRating","onReviewSubmitted","isSuccessful","isReviewModalOpen","hasReviewError","toggleModal","_toggleReviewModal","updateReviewHelpfulnessVote","toggleReportModal","isReportModalOpen","_onReportModalOpen","_onReportModalClose","reportReview","_reportReviewCallback","updateFilterByDropdown","updateSortByDropdown","reviewsList","pagingInfo","totalItems","listOfReviews","isFilterApplied","ratingsReviewsState","filterKeyValue","dropdownItemsCount","filterByOption","selectedIndex","_userReview","_reviewCard","_reviewCards","reviewList","reviewElements","isTakenDown","isPublished","cardProps","ratingHelpfulLabel","wasReviewHelpfulText","like","dislike","edit","report","responseName","userResponse","responderName","responseText","responseDate","cardBodyProps","responseProps","reviewProps","controlsProps","ReviewCard","_userReportModalToggle","reportingReviewId","_userReviewModal","_onTitleChange","_onTextChange","_onRatingChange","_onReviewComplete","_userReviewModalToggle","isSuccess","_reportReviewModal","submitReviewAttribute","SuccessButton","successAttribute","cancelAttribute","SpamAdvertising","reportSpamText","OffensiveContent","offensiveContentText","Profanity","profanityContentText","headerSubmitted","feedbackThankYouText","cancelReportReviewText","reportReviewButtonText","succesfulButton","okReportReviewText","reportMessage","reportModalMessage","reportSubmittedMessage","radioButtons","ReportReviewModal","_onRadioChange","_reportReview","hasReportError","reported","getAttribute","reportReviewConcern","getUserToken","_value","reportedReview","notification","selectedOption","skipItems","getSelectedProductIdFromActionInput","getReviewsForGivenProduct","GetProductReviewsInput","getRnrEndpointId","_updateVoteUi","alreadyExists","concat","submitHelpfulnessVote","showSpinner","reviewModal","reportReviewModal","filterByDropdown","LabeledDropdown","labelText","filterByDropdownText","dropdownId","dropdownOptions","onSelectOption","controlledByParent","sortByDropdown","sortByDropdownText","reviewCount","refineReviewsProps","reviewsListProps","reviewCards","pageControls","noReviewsMessage","noReviewsWithFilterMessage","noReviewsWithSelectedFilterMessage","sortByOptions","filterByOptions","buildReviewCard","createReviewModal","createReportModal","SignInMessage","SignInButton","ModalToggle","WriteReview","writeReviewCallbacks","_modalToggleRef","userInfo","signInMessage","signInButton","signInLabel","signInAriaLabel","modalToggle","editReviewButtonText","reviewButtonLabel","_buildUserReviewModal","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Decimal","Integer","findMatchingRefinementCriterion","productRefinerValue","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","RefinerSourceValue","DataTypeValue","LeftValueBoundString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","selectedCriterion","isSelecting","rangeStart","RightValueBoundString","rangeEnd","Text","TrueFalse","parentProductRefinerHierarchy","RefinerTypeValue","RefinerType","SingleSelect","matchingIndex","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","stopPropagation","clearAll","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","hierarchy","_getKeyForRefinerValue","clearAllText","choiceAriaLabel","closeAriaLabel","selectedRefinersMap","clearAllAttributes","urlBuilder","LeftValueBoundLocalizedString","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","_formatPrice","UnitText","filterValue","currency","selected","ErrorMessage","FeatureSearchResultItem","_context$request$app","productRecordId","fallbackImage","featureSimilarDescriptionTitle","featureSimilarLooksTitle","imageUrl","img","imageProps","renderProductPlacementImage","Link","modalNode","autoFocus","zIndex","modalTitle","modalFooterNode","modalCloseButtonText","getInventoryLabel","AttributeValues","inventoryAttribute","ProductSearchResultItems","inventoryLabel","swatchItemAriaLabel","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","selectedRefinementCriterion","initialMin","initialMax","String","minValue","maxValue","labels","sliderKeyString","sliderThumbs","validationErrorMin","validationErrorMax","touchedMin","touchedMax","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_this$props$selectedR5","_this$props$selectedR6","_this$props$selectedR7","_this$props$selectedR8","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onFocus","maxLabel","placeholderTextMax","ariaAttributes","Slider","inForm","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","touched","validationError","validationErrorRange","inputAsNum","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","_this$props","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","attrs","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productCount","Count","refineMenuItemAriaLabel","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","itemId","colorHexCode","SwatchComponent","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpandedOnInitialLoad","productRefinerHierarchy","hideRating","timeout","_renderChildItems","_renderRange","_renderSingleMultiSelect","refinerValuesList","listItems","selectedValue","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","SliderWithBars","onUpdateRefiners","prevState","Separator","separator","Title","SearchResultContainer","SearchResultContainer_1","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","_viewport","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","_isMounted","_updateVariantAvailability","includeAttributes","_updateListPageState","listPageState","_this$props$config$it","_this$props$config$it2","querySorting","sorting","decodeURIComponent","currentPageNumber","skip","itemsPerPage","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","featureProduct","_this$props$data$list","_this$props$data$list2","_this$props$data$list3","_this$props$data$list4","_getSearchResultModal","SearchResultModal","modalIsOpen","_toggleModal","_getCollectionTitle","collectionTitle","_this$props$context$r3","category","getFriendlyName","NameTranslations","productCountNumber","productCountText","numberOfProducts","oneProduct","TitleContainer","titlePrefix","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","_getAllSortByOptions","dropdownOption","SortingContainer","sortByDropDown","labelClassname","sortByDropdownLabel","dropdownClassname","toggleColor","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","skipCount","previousText","nextText","UncontrolledPagination","paginationAriaLabel","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandRefinersCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","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","shouldAllowBack","isPriceMinMaxFeatureState","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list6","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","paginationPreviousText","paginationNextText","_updateViewport","validationErrorNotNumber","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","_this$props$context$a2","StoreOperationsDataActions","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r4","_this$props$context$r5","_this$props$context$r6","newListPageState","GetFullProductsByCollectionInput","Skip","Sorting","recordId","Recommendation","productResults","getCollectionProducts","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r7","_this$props$context$r8","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","_listPageState$result","_listPageState$result2","_this$props$context$r9","_this$props$data$list7","_this$props$data$list8","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","searchResultModal","FeatureSearchContainer","similarLookProduct","_getViewport","Browser","createSearchResultModal","modalProps","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","_props$context$action","SearchState","SocialShareItem","_getSocialShareItem","viewprops","SocialShareItemElement","icon","socialMedia","SocialMediaComponent","SocialMedia","Facebook","postUrl","Twitter","Pinterest","Linkedin","Mail","SocialShareItemView"],"sourceRoot":""}