{"version":3,"file":"static/js/8.476862125c66ec78c0fc.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/header.view.tsx?956f","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/ratings-histogram.view.tsx?d36f","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/header.view.tsx?6b29","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/ratings-histogram.view.tsx?6aaa","webpack://Msdyn365.Commerce.Online/./src/modules/active-image-utilities/active-product.tsx?69b2","webpack://Msdyn365.Commerce.Online/./src/modules/active-image-utilities/additional-content.tsx?6946","webpack://Msdyn365.Commerce.Online/./src/modules/active-image-utilities/image-mapper.tsx?dd86","webpack://Msdyn365.Commerce.Online/./src/modules/active-image/active-image.tsx?00d3","webpack://Msdyn365.Commerce.Online/./src/modules/active-image/active-image.view.tsx?a935","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/actions/get-pickup-options-for-cartlines.ts?acad","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://Msdyn365.Commerce.Online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.tsx?d4e4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.view.tsx?d8c2","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/components/address-detail-item.tsx?d9a2","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-date.tsx?bd12","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-options-grp.tsx?3a15","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-options-radio.tsx?045f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/get-line-items.tsx?e389","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/promocode.component.tsx?d9d6","webpack://Msdyn365.Commerce.Online/./src/modules/header/utilities/mock-utilities.ts?d017","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/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/search-state.ts?dd10","webpack://Msdyn365.Commerce.Online/./src/modules/search/actions/get-auto-suggest-suggestions.ts?4735","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.categorysuggest.tsx?c65d","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.form.tsx?25a5","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.keywordsuggest.tsx?297c","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.label.tsx?0c17","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.productsuggest.tsx?2af9","webpack://Msdyn365.Commerce.Online/./src/modules/search/search.tsx?72fb","webpack://Msdyn365.Commerce.Online/./src/modules/search/search.view.tsx?1505","webpack://Msdyn365.Commerce.Online/./src/modules/social-share-item/social-share-item.tsx?bbcb","webpack://Msdyn365.Commerce.Online/./src/modules/social-share-item/social-share-item.view.tsx?2d3e","webpack://Msdyn365.Commerce.Online/./src/modules/video-player/components/additional-content.tsx?b368","webpack://Msdyn365.Commerce.Online/./src/modules/video-player/video-player.tsx?53e5","webpack://Msdyn365.Commerce.Online/./src/modules/video-player/video-player.view.tsx?fedb","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/cart-icon.view.tsx?7ec9","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/cartlineitem.component.tsx?ccc2","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/product-v2.component.tsx?d155","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/header.view.tsx?9bd3","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/ratings-histogram.view.tsx?bb5b","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/search-result-container-v2.view.tsx?6eaa"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport MsDyn365, { getUrlSync } from \"@msdyn365-commerce/core\";\r\nimport { IHeaderViewProps, Logo } from '@msdyn365-commerce-modules/header';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IHeaderProps } from '../definition-extensions/header.ext.props.autogenerated';\r\n\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n *\r\n * HeaderView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class HeaderView extends React.PureComponent> {\r\n private readonly menuNode: React.RefObject;\r\n\r\n public constructor(props: IHeaderViewProps & IHeaderProps<{}>) {\r\n\r\n super(props);\r\n this.menuNode = React.createRef();\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.config.useStickyHeader) {\r\n // Set header update methods to trigger on scroll\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('scroll', () => {\r\n this._configureStickyHeader();\r\n });\r\n }\r\n this._configureStickyHeader();\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { HeaderTag, HeaderContainer, HeaderTopBarContainer, Divider, MobileMenuContainer, MobileMenuBodyContainer, MobileMenuLinksContainer\r\n , config: { showQuickOrderLink, showPhoneNumber, phoneNumber }\r\n } = this.props;\r\n \r\n const quickOrderUrl = getUrlSync('quickorder', this.props.context.actionContext);\r\n return (\r\n \r\n \r\n \r\n\r\n
\r\n {this.props.navIcon}\r\n
\r\n
\r\n {this.props.logo}\r\n {showPhoneNumber == \"yes\" && phoneNumber ? this._renderPhoneNumber(this.props) : null}\r\n
\r\n
\r\n
\r\n {this._renderReactFragment(this.props.menuBar)}\r\n
\r\n {this._renderMobileLogo()}\r\n {this._renderReactFragment(this.props.search)}\r\n {this.props.preferredStore}\r\n {this._renderAccountBlock(this.props)}\r\n \r\n {showQuickOrderLink ? this._renderQuickViewIcon(quickOrderUrl || '#') : null}\r\n {this.props.cartIcon}\r\n {this._renderReactFragment(this.props.siteOptions)}\r\n
\r\n\r\n
\r\n \r\n \r\n { this.props.MobileMenuHeader }\r\n {this._renderReactFragment(this.props.menuBar)}\r\n \r\n { this.props.accountLinks ? this.props.accountLinks.map(link => link) : false }\r\n { this.props.siteOptions }\r\n { this.props.wishListIconMobile }\r\n { this.props.signInLink }\r\n { this.props.signOutLink }\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Function to render phone number beside the logo.\r\n * @param props - IHeaderProps.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private _renderPhoneNumber(props: IHeaderProps<{}>): JSX.Element | null {\r\n const { config: { phoneNumber } } = props;\r\n const telephoneLink: string = `tel:+1-${phoneNumber}`;\r\n return (\r\n
\r\n {phoneNumber ? phoneNumber : \"\"}\r\n
\r\n );\r\n }\r\n\r\n private _renderQuickViewIcon = (quickOrderLink: string) => (\r\n
\r\n \r\n Quick Order\r\n \r\n
\r\n )\r\n\r\n /**\r\n * Function to update header.\r\n */\r\n private readonly _configureStickyHeader = (): void => {\r\n // Get heights of cookie and promotion banners\r\n const defaultValue = 0;\r\n const headerAlertsContainer: HTMLElement | null = document.querySelector('.ms-promo-banner');\r\n const bannerHeights = headerAlertsContainer ? headerAlertsContainer.offsetHeight : defaultValue;\r\n\r\n // Triggers opacity change of header\r\n const headerElement = document.querySelector('header .default-container');\r\n if (headerElement) {\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > defaultValue) {\r\n headerElement.classList.add('lock-opaque');\r\n headerElement.classList.add('fixed');\r\n } else {\r\n headerElement.classList.remove('lock-opaque');\r\n headerElement.classList.remove('fixed');\r\n }\r\n }\r\n\r\n // Update sticky header position and opacity\r\n const stickyHeader: HTMLElement | null = document.querySelector('.desktop-navicon-container');\r\n const headerLogo: HTMLElement | null = document.querySelector('.ms-header__logo');\r\n\r\n if (stickyHeader && headerLogo) {\r\n // Fix center sticky header\r\n const navStickyPos = headerLogo.offsetHeight + bannerHeights;\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > navStickyPos) {\r\n stickyHeader.classList.add('fixed');\r\n } else {\r\n stickyHeader.classList.remove('fixed');\r\n }\r\n }\r\n };\r\n\r\n private _renderMobileLogo(): JSX.Element | null {\r\n const { config, context, typeName } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to render account block.\r\n * @param props - IHeaderViewProps.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private readonly _renderAccountBlock = (props: IHeaderViewProps): JSX.Element | null => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { AccountInfoDropdownParentContainer, AccountInfoDropdownPopoverConentContainer,\r\n accountInfoDropdownButton,\r\n signOutLink,\r\n signInLink,\r\n accountLinks\r\n } = props;\r\n if (AccountInfoDropdownParentContainer) {\r\n const accountClassName = classnames(AccountInfoDropdownParentContainer.className, 'account-desktop');\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n \r\n {accountInfoDropdownButton}\r\n \r\n { accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false }\r\n {signOutLink}\r\n \r\n \r\n );\r\n } else if (signInLink) {\r\n return (\r\n \r\n {signInLink}\r\n \r\n );\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Function to render react fragment.\r\n * @param items - React nodes.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private readonly _renderReactFragment = (items: React.ReactNode[]): JSX.Element | null => {\r\n return (\r\n <>\r\n {ArrayExtensions.hasElements(items) ? items.map((slot: React.ReactNode) => {\r\n return (<>\r\n {slot}\r\n );\r\n }) : null}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default HeaderView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { RatingComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { IHistogramItemViewProps,\r\n IRatingsHistogramData,\r\n IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { format, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IRatingsHistogramProps, IRatingsHistogramResources } from '../definition-extensions/ratings-histogram.ext.props.autogenerated';\r\n\r\n/**\r\n * Histogram item.\r\n * @param props - Histogram Item ViewProps.\r\n * @returns Histogram Item node.\r\n */\r\nconst histogramItem = (props: IHistogramItemViewProps) => {\r\n return (\r\n \r\n {props.starLabel}\r\n {props.bar}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Average ratings.\r\n * @param data - Props data.\r\n * @param context - Histogram Item ViewProps.\r\n * @param typeName - Histogram Item ViewProps.\r\n * @param componentId - Histogram Item ViewProps.\r\n * @param resources - Module resource strings.\r\n * @returns Average ratings.\r\n */\r\nconst averageRating = (data: IRatingsHistogramData, context: ICoreContext, typeName: string, componentId: string, resources: IRatingsHistogramResources) => {\r\n const defaultAverageRating: number = 0;\r\n const reviewsCount = data.ratingsSummary.result?.reviewsCount ?? defaultAverageRating;\r\n const reviewsCountString = resources.numberOfReviewsString ? format(resources.numberOfReviewsString, reviewsCount) : `${reviewsCount} reviews`;\r\n\r\n return (\r\n
\r\n
\r\n {data.ratingsSummary.result?.averageRating}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {reviewsCountString}\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Histogram view.\r\n * @param props - Ratings HistogramV iewProps.\r\n * @returns Histogram view module.\r\n */\r\nconst RatingsHistogramView: React.FC> = props => {\r\n const { heading, histogramItems, histogramProps, moduleProps, data, resources } = props;\r\n const context = props.context;\r\n const typeName = props.typeName;\r\n const moduleId = props.id;\r\n\r\n return (\r\n \r\n {heading}\r\n
\r\n {averageRating(data, context, typeName, moduleId, resources)}\r\n \r\n {histogramItems.map(item => {\r\n return histogramItem(item);\r\n })}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default RatingsHistogramView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport MsDyn365, { getUrlSync } from \"@msdyn365-commerce/core\";\r\nimport { IHeaderViewProps, Logo } from '@msdyn365-commerce-modules/header';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { get } from 'lodash';\r\n\r\nimport { IHeaderProps } from '../definition-extensions/header.ext.props.autogenerated';\r\n\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n *\r\n * HeaderView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class HeaderView extends React.PureComponent> {\r\n private readonly menuNode: React.RefObject;\r\n public constructor(props: IHeaderViewProps & IHeaderProps<{}>) {\r\n\r\n super(props);\r\n this.menuNode = React.createRef();\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.config.useStickyHeader) {\r\n // Set header update methods to trigger on scroll\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('scroll', () => {\r\n this._configureStickyHeader();\r\n });\r\n }\r\n this._configureStickyHeader();\r\n }\r\n this.handleLoginRedirect();\r\n }\r\n\r\n private handleLoginRedirect() {\r\n const { context : {\r\n actionContext,\r\n request: {\r\n user: {\r\n isAuthenticated,\r\n isOBORequest\r\n }\r\n }\r\n }} = this.props;\r\n const isHomePage = actionContext.requestContext.url.requestUrl.pathname === '/';\r\n const customer = this.props.data.accountInformation?.result;\r\n if (isAuthenticated) {\r\n if (isHomePage) {\r\n if (isOBORequest && !customer) {\r\n window.location.href = getUrlSync('businesses', this.props.context.actionContext) || '/businesses';\r\n } else {\r\n window.location.href = getUrlSync('account', this.props.context.actionContext) || '/myaccount';\r\n }\r\n } else {\r\n const accountUrl = getUrlSync('account', this.props.context.actionContext);\r\n const logoAnchorTag = document.querySelector('.ms-header__logo>a');\r\n if (logoAnchorTag && accountUrl) {\r\n logoAnchorTag.href = accountUrl;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { HeaderTag, HeaderContainer, HeaderTopBarContainer, Divider, MobileMenuContainer, MobileMenuBodyContainer, MobileMenuLinksContainer\r\n , config: { showQuickOrderLink, showPhoneNumber, phoneNumber }\r\n } = this.props;\r\n const quickOrderUrl = getUrlSync('quickorder', this.props.context.actionContext);\r\n return (\r\n \r\n \r\n \r\n\r\n
\r\n {this.props.navIcon}\r\n
\r\n
\r\n {this.props.logo}\r\n {showPhoneNumber == \"yes\" && phoneNumber ? this._renderPhoneNumber(this.props) : null}\r\n
\r\n
\r\n
\r\n {this._renderReactFragment(this.props.menuBar)}\r\n
\r\n {this._renderMobileLogo()}\r\n {this._renderReactFragment(this.props.search)}\r\n {this.props.preferredStore}\r\n {this._renderAccountBlock(this.props)}\r\n \r\n {showQuickOrderLink ? this._renderQuickViewIcon(quickOrderUrl || '#') : null}\r\n {this.props.cartIcon}\r\n {this._renderReactFragment(this.props.siteOptions)}\r\n
\r\n\r\n
\r\n \r\n \r\n { this.props.MobileMenuHeader }\r\n {this._renderReactFragment(this.props.menuBar)}\r\n \r\n { this.props.accountLinks ? this.props.accountLinks.map(link => link) : false }\r\n { this.props.siteOptions }\r\n { this.props.wishListIconMobile }\r\n { this.props.signInLink }\r\n { this.props.signOutLink }\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Function to render phone number beside the logo.\r\n * @param props - IHeaderProps.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private _renderPhoneNumber(props: IHeaderProps<{}>): JSX.Element | null {\r\n const { config: { phoneNumber } } = props;\r\n const telephoneLink: string = `tel:+1-${phoneNumber}`;\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _renderQuickViewIcon = (quickOrderLink: string) => (\r\n \r\n )\r\n\r\n /**\r\n * Function to update header.\r\n */\r\n private readonly _configureStickyHeader = (): void => {\r\n // Get heights of cookie and promotion banners\r\n const defaultValue = 0;\r\n const headerAlertsContainer: HTMLElement | null = document.querySelector('.ms-promo-banner');\r\n const bannerHeights = headerAlertsContainer ? headerAlertsContainer.offsetHeight : defaultValue;\r\n\r\n // Triggers opacity change of header\r\n const headerElement = document.querySelector('header .default-container');\r\n if (headerElement) {\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > defaultValue) {\r\n headerElement.classList.add('lock-opaque');\r\n headerElement.classList.add('fixed');\r\n } else {\r\n headerElement.classList.remove('lock-opaque');\r\n headerElement.classList.remove('fixed');\r\n }\r\n }\r\n\r\n // Update sticky header position and opacity\r\n const stickyHeader: HTMLElement | null = document.querySelector('.desktop-navicon-container');\r\n const headerLogo: HTMLElement | null = document.querySelector('.ms-header__logo');\r\n\r\n if (stickyHeader && headerLogo) {\r\n // Fix center sticky header\r\n const navStickyPos = headerLogo.offsetHeight + bannerHeights;\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > navStickyPos) {\r\n stickyHeader.classList.add('fixed');\r\n } else {\r\n stickyHeader.classList.remove('fixed');\r\n }\r\n }\r\n };\r\n\r\n private _renderMobileLogo(): JSX.Element | null {\r\n const { config, context, typeName } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to render account block.\r\n * @param props - IHeaderViewProps.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private readonly _renderAccountBlock = (props: IHeaderViewProps): JSX.Element | null => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\r\n const { AccountInfoDropdownParentContainer, AccountInfoDropdownPopoverConentContainer,\r\n accountInfoDropdownButton,\r\n signOutLink,\r\n signInLink,\r\n accountLinks,\r\n context: { request: { user : { isOBORequest }} }\r\n } = props;\r\n if (AccountInfoDropdownParentContainer) {\r\n const changeUserSlug = 'Change User'; // Change user page\r\n let accountLinksFiltered: React.ReactNode[] = [];\r\n if (isOBORequest) { // If we're mocking a user, show the change user button, if we are not, remove it before render.\r\n accountLinksFiltered = accountLinks || [];\r\n } else if (accountLinks) {\r\n accountLinks.forEach(node => {\r\n const linkUrl = get(node, 'props.link.linkText');\r\n if (linkUrl && (linkUrl as string) !== changeUserSlug) {\r\n accountLinksFiltered.push(node);\r\n }\r\n })\r\n }\r\n const accountClassName = classnames(AccountInfoDropdownParentContainer.className, 'account-desktop');\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n \r\n {accountInfoDropdownButton}\r\n \r\n { accountLinksFiltered.map((link: React.ReactNode) => link) }\r\n {signOutLink}\r\n \r\n \r\n );\r\n } else if (signInLink) {\r\n return (\r\n \r\n {signInLink}\r\n \r\n );\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Function to render react fragment.\r\n * @param items - React nodes.\r\n * @returns Returns JSX.Element | null.\r\n */\r\n private readonly _renderReactFragment = (items: React.ReactNode[]): JSX.Element | null => {\r\n return (\r\n <>\r\n {ArrayExtensions.hasElements(items) ? items.map((slot: React.ReactNode) => {\r\n return (<>\r\n {slot}\r\n );\r\n }) : null}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default HeaderView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { RatingComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { IHistogramItemViewProps,\r\n IRatingsHistogramData,\r\n IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { format, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IRatingsHistogramProps, IRatingsHistogramResources } from '../definition-extensions/ratings-histogram.ext.props.autogenerated';\r\n\r\n/**\r\n * Histogram item.\r\n * @param props - Histogram Item ViewProps.\r\n * @returns Histogram Item node.\r\n */\r\nconst histogramItem = (props: IHistogramItemViewProps) => {\r\n return (\r\n \r\n {props.starLabel}\r\n {props.bar}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Average ratings.\r\n * @param data - Props data.\r\n * @param context - Histogram Item ViewProps.\r\n * @param typeName - Histogram Item ViewProps.\r\n * @param componentId - Histogram Item ViewProps.\r\n * @param resources - Module resource strings.\r\n * @returns Average ratings.\r\n */\r\nconst averageRating = (data: IRatingsHistogramData, context: ICoreContext, typeName: string, componentId: string, resources: IRatingsHistogramResources) => {\r\n const defaultAverageRating: number = 0;\r\n const reviewsCount = data.ratingsSummary.result?.reviewsCount ?? defaultAverageRating;\r\n const reviewsCountString = resources.numberOfReviewsString ? format(resources.numberOfReviewsString, reviewsCount) : `${reviewsCount} reviews`;\r\n\r\n return (\r\n
\r\n
\r\n {data.ratingsSummary.result?.averageRating}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {reviewsCountString}\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Histogram view.\r\n * @param props - Ratings HistogramV iewProps.\r\n * @returns Histogram view module.\r\n */\r\nconst RatingsHistogramView: React.FC> = props => {\r\n const { heading, histogramItems, histogramProps, moduleProps, data, resources } = props;\r\n const context = props.context;\r\n const typeName = props.typeName;\r\n const moduleId = props.id;\r\n\r\n return (\r\n \r\n {heading}\r\n
\r\n {averageRating(data, context, typeName, moduleId, resources)}\r\n \r\n {histogramItems.map(item => {\r\n return histogramItem(item);\r\n })}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default RatingsHistogramView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent, RatingComponent } from '@msdyn365-commerce/components';\nimport {\n IComponent,\n IComponentProps,\n ICoreContext,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * IActiveProductProps interface.\n */\nexport interface IActiveProductProps extends IComponentProps<{ product?: ProductSearchResult }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n}\n\n/**\n * IActiveProduct interface.\n */\nexport interface IActiveProduct extends IComponent {}\n\n/**\n * RenderDescription function.\n * @param description - Product description string.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderDescription(description?: string): JSX.Element | null {\n return

{description}

;\n}\n\n/**\n * GetRatingAriaLabel function.\n * @param rating - Product rating number.\n * @param ratingAriaLabel - Product rating aria label.\n * @returns - Returns string.\n */\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n const numberTwo: number = 2;\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(numberTwo);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\n/**\n * RenderRating function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param ratingId - The rating id.\n * @param avgRating - The average rating.\n * @param totalRatings - The total ratings.\n * @param ariaLabel - The rating aria label.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderRating(\n context: ICoreContext,\n typeName: string,\n ratingId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() ?? undefined;\n const ratingAriaLabel = getRatingAriaLabel(avgRating, ariaLabel);\n\n return (\n \n );\n}\n\n/**\n * RenderPrice function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param productId - The product id.\n * @param basePrice - The base price of the product.\n * @param adjustedPrice - The adjusted price of the product.\n * @param savingsText - The savings text of the product.\n * @param freePriceText - The free price text.\n * @param originalPriceText - The original price text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n productId: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string\n): JSX.Element | null {\n const price: ProductPrice = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n \n );\n}\n\n/**\n * RenderProductPlacementImage function.\n * @param requestContext - RequestContext.\n * @param imageSettings - The product image settings.\n * @param gridSettings - The viewport gird settings.\n * @param imageUrl - The product image url.\n * @param altText - The product image alt text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderProductPlacementImage(\n requestContext: IRequestContext,\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const imgData: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return ;\n}\n\n/**\n * ActiveProduct constant.\n * @param props - The active product props.\n * @param props.data - The product search result data.\n * @param props.context - The core context.\n * @param props.imageSettings - The prodcut image settings.\n * @param props.savingsText - The product savings text.\n * @param props.freePriceText - The free price text.\n * @param props.originalPriceText - The original price text.\n * @param props.ratingAriaLabel - The product rating aria label.\n * @param props.typeName - The type name of the module.\n * @param props.id - The id of the product.\n * @returns - Returns JSX.Element | null.\n */\nexport const ActiveProductComponent: React.FC = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n ratingAriaLabel,\n typeName,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Do not need naming convention check for library prameters\n id\n}) => {\n const product = data.product;\n if (!product) {\n return null;\n }\n\n return (\n <>\n
\n
\n {renderProductPlacementImage(\n context.actionContext.requestContext,\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name\n )}\n
\n
\n

{product.Name}

\n {renderPrice(context, typeName, id, product.BasePrice, product.Price, savingsText, freePriceText, originalPriceText)}\n {renderDescription(product.Description)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\n
\n
\n \n );\n};\n\nexport default ActiveProductComponent;\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 { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * ILinksData: Interface for\n * Additional content.\n */\ninterface ILinksData {\n linkText?: string;\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n isOpenInNewTab?: boolean;\n}\n\n/**\n * IAdditionalContentData: Interface for\n * Active content.\n */\ninterface IAdditionalContentData {\n heading?: string;\n subtext?: string;\n links?: ILinksData[];\n}\n\n/**\n * IActiveImageAdditionalContentProps: Interface for\n * Active Image Additional Content Component props.\n */\nexport interface IActiveImageAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData | undefined;\n handleAdditionalTextChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IActiveImageAdditionalContentViewProps: Interface for\n * Active Image Additional Content view props.\n */\nexport interface IActiveImageAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Active Image Additional content component props.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Active Image Additional content component props.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Active Image Additional content component props.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IActiveImageAdditionalContentProps, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'msc-active-image__details__additional-content__cta__links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.isOpenInNewTab,\n role: 'button'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Active Image additonal content item props.\n * @param props - Active Image Additional content component props.\n * @returns IActiveImageAdditionalContentItemViewProps.\n */\nconst assembleNode = (item: IAdditionalContentData, props: IActiveImageAdditionalContentProps): IActiveImageAdditionalContentViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, index);\n });\n\n return {\n additionalContentNode: { className: 'msc-active-image__details__additional-content' },\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentContainer: { className: 'msc-active-image__details__additional-content__container' },\n additionalContentItemLinks: { className: 'msc-active-image__details__additional__content__cta' }\n };\n};\n\n/**\n * ActiveImageAdditionalContent component.\n * @param props - Active Image Additional content component props.\n * @returns Active Image Additional content view props.\n */\nexport const activeImageAdditionalContent = (\n props: IActiveImageAdditionalContentProps\n): IActiveImageAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n return assembleNode(additionalContent, props);\n};\n\nexport default activeImageAdditionalContent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport React from 'react';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IRgbColor\n * @description - The IRgbColor interface contract.\n */\nexport interface IRgbColor {\n rValue: number;\n gValue: number;\n bValue: number;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IArea {\n areaId: string;\n coords: number[];\n href?: string;\n center?: number[];\n primaryImageUrl?: string;\n productUrl: string;\n productSearchResult?: ProductSearchResult;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IAreaMap {\n name: string;\n areas: IArea[];\n}\n\n/**\n * @enum CanvasCalculations\n * @description - The canvas calculations enum.\n */\nexport enum CanvasCalculations {\n defaultWidth = 0,\n defaultHeight = 0,\n defaultPositionX = 0,\n defaultPositionY = 0,\n defaultScale = 1,\n halfDivisor = 2,\n doubleMultiplier = 2,\n buttonHeight = 30,\n buttonPadding = 30,\n paddingAdjustment = 3,\n expandAnimationStartWidth = 10,\n expandAnimationEndWidth = 40,\n collapseAnimationStartWidth = 40,\n collapseAnimationEndWidth = 8,\n expandRadius = 12,\n collapseRadius = 8,\n rotation = 1.57,\n startAngle = 0,\n endAngle = 7,\n clearMargin = 50,\n clearHeight = 100,\n clearWidth = 100,\n textFadeInStartValue = 0,\n textFadeOutStartValue = 0.5,\n textFadeInterval = 0.01\n}\n\n/**\n * @enum CanvasStyles\n * @description - The canvas styles enum.\n */\nexport enum CanvasStyles {\n color = '#FFFFFF',\n buttonTextClor = '#000000'\n}\n\n/**\n * @enum\n * @description - The canvas styles enum.\n */\nexport interface IImageMapperResources {\n buttonText?: string;\n altText?: string;\n}\n\n/**\n * @interface IImageMapperProps\n * @description - The IImageMapperProps interface contract.\n */\nexport interface IImageMapperProps {\n imageData: IImageData;\n areaMap: IAreaMap;\n viewPort: string;\n requestContext: IRequestContext;\n color?: string;\n buttonTextClor?: string;\n width?: number;\n imgWidth?: number;\n activeImageRefs: React.RefObject;\n imageMapperResources?: IImageMapperResources;\n onLoad?(): void;\n onClick?(area: IArea, index: number, event: AreaEvent): void;\n onFocus?(area: IArea, index: number, event: AreaEvent): void;\n onMouseEnter?(area: IArea, index: number, event: AreaEvent): void;\n onMouseLeave?(area: IArea, index: number, event: AreaEvent): void;\n}\n\n/**\n * ImageMapper.\n */\nexport class ImageMapper extends React.Component {\n private readonly _backgroundImage: React.RefObject;\n\n private readonly _container: React.RefObject;\n\n private readonly _canvas: React.RefObject;\n\n private _isDesktopViewPort: boolean = false;\n\n private _context: CanvasRenderingContext2D | null | undefined = null;\n\n public constructor(props: IImageMapperProps) {\n super(props);\n this._backgroundImage = React.createRef();\n this._container = React.createRef();\n this._canvas = React.createRef();\n }\n\n /**\n * ComponentDidMount method.\n */\n public componentDidMount(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n this.renderAreas();\n this._context = null;\n }\n\n /**\n * ComponentDidUpdate method.\n */\n public componentDidUpdate(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n }\n\n /**\n * ShouldComponentUpdate method.\n * @param nextProps - Next props.\n * @returns Returns boolean.\n */\n public shouldComponentUpdate(nextProps: IImageMapperProps): boolean {\n let shouldRender = false;\n if (nextProps !== this.props) {\n shouldRender = true;\n }\n return shouldRender;\n }\n\n /**\n * GetActiveImageWidth method - Gets the active image width.\n * @returns Returns number | undefined.\n */\n public getActiveImageWidth = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return undefined;\n };\n\n /**\n * GetActiveImageHeight method - Gets the active image height.\n * @returns Returns number | undefined.\n */\n public getActiveImageHeight = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return undefined;\n };\n\n /**\n * ConvertHexToRgb method - This method takes color in HEX format and returns IRgbColor color object.\n * @param hexColor -The color hex value.\n * @returns -Returns IRgbColor object.\n */\n public convertHexToRgb = (hexColor: string): IRgbColor => {\n // RegEx used to execute the conversion of the hex color to rgb value.\n const regEx = new RegExp('^#?([a-f\\\\d]{2})([a-f\\\\d]{2})([a-f\\\\d]{2})$', 'u');\n\n // RegEx.exec method executes a search for a match in a specified string. Returns a result array, or null.\n const result = regEx.exec(hexColor);\n const defaultValue = 0;\n return result\n ? {\n rValue: Number.parseInt(result[1], 16),\n gValue: Number.parseInt(result[2], 16),\n bValue: Number.parseInt(result[3], 16)\n }\n : {\n rValue: defaultValue,\n gValue: defaultValue,\n bValue: defaultValue\n };\n };\n\n /**\n * ApplyFadingTransition method - Applys fading transition to button text.\n * @param text -The button text.\n * @param coords -The coordinates.\n * @param rgbColor -The RGB color object.\n * @param alpha -The alpha value of the button text.\n */\n public applyFadingTransition = (text: string, coords: number[], rgbColor: IRgbColor, alpha: number): void => {\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n context.fillStyle = `rgba(${rgbColor.rValue}, ${rgbColor.gValue}, ${rgbColor.bValue}, ${alpha} )`;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * Draw button method - Draws button and contains fixed hight, padding values.\n * @param text -The button text.\n * @param coords -The coordinates.\n */\n public drawButton = (text: string, coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonHeight = CanvasCalculations.buttonHeight;\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n const buttonPositionX = coords[0] - buttonWidth / halfDivisor;\n const buttonPositionY = coords[1] - buttonHeight / halfDivisor;\n const arcsize = buttonHeight / halfDivisor;\n\n context.beginPath();\n context.moveTo(buttonPositionX + arcsize, buttonPositionY);\n context.lineTo(buttonPositionX + buttonWidth - arcsize, buttonPositionY);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY,\n buttonPositionX + buttonWidth,\n buttonPositionY + arcsize,\n arcsize\n );\n context.lineTo(buttonPositionX + buttonWidth, buttonPositionY + buttonHeight - arcsize);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY + buttonHeight,\n buttonPositionX + buttonWidth - arcsize,\n buttonPositionY + buttonHeight,\n arcsize\n );\n context.lineTo(buttonPositionX + arcsize, buttonPositionY + buttonHeight);\n context.arcTo(buttonPositionX, buttonPositionY + buttonHeight, buttonPositionX, buttonPositionY - arcsize, arcsize);\n context.lineTo(buttonPositionX, buttonPositionY + arcsize);\n context.arcTo(buttonPositionX, buttonPositionY, buttonPositionX + arcsize, buttonPositionY, arcsize);\n context.lineTo(buttonPositionX + arcsize, buttonPositionY);\n context.stroke();\n context.closePath();\n context.fillStyle = color;\n context.fill();\n context.fillStyle = buttonTextClor;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * ExpandAnimation method - Shows expand animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public expandAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.expandAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.expandAnimationEndWidth;\n const radius = CanvasCalculations.expandRadius;\n const rotation = CanvasCalculations.rotation;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeInValue = CanvasCalculations.textFadeInStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Reders expand animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n context.fillStyle = color;\n if (buttonText) {\n if (animationStartWidth < animationEndWidth) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeInValue);\n textFadeInValue += CanvasCalculations.textFadeInterval;\n animationStartWidth++;\n } else {\n this.drawButton(buttonText, [pointPositionX, pointPositionY]);\n }\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * CollapseAnimation method - Shows collapse animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public collapseAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.collapseAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.collapseAnimationEndWidth;\n const rotation = CanvasCalculations.rotation;\n const clearMargin = CanvasCalculations.clearMargin;\n const clearHeight = CanvasCalculations.clearHeight;\n const clearWidth = CanvasCalculations.clearWidth;\n const radius = CanvasCalculations.collapseRadius;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeOutValue = CanvasCalculations.textFadeOutStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Renders collapse animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.clearRect(pointPositionX - clearMargin, pointPositionY - clearMargin, clearWidth, clearHeight);\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n if (animationEndWidth < animationStartWidth && buttonText) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeOutValue);\n textFadeOutValue -= CanvasCalculations.textFadeInterval;\n animationStartWidth--;\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * DrawCircle method - Renders active points.\n * @param coords -Coordinates.\n */\n public drawCircle = (coords: number[]): void => {\n const { color = CanvasStyles.color, viewPort } = this.props;\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n const startAngle: number = CanvasCalculations.startAngle;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n const radius = viewPort === 'xs' || viewPort === 'sm' ? coords[2] * doubleMultiplier : coords[2];\n if (!context) {\n return;\n }\n context.fillStyle = color;\n context.beginPath();\n context.strokeStyle = color;\n context.arc(coords[0], coords[1], radius, startAngle, Math.PI * doubleMultiplier);\n context.closePath();\n context.stroke();\n context.fill();\n };\n\n /**\n * ScaleCoords method - To scale the active point coordinates based on the window size.\n * @param coords -Coordinates.\n * @returns -Returns number[].\n */\n public scaleCoords = (coords: number[]): number[] => {\n const { imgWidth } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultScale: number = CanvasCalculations.defaultScale;\n\n // Calculate scale based on current 'width' and the original 'imgWidth'\n const width = this.getActiveImageWidth();\n const scale = width && imgWidth && imgWidth > defaultWidth ? width / imgWidth : defaultScale;\n return coords.map(coord => coord * scale);\n };\n\n /**\n * RenderPrefilledAreas method - To render active points in case of events.\n */\n public renderPrefilledAreas = (): void => {\n const { areaMap } = this.props;\n areaMap.areas.map(area => {\n this.drawCircle(this.scaleCoords(area.coords));\n return null;\n });\n };\n\n /**\n * ComputeCenter method - To re-calculate the center of active point based on window size.\n * @param area -IArea.\n * @returns -Returns number[].\n */\n public computeCenter = (area: IArea): number[] => {\n const scaledCoords = this.scaleCoords(area.coords);\n return [scaledCoords[0], scaledCoords[1]];\n };\n\n /**\n * HandleHoverOn method - To handle mouse hover on event.\n * @param area -IArea.\n */\n public handleHoverOn = (area: IArea): void => {\n if (area.center && this._canvas.current) {\n this.drawCircle(this.scaleCoords(area.coords));\n this.expandAnimation(area.center);\n }\n };\n\n /**\n * HandleHoverOff method - To handle mouse hover off event.\n * @param area -IArea.\n */\n public handleHoverOff = (area: IArea): void => {\n if (this._canvas.current) {\n const context = this._canvas.current.getContext('2d') ?? this._context;\n const canvasPositionX: number = CanvasCalculations.defaultPositionX;\n const canvasPositionY: number = CanvasCalculations.defaultPositionY;\n\n if (!context) {\n return;\n }\n context.clearRect(canvasPositionX, canvasPositionY, this._canvas.current.width, this._canvas.current.height);\n this.renderPrefilledAreas();\n if (area.center) {\n this.collapseAnimation(area.center);\n }\n }\n };\n\n /**\n * Click method - Mouse click event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public click = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onClick } = this.props;\n if (onClick) {\n event.preventDefault();\n onClick(area, index, event);\n }\n };\n\n /**\n * HoverOn method - Mouse hover on event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOn = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseEnter } = this.props;\n this.handleHoverOn(area);\n if (onMouseEnter) {\n onMouseEnter(area, index, event);\n }\n };\n\n /**\n * HoverOff method - Mouse hover off event.\n * @param area - IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOff = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseLeave } = this.props;\n\n this.handleHoverOff(area);\n\n if (onMouseLeave) {\n onMouseLeave(area, index, event);\n }\n };\n\n /**\n * RenderAreas method - Renders active points at given coordinates.\n * @returns -Returns JSX.Element[].\n */\n public renderAreas = (): JSX.Element[] => {\n const { areaMap, viewPort } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText ? this.props.imageMapperResources.buttonText : '';\n const altText = this.props.imageMapperResources?.altText ? this.props.imageMapperResources.altText : '';\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n\n return areaMap.areas.map((area, index) => {\n const scaledCoords = this.scaleCoords(area.coords);\n const xsRadius = area.coords[2] * doubleMultiplier;\n if (viewPort === 'xs') {\n scaledCoords[2] = xsRadius;\n }\n const center = this.computeCenter(area);\n const extendedArea = { ...area, scaledCoords, center };\n const areaKey = `area-${index}`;\n const altTextWithProductName = altText\n .replace('{buttonText}', buttonText ? buttonText : '')\n .replace('{productName}', area.productSearchResult?.Name ? area.productSearchResult.Name : '');\n return (\n \n );\n });\n };\n\n /**\n * InitCanvas method - To render the canvas.\n */\n public initCanvas = (): void => {\n if (!this._canvas.current || !this._backgroundImage.current || !this._container.current) {\n return;\n }\n\n const { color, onLoad } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultHeight: number = CanvasCalculations.defaultHeight;\n\n const canvasWidth = this.getActiveImageWidth() ?? defaultWidth;\n const canvasHeight = this.getActiveImageHeight() ?? defaultHeight;\n\n this._canvas.current.width = canvasWidth;\n this._canvas.current.height = canvasHeight;\n this._container.current.style.width = `${canvasWidth}px`;\n\n const context = this._canvas.current.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.fillStyle = color ?? '';\n\n if (onLoad) {\n onLoad();\n }\n\n this.renderPrefilledAreas();\n };\n\n /**\n * Render method - To render the image mapper component with active image, canvas and active points.\n * @returns -Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const { imageData, areaMap, requestContext } = this.props;\n\n return (\n
\n \n \n \n {this.renderAreas()}\n \n
\n );\n }\n}\n\nexport default ImageMapper;\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 { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n activeImageAdditionalContent,\n ActiveProductComponent,\n IActiveImageAdditionalContentViewProps,\n IArea,\n IAreaMap,\n IImageMapperProps,\n ImageMapper\n} from '../active-image-utilities';\nimport { IActiveImageData } from './active-image.data';\nimport { IActiveImageProps } from './active-image.props.autogenerated';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IActiveImageViewProps\n * @classdesc - The IActiveImageViewProps interface contract.\n */\nexport interface IActiveImageViewProps extends IActiveImageProps<{}>, IImageMapperProps {\n activePointContainer: IModuleProps;\n activePointDetailsContainer: INodeProps;\n imageMapper: React.ReactNode;\n overlay: React.ReactNode;\n productCard: React.ReactNode;\n title?: React.ReactNode;\n text?: React.ReactNode;\n links?: React.ReactNode;\n detailsContainer?: INodeProps;\n detailsContainerCta?: INodeProps;\n additionalContent?: IActiveImageAdditionalContentViewProps;\n productCardleftPosition: number;\n productCardtopPosition: number;\n handleAdditionalText?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalParagraph?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalLinkText?(event: MsDyn365.ContentEditableEvent): void;\n}\n\n/**\n * @interface IActiveImageLinksData\n * @classdesc - The IActiveImageLinksData interface contract.\n */\nexport interface IActiveImageLinksData {\n linkText?: string;\n linkUrl: MsDyn365.ILinkData;\n ariaLabel?: string;\n willOpenInNewTab?: boolean;\n}\n\n/**\n * @interface IActiveImageState\n * @classdesc - The IActiveImageState interface contract.\n */\ninterface IActiveImageState {\n clientWidth: number;\n area: IArea | null;\n viewport: string;\n overlayClass: string;\n}\n\n/**\n * @enum ActiveImageConstants\n * @description - The active image constants enum.\n */\nexport enum ActiveImageConstants {\n timeoutInterval = 200,\n enterKey = 'Enter',\n escKey = 'Escape'\n}\n\n/**\n *\n * ActiveImage class.\n * @extends {React.PureComponent & IImageMapperProps, IActiveImageState>}\n */\nexport class ActiveImage extends React.PureComponent & IImageMapperProps, IActiveImageState> {\n private readonly _telemetryContent: ITelemetryContent;\n\n private _isDesktopViewPort: boolean;\n\n private readonly _defaultProductCardWidth: number = 315;\n\n private readonly _defaultProdutCardHight: number = 490;\n\n private readonly _activePoints: IArea[] = [];\n\n private readonly _activeImageRefs: React.RefObject;\n\n private readonly _activeImageClass: string;\n\n private readonly _productCardDivRef: React.RefObject;\n\n public constructor(props: IActiveImageProps & IImageMapperProps) {\n super(props);\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this._activeImageClass = `msc-active-image-${this.getActiveImageId()}`;\n this.state = {\n clientWidth: 0,\n area: null,\n viewport,\n overlayClass: ''\n };\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n this._activeImageRefs = React.createRef();\n this._productCardDivRef = React.createRef();\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('resize', this.updateClientWidth);\n document.addEventListener('keydown', this.keyDown, false);\n document.addEventListener('mousedown', this._handleOutsideClick);\n }\n setTimeout(() => {\n this.updateClientWidth();\n }, ActiveImageConstants.timeoutInterval);\n\n if (MsDyn365.msdyn365Commerce.isBrowser && this._activeImageRefs.current) {\n const images: HTMLCollectionOf = this._activeImageRefs.current.getElementsByClassName(\n 'msc-thumbnail_image msc-active-image-img'\n );\n if (ArrayExtensions.hasElements(Array.from(images))) {\n images[0].removeAttribute('usemap');\n }\n }\n }\n\n /**\n * AddActivePoints method - To handle add Active Points.\n * @param area - IArea.\n * @param product - ProductSearchResult.\n * @param coords - Coords.\n * @param productUrl - String.\n */\n public addActivePoints = (area: IArea | undefined, product: ProductSearchResult, coords: number[], productUrl: string): void => {\n if (!area) {\n this._activePoints.push({\n areaId: product.RecordId.toString(),\n coords,\n primaryImageUrl: product.PrimaryImageUrl ?? '',\n productUrl,\n productSearchResult: product\n });\n }\n };\n\n /**\n * ComponentWillUnmount method.\n */\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('resize', this.updateClientWidth);\n document.removeEventListener('keydown', (this.keyDown as unknown) as EventListener, false);\n document.removeEventListener('mousedown', this._handleOutsideClick, false);\n }\n }\n\n /**\n * UpdateClientWidth method to update client width in state.\n */\n public updateClientWidth = (): void => {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this.setState({ clientWidth: this.getActiveImageWidth(), viewport });\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n };\n\n /**\n * Render method.\n * @returns - Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const viewProps: IActiveImageViewProps = {\n ...(this.props as IImageMapperProps & IActiveImageProps<{}>),\n activePointContainer: {\n moduleProps: this.props,\n className: classnames('msc-active-image', this._activeImageClass, this.props.config.className)\n },\n activePointDetailsContainer: {\n tag: 'div',\n className: classnames('msc-active-image-wrapper', this._activeImageClass, this.props.config.className),\n ref: this._activeImageRefs\n },\n imgWidth: this.props.config.canvasWidth,\n imageMapper: this.renderImageMapper(),\n overlay: this.renderOverlay(),\n productCard: this.renderProductCard(),\n productCardleftPosition: this.getProductCardPositionX(),\n productCardtopPosition: this.getProductCardPositionY(),\n title: this.renderActiveImageDetailsHeading(),\n text: this.renderActiveImageDetailsParagraph(),\n links: this.renderActiveImageDetailsLinks(),\n detailsContainer: { className: 'msc-active-image__details' },\n detailsContainerCta: { className: 'msc-active-image__details__cta' },\n additionalContent: activeImageAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkText: this.handleAdditionalTextChange\n };\n\n return this.props.renderView(viewProps);\n }\n\n /**\n * RenderImageMapper method - To render image mapper.\n * @returns - Returns React.ReactNode | null.\n */\n public renderImageMapper = (): React.ReactNode | null => {\n const { config, context } = this.props;\n const defaultPosition: number = 0;\n const defaultLength: number = 0;\n const productResults = this.props.data.products.result;\n if (config.activePoints && productResults) {\n for (const product of productResults) {\n for (const configProduct of config.activePoints) {\n if (product.ItemId === configProduct.itemId) {\n const productUrl = getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined);\n const coords = [\n configProduct.xPosition ?? defaultPosition,\n configProduct.yPosition ?? defaultPosition,\n configProduct.radius ?? defaultPosition\n ];\n const area = this._activePoints.find(activePoint => JSON.stringify(activePoint.coords) === JSON.stringify(coords));\n this.addActivePoints(area, product, coords, productUrl);\n }\n }\n }\n }\n const mappedArea: IAreaMap = {\n name: `map-${this._activeImageClass}`,\n areas: this._activePoints.length > defaultLength ? this._activePoints : []\n };\n\n // If image is null, we want to render the placeholder SVG - by passing image data with empty src\n return (\n \n );\n };\n\n /**\n * EnterArea method - To handle mouse enter event.\n * @param area - Active point area.\n * @param index - Active point index.\n * @param event - Active point AreaEvent.\n */\n public enterArea = (area: IArea, index: number, event: AreaEvent): void => {\n this.setState({ area, overlayClass: 'msc-active-image-overlay' });\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(area, index, event);\n }\n if (event.type.toLocaleLowerCase() === 'click' && this._isDesktopViewPort) {\n window.open(area.productUrl, '_self');\n }\n };\n\n /**\n * LeaveArea method - To handle mouse leave event.\n */\n public leaveArea = (): void => {\n if (this._isDesktopViewPort) {\n this.resetState();\n }\n };\n\n /**\n * ResetState method - To reset the state for area and overlayclass.\n */\n public resetState = (): void => {\n this.setState({ area: null, overlayClass: '' });\n };\n\n /**\n * RenderProductComponent method - To render the product card with product information.\n * @returns - Returns React.ReactNode.\n */\n public renderProductComponent = (): React.ReactNode => {\n if (this.state.area?.productSearchResult) {\n const baseImageUrl: string = this.props.context.request.apiSettings.baseImageUrl;\n const imageUrl: string = this.state.area.primaryImageUrl ?? '';\n const primaryImageUrl: string = `${baseImageUrl}${imageUrl}`;\n const product: ProductSearchResult = this.state.area.productSearchResult;\n product.PrimaryImageUrl = primaryImageUrl;\n\n return (\n \n );\n }\n return React.Fragment;\n };\n\n /**\n * RenderProductCard method - To render product cards.\n * @returns - Returns React.ReactNode.\n */\n public renderProductCard = (): React.ReactNode => {\n const { area } = this.state;\n\n return (\n <>\n {area?.center && (\n
\n
\n {!this._isDesktopViewPort &&
\n
\n )}\n \n );\n };\n\n /**\n * RenderOverlay method - To render overlay for non desktop viewports.\n * @returns - Returns React.ReactNode.\n */\n public renderOverlay = (): React.ReactNode => {\n return <>{!this._isDesktopViewPort &&
};\n };\n\n /**\n * GetProductCardPositionX method - Provides product card x position to the left or right of active point based on available space.\n * For xs, sm and md viewports it provides x position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionX = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsWidth = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.w\n : defaultImageSettings.viewports.lg?.w;\n const defaultPositionX: number = 0;\n const halfDivisor: number = 2;\n const productCardWidth: number = productImageSettingsWidth ? productImageSettingsWidth : this._defaultProductCardWidth;\n const { area, clientWidth, viewport } = this.state;\n const pointPositionX = area?.center?.[0] ?? clientWidth / halfDivisor;\n const leftAllignPosition = pointPositionX - productCardWidth - productCardWidth / halfDivisor;\n const rightAllignPosition = pointPositionX + productCardWidth / halfDivisor;\n let position: number = (clientWidth - productCardWidth) / halfDivisor;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n if (leftAllignPosition < defaultPositionX) {\n position = rightAllignPosition;\n } else {\n position = leftAllignPosition;\n }\n }\n return position;\n };\n\n /**\n * GetProductCardPositionY method - Provides product card y position in center with respect to active point.\n * For xs, sm and md viewports it provides y position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionY = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsHeight = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.h\n : defaultImageSettings.viewports.lg?.h;\n const halfDivisor: number = 2;\n const { area, viewport } = this.state;\n const produtCardHight: number = productImageSettingsHeight ? productImageSettingsHeight : this._defaultProdutCardHight;\n const pointPositionY = (this.getActiveImageHeight() - produtCardHight) / halfDivisor;\n let position: number = pointPositionY;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n position = (area?.center?.[1] ?? this.getActiveImageHeight() / halfDivisor) - produtCardHight / halfDivisor;\n }\n return position;\n };\n\n /**\n * GetDefaultImageSettings method.\n * @returns MsDyn365.IImageSettings.\n */\n public getDefaultImageSettings = (): MsDyn365.IImageSettings => {\n const defaultImageSettings: MsDyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n lg: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n xl: { q: 'w=275&h=275&m=6', w: 275, h: 275 }\n },\n lazyload: true\n };\n\n return defaultImageSettings;\n };\n\n /**\n * KeyDown method - To handle keydown event.\n * @param event - KeyboardEvent.\n */\n public keyDown = (event: KeyboardEvent): void => {\n if (event.key === ActiveImageConstants.enterKey) {\n const target: HTMLElement = event.target as HTMLElement;\n if (target.nodeName === 'AREA') {\n const area: HTMLAreaElement = target as HTMLAreaElement;\n if (area.href) {\n window.open(area.href, '_self');\n }\n }\n }\n if (event.key === ActiveImageConstants.escKey) {\n this.resetState();\n }\n };\n\n /**\n * GetActiveImageWidth method - To get active image width.\n * @returns Returns number.\n */\n public getActiveImageWidth = (): number => {\n const defaultWidth: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return defaultWidth;\n };\n\n /**\n * GetActiveImageHeight method - To get active image height.\n * @returns Returns number.\n */\n public getActiveImageHeight = (): number => {\n const defaultHeight: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return defaultHeight;\n };\n\n /**\n * HandleLinkTextChange method - To handle link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleTextChange method - To handle text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * HandleParagraphChange method - To handle paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * HandleAdditionalTextChange method - To handle additional text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalTextChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.heading = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalLinkTextChange method - To handle additional link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n const additionalContent = this.props.config.additionalContent ?? {};\n if (additionalContent.links) {\n additionalContent.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalParagraphChange method - To handle additional paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalParagraphChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.subtext = event.target.value;\n }\n }\n\n /**\n * RenderActiveImageDetailsLinks method - To render active image details links.\n * @returns - React node.\n */\n public renderActiveImageDetailsLinks = (): React.ReactNode[] | undefined => {\n const { links } = this.props.config;\n const payLoad = getPayloadObject('click', this._telemetryContent, '');\n\n return links?.map((linkData: IActiveImageLinksData, index: number) => {\n payLoad.contentAction.etext = linkData.linkText;\n const attributes = getTelemetryAttributes(this._telemetryContent, payLoad);\n const linkId = index;\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: linkData.ariaLabel,\n className: 'msc-active-image__details__cta__link',\n linkText: linkData.linkText,\n linkUrl: linkData.linkUrl.destinationUrl,\n openInNewTab: linkData.willOpenInNewTab,\n role: 'button',\n additionalProperties: attributes\n };\n\n return (\n {\n this.handleLinkTextChange(index, event);\n },\n requestContext: this.props.context.request\n }}\n />\n );\n });\n };\n\n /**\n * RenderActiveImageDetailsHeading method - To render active image details heading.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsHeading = (): React.ReactNode | undefined => {\n const { heading } = this.props.config;\n\n return (\n heading && (\n \n )\n );\n };\n\n /**\n * RenderActiveImageDetailsParagraph method - To render active image details paragraph.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsParagraph = (): React.ReactNode | undefined => {\n const { paragraph } = this.props.config;\n\n return (\n paragraph && (\n \n )\n );\n };\n\n /**\n * GetActiveImageId - To get active image id from src.\n * @returns - String.\n */\n public getActiveImageId = (): string => {\n const { activeImage } = this.props.config;\n let activeImageId: string = '';\n if (activeImage?.src) {\n const activeImageSource = activeImage.src.split('/');\n const decrementOne: number = 1;\n const activeImageIdPart = activeImageSource[activeImageSource.length - decrementOne].split('?');\n activeImageId = activeImageIdPart[0] ?? '';\n }\n return activeImageId;\n };\n\n /**\n * Handle outside click method - To handle outside click of the active image product.\n * @param event - Mouse event.\n */\n private readonly _handleOutsideClick = (event: MouseEvent) => {\n if (this._productCardDivRef.current?.contains(event.target as Node)) {\n return;\n }\n this.resetState();\n };\n}\nexport default ActiveImage;\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 { IActiveImageAdditionalContentViewProps } from '../active-image-utilities';\nimport { IActiveImageViewProps } from './active-image';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IActiveImageAdditionalContentViewProps) => {\n return (\n \n {additionalContent.heading}\n \n {additionalContent.text}\n {additionalContent.links}\n \n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nexport const activeImageView: React.FC = props => {\n return (\n \n \n {props.imageMapper}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n \n \n {props.overlay}\n {props.productCard}\n \n \n );\n};\n\nexport default activeImageView;\n","/*!\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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

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

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n this.setState({\n cartlinesErrors: {}\n });\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n try {\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

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

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

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

\n

{groupTitle}

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

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n className?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description, className }) => {\n if (!description) {\n return null;\n }\n\n const descClassName = StringExtensions.isNullOrEmpty(className) ? 'ms-checkout-delivery-options__description' : className;\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

{message}

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

{title}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAddressDetailItem {\n isNewLine: boolean;\n isShowLabel: boolean;\n labelText: string;\n name: string;\n value: string;\n}\n\n/**\n * Address details item.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressDetailItemFunctionComponent: React.FC = (props: IAddressDetailItem) => {\n const { labelText, value } = props;\n\n const className = `ms-checkout-delivery-options__cart-line-grp__item__header__address`;\n return (\n \n {labelText}\n {value}\n \n );\n};\n\nexport default AddressDetailItemFunctionComponent;\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 { CartLine } from '@msdyn365-commerce/retail-proxy';\nimport React, { useState } from 'react';\n\nexport interface ICheckoutCartLineDeliveryDateProps {\n className?: string;\n isDisabled?: boolean;\n minRangeValue?: string;\n maxRangeValue?: string;\n validationErrorForRange?: string;\n fallbackPattern?: string;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n disclaimerText?: string;\n heading?: string;\n checkBoxLabel?: string;\n onChangeMinValue?: void;\n id?: string;\n cartLines?: CartLine[];\n onChange(event: React.ChangeEvent, cartLines: CartLine[]): void;\n}\n\nconst CheckoutCartLineDeliveryDate: React.FC = ({\n className,\n isDisabled,\n fallbackPattern,\n ariaLabel,\n telemetryContent,\n onChangeMinValue,\n checkBoxLabel,\n disclaimerText,\n heading,\n cartLines,\n onChange\n}) => {\n const [selectedDate, setSelectedDate] = useState('');\n const [isDateEnabled, setIsDateEnabled] = useState(false);\n // State to store today's date\n const [minDate, setMinDate] = useState('');\n\n // Update minDate state with today's date on component mount\n useState(() => {\n const today = new Date().toISOString().split('T')[0];\n setMinDate(today);\n });\n\n const handleDateChange = (event: React.FocusEvent) => {\n const selectedValue = event.target.value;\n // Check if the selected date is allowed\n if (selectedValue >= minDate) {\n setSelectedDate(selectedValue);\n console.log('Selected date is allowed.', selectedValue);\n } else {\n console.log('Selected date is not allowed.');\n }\n\n if (cartLines !== undefined) {\n onChange(event, cartLines);\n }\n };\n\n const handleCheckboxChange = () => {\n setIsDateEnabled(!isDateEnabled);\n };\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n
\n
\n \n {checkBoxLabel}\n
\n {disclaimerText}\n
\n {heading}\n \n
\n
\n );\n};\n\nexport default CheckoutCartLineDeliveryDate;\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 ICheckoutDeliveryOptionsGrpRadioButtonProps {\n className: string;\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n groupName: string;\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 CheckoutDeliveryOptionsGrpRadioButton: React.FC = ({\n className,\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n groupName,\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 const deliveryOptionRef: React.RefObject = React.createRef();\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsGrpRadioButton;\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';\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport DescriptionComponent from './checkout-delivery-options.description';\nimport RadioButtonComponent from './checkout-cartLine-delivery-options-grp';\n\nexport interface ICheckoutCartLineDeliveryOptionsRadioButtonProps {\n className: string;\n moduleId: string;\n ariaSetSize: number;\n priceFree: string;\n ariaPosInSet: number;\n selectedItemId: string;\n cartLines: CartLine[];\n deliveryOptions: DeliveryOption[];\n typeName: string;\n context: ICoreContext>;\n groupName: string; // Add groupName prop\n ariaLabel?: string;\n value?: string;\n cartLineId?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent, cartLines: CartLine[], cartLineId?: string): void;\n}\n\n/**\n * Represents a radio button component for checkout cart line delivery options.\n * @param {Object} props - The component props.\n * @param {boolean} props.isChecked - Indicates whether the radio button is checked.\n * @param {string} props.value - The value of the radio button.\n * @param {number} props.ariaSetSize - The total number of radio buttons in the set.\n * @param {number} props.ariaPosInSet - The position of the radio button in the set.\n * @param {string} props.ariaLabel - The ARIA label for the radio button.\n * @param {string} props.telemetryContent - The telemetry content for the radio button.\n * @param {Function} props.onChange - The event handler for when the radio button is changed.\n * @returns {JSX.Element} The rendered radio button component.\n */\nconst CheckoutCartLineDeliveryOptionsRadio: React.FC = ({\n className,\n moduleId,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n deliveryOptions,\n priceFree,\n selectedItemId,\n typeName,\n groupName, // Destructure groupName prop\n context,\n cartLines,\n cartLineId,\n onChange\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n console.log(attributes);\n const channelConfig = context.actionContext.requestContext.channel;\n const count = deliveryOptions.length;\n if (count === 0) {\n return null;\n }\n\n const changeCurrentDeliveryOption = React.useCallback(\n (event: React.ChangeEvent) => {\n onChange(event, cartLines, cartLineId);\n },\n [onChange, cartLines, cartLineId]\n );\n // const selectedDeliveryOptionItem = deliveryOptions.length > 0 ? deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n const deliveryClassName = `${className}__radio-btn-grp`;\n const optionClassName = `${deliveryClassName}-opt`;\n const response = deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => (\n
\n \n \n \n
\n ));\n\n return
{response}
;\n};\n\nexport default CheckoutCartLineDeliveryOptionsRadio;\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 { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { CartLine, DeliveryOption, ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport React, { useState } from 'react';\nimport CheckoutCartLineDeliveryOptionsRadio from './checkout-cartLine-delivery-options-radio';\n\nexport interface ICheckoutDeliveryOptionsLineItemsProps {\n className?: string;\n moduleId: string;\n selectedItemId: string;\n context: Msdyn365.ICoreContext;\n typeName: string;\n cartLines: CartLine[];\n imageSettings: Msdyn365.IImageSettings;\n showShippingChargesForLineItems: boolean;\n resources: ICheckoutDeliveryOptionsLineItemsResources;\n deliveryOptions: DeliveryOption[];\n ariaSetSize: number;\n ariaPosInSet: number;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent, cartLines: CartLine[]): void;\n currencyCode?: string;\n products?: SimpleProduct[];\n catalogs?: ProductCatalog[];\n gridSettings?: Msdyn365.IGridSettings;\n cartLineId?: string;\n key?: string;\n}\n\nexport interface ICheckoutDeliveryOptionsLineItemsResources {\n quantityDisplayStringLabel: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n productDimensionTypeAmount: string;\n configString: string;\n discountStringText: string;\n shippingChargesText: string;\n priceFree: string;\n ariaLabel: string;\n changeButtonText?: string;\n deliveryMethodLabel?: string;\n}\n\nconst _getLineItemComponent = (\n context: Msdyn365.ICoreContext,\n cartLine: CartLine,\n product: SimpleProduct,\n moduleId: string,\n typeName: string,\n showShippingChargesForLineItems: boolean,\n imageSettings: Msdyn365.IImageSettings,\n resources: ICheckoutDeliveryOptionsLineItemsResources,\n currencyCode: string,\n catalogs?: ProductCatalog[],\n gridSettings?: Msdyn365.IGridSettings,\n cartLineId?: string\n): JSX.Element | undefined => {\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\n return (\n \n );\n};\n\nconst _getProduct = (productId: number, products: SimpleProduct[]): SimpleProduct | undefined => {\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n};\n\nexport const GetLineItems: React.FC = (props: ICheckoutDeliveryOptionsLineItemsProps) => {\n const products = props.products;\n const lineClassName = props.className;\n const lineItemClassName = `${lineClassName}-item`;\n const currencyCode = props.currencyCode;\n const changeText = props.resources.changeButtonText;\n const [showDeliveryOption, setShowDeliveryOption] = useState(false);\n\n const handleClick = () => {\n setShowDeliveryOption(!showDeliveryOption);\n };\n if (!props.cartLines || props.cartLines.length === 0 || !products || products.length === 0 || currencyCode === undefined) {\n return null;\n }\n const deliveryCode = props.deliveryOptions.find(option => option.Code === props.selectedItemId);\n const payload = getPayloadObject(TelemetryEvent.UpdateInCart, props.telemetryContent!, changeText !== undefined ? changeText : '', '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n const response = props.cartLines.map(cartLine => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId, products);\n if (!product) {\n return null;\n }\n return (\n
\n {_getLineItemComponent(\n props.context,\n cartLine,\n product,\n props.moduleId,\n props.typeName,\n props.showShippingChargesForLineItems,\n props.imageSettings,\n props.resources,\n currencyCode,\n props.catalogs,\n props.gridSettings\n )}\n
{props.resources.deliveryMethodLabel}
\n
\n {deliveryCode?.Description}\n \n
\n {showDeliveryOption ? (\n \n ) : null}\n
\n );\n });\n\n return
{response}
;\n};\nexport default GetLineItems;\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 {\n Address,\n CartLine,\n DeliveryOption,\n DeliveryPreferenceType,\n LineDeliverySpecification\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n GetDeliveryOptionsForCartLineAddressInput,\n getDeliveryOptionsForCartLineAddress,\n QueryResultSettingsProxy,\n StringExtensions,\n DeliveryOptionsCartLineAddress,\n ArrayExtensions\n} 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';\nimport groupBy from 'lodash/groupBy';\n\nimport { IImageSettings } from '@msdyn365-commerce/core';\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';\nimport { AddressDetailItemFunctionComponent } from './components/address-detail-item';\nimport CheckoutCartLineDeliveryDate from './components/checkout-cartLine-delivery-date';\nimport CheckoutCartLineDeliveryOptionsRadio from './components/checkout-cartLine-delivery-options-radio';\nimport { GetLineItems } from './components/get-line-items';\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 ICartLineSelectedDeliveryOption {\n cartLineId: string;\n selectedDeliveryOption: string;\n requestDeliveryDate?: string;\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 checkoutCartLineGroupDeliveryOptions?: React.ReactNode;\n enableCheckoutCartLineDeliveryOptions?: boolean;\n cartLineImages?: React.ReactNode;\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 @observable private groupDeliveryOptions: DeliveryOptionsCartLineAddress[] = [];\n\n @observable private cartLineSelectedDeliveryOptions: ICartLineSelectedDeliveryOption[] = [];\n\n @computed private get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get currencyCode(): string | undefined {\n return get(this.props, 'context.request.channel.Currency');\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 private readonly isMultipleAddressShippingEnabled?: boolean;\n\n private cartLinesDeliveryOptions: ICartLineSelectedDeliveryOption[] = [];\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 this.isMultipleAddressShippingEnabled = this.props.config.multipleAddressShippingEnabled;\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?.cartLinesWithShippingAddress,\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 checkoutCartLineGroupDeliveryOptions: this.getCheckoutCartLineGroupDeliveryOptions(),\n enableCheckoutCartLineDeliveryOptions: this.isMultipleAddressShippingEnabled,\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 if (this.isMultipleAddressShippingEnabled) {\n this.getCartLinesSavedDeliveryOption();\n }\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 const getAriaLabelWithPrice = get(deliveryOption, 'ShippingChargeAmount', 0);\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 if (this.isMultipleAddressShippingEnabled) {\n this.updateCartLinesDeliverySpecification();\n } else {\n await this.updateCartDeliverySpecification(this.selectedItemId);\n }\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 getCartLinesSavedDeliveryOption = (): void => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n cartLinesForShipping.forEach(cartLine => {\n const deliveryMode = cartLine.DeliveryMode !== undefined ? cartLine.DeliveryMode : '';\n if (!cartLine.LineId || StringExtensions.isNullOrEmpty(deliveryMode)) {\n return;\n }\n const cartLineId = cartLine?.LineId;\n const existingCartLineSelectedDeliveryOption = this.cartLinesDeliveryOptions.find(\n cartLineDeliveryOption => cartLineDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryMode;\n } else {\n if (cartLineId !== undefined) {\n this.cartLinesDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryMode });\n }\n }\n });\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 @action\n private readonly updateCartLinesDeliverySpecification = async (): Promise => {\n if (!this.cartLineSelectedDeliveryOptions || !this.cartLineSelectedDeliveryOptions.length) {\n return;\n }\n const { resources } = this.props;\n let lineSpecs: LineDeliverySpecification[] = [];\n const checkoutCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines;\n\n this.cartLineSelectedDeliveryOptions.forEach(group => {\n const address = checkoutCartLines?.find(cartLine => cartLine.LineId === group.cartLineId)?.ShippingAddress;\n const lineSpec = {\n LineId: group.cartLineId,\n DeliverySpecification: {\n DeliveryModeId: group.selectedDeliveryOption,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ShipToAddress,\n DeliveryAddress: address\n }\n };\n lineSpecs.push(lineSpec);\n });\n\n try {\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const response = await checkoutState.checkoutCart.updateCartLinesDeliverySpecification({\n lineDeliverySpecifications: lineSpecs\n });\n\n if (response.status === 'FAILED') {\n this.setError(resources.genericErrorMessage);\n } else {\n const cartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines;\n if (cartLines !== undefined && cartLines.length > 0) {\n cartLines?.forEach(cartLine => {\n const cartLineId = cartLine.LineId?.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n cartLine.RequestedDeliveryDate = existingCartLineSelectedDeliveryOption.requestDeliveryDate\n ? new Date(existingCartLineSelectedDeliveryOption.requestDeliveryDate)\n : undefined;\n }\n });\n await checkoutState.checkoutCart.updateCartLines({ updatedCartLinesObject: cartLines });\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 const cartLinesForShipping = this.props.data.checkout.result?.cartLinesWithShippingAddress;\n const requestContext = this.props.context.actionContext.requestContext;\n if (requestContext.features && requestContext.features.enable_checkout_race_condition_hot_fix) {\n if (this.canShip() && (shippingAddress || cartLinesForShipping)) {\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n } else {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n this.isMultipleAddressShippingEnabled\n ? await this.getGroupDeliveryOptions()\n : shippingAddress !== undefined\n ? await this.getDeliveryOptions(shippingAddress)\n : null;\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 } else {\n if (this.canShip() && (shippingAddress || cartLinesForShipping)) {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n this.isMultipleAddressShippingEnabled\n ? await this.getGroupDeliveryOptions()\n : shippingAddress !== undefined\n ? await this.getDeliveryOptions(shippingAddress)\n : null;\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\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private readonly onCartLineDeliveryOptionChange = (\n event: React.ChangeEvent,\n cartLines: CartLine[],\n cartLineId?: string\n ) => {\n const deliveryModeId = event.currentTarget.value;\n if (cartLineId !== undefined) {\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryModeId;\n } else {\n this.cartLineSelectedDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryModeId });\n }\n return;\n }\n\n cartLines.forEach(cartLine => {\n if (!cartLine.LineId) {\n return;\n }\n const cartLineId = cartLine?.LineId.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryModeId;\n } else {\n this.cartLineSelectedDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryModeId });\n }\n });\n };\n\n private readonly onCartLineRequestDeliveryDateChange = (event: React.ChangeEvent, cartLines: CartLine[]) => {\n const deliveryDate = event.currentTarget.value;\n cartLines.forEach(cartLine => {\n if (!cartLine.LineId) {\n return;\n }\n const cartLineId = cartLine?.LineId.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.requestDeliveryDate = deliveryDate;\n } else {\n const deliveryModeId = cartLine.DeliveryMode !== undefined ? cartLine.DeliveryMode : '';\n this.cartLineSelectedDeliveryOptions.push({\n cartLineId,\n selectedDeliveryOption: deliveryModeId,\n requestDeliveryDate: deliveryDate\n });\n }\n });\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 private readonly getCheckoutCartLineGroupDeliveryOptions = (): React.ReactNode => {\n const { resources, config } = this.props;\n const shippingCartLines = this.getCartLinesForShipping();\n if (!ArrayExtensions.hasElements(shippingCartLines) || !ArrayExtensions.hasElements(this.groupDeliveryOptions)) {\n return null;\n }\n const imageSettings = this.getImageSettings(config.imageSettings);\n const requestDeliveryDateEnabled = config.enableRequestDeliveryDate === true && this.isMultipleAddressShippingEnabled === true;\n return (\n
\n {this.groupDeliveryOptions.map((groupDeliveryOption: DeliveryOptionsCartLineAddress, index) => {\n const cartLineId = groupDeliveryOption.cartLineIds !== undefined ? groupDeliveryOption.cartLineIds[0] : '';\n const cartLine1 = shippingCartLines.find(cartLine => cartLineId === cartLine?.LineId?.toString() ?? '');\n const cartLine = shippingCartLines.filter(\n cartLine => groupDeliveryOption && (cartLineId === cartLine?.LineId?.toString() ?? '')\n );\n if (groupDeliveryOption !== undefined) {\n const selectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLine[0].LineId\n )?.selectedDeliveryOption;\n return (\n
\n
\n \n
\n
\n
\n \n {resources.cartLineGroupDeliveryOptionsLabel}\n \n \n {resources.cartLineGroupDeliveryOptionsText}\n \n {requestDeliveryDateEnabled ? (\n \n ) : null}\n \n
\n {groupDeliveryOption.cartLineIds?.map(cartLineId => {\n const cartLine1 = shippingCartLines.find(\n cartLine => cartLineId === cartLine?.LineId?.toString() ?? ''\n );\n const selectedDeliveryOption1 = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption =>\n cartLineSelectedDeliveryOption.cartLineId === cartLine1?.LineId\n )?.selectedDeliveryOption;\n return (\n \n );\n })}\n
\n
\n );\n } else {\n return null;\n }\n })}\n
\n );\n };\n\n private readonly getGroupDeliveryOptions = async (): 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\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 cartLinesForShipping: CartLine[] = [];\n if (ArrayExtensions.hasElements(shippingCartLines)) {\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.ShippingAddress?.RecordId);\n cartLinesForShipping.push(getGroupByDelivery(shippingCartLines));\n console.log('running delivery option for all lines');\n }\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 inputData = new GetDeliveryOptionsForCartLineAddressInput(deliveryOptionFilter, shippingCartLines);\n const response = await getDeliveryOptionsForCartLineAddress(inputData, context.actionContext);\n if (response && response.length > 0) {\n this.groupDeliveryOptions = response;\n console.log('groupDeliveryOptions');\n }\n if (this.groupDeliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartLinesDeliveryOptions.length !== 0) {\n this.cartLineSelectedDeliveryOptions = this.cartLinesDeliveryOptions;\n this.cartLinesDeliveryOptions = [];\n this.onReady();\n } else {\n this.onUpdating();\n this.groupDeliveryOptions.forEach(group => {\n const selectedDeliveryOption =\n group.deliveryOptions.length > 0 && group.deliveryOptions[0].Code !== undefined\n ? group.deliveryOptions[0].Code\n : '';\n group.cartLineIds?.forEach(cartLineId => {\n this.cartLineSelectedDeliveryOptions.push({\n cartLineId,\n selectedDeliveryOption\n });\n });\n });\n }\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n }\n this.isLoading = false;\n };\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n}\n\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 enableCheckoutCartLineDeliveryOptions,\n checkoutErrorRef,\n viewState,\n deliveryOptions,\n deliveryOptionSelected,\n alert,\n waiting,\n saveButton,\n editButton,\n cancelButton,\n checkoutCartLineGroupDeliveryOptions\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 && !enableCheckoutCartLineDeliveryOptions && (\n \n )}\n {viewState.isShowList && enableCheckoutCartLineDeliveryOptions && checkoutCartLineGroupDeliveryOptions}\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 config,\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 && !config.disableAddLoyaltyComponent\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 * Known action error failure states\n */\nexport const enum ActionErrorStatus {\n Timeout = 'Timeout',\n HookTimeout = 'Hook Timeout',\n ServiceUnavailable = 'Service Unavailable'\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 invoiceCheckoutApiFailureErrorMessage\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 } else {\n if (error.status === ActionErrorStatus.Timeout || error.status === ActionErrorStatus.ServiceUnavailable) {\n errorMessage = checkoutResult?.checkoutCart.hasInvoiceLine\n ? invoiceCheckoutApiFailureErrorMessage\n : checkoutApiFailureErrorMessage;\n }\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 { PriceComponent } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPromoCodeProps extends IComponentProps<{}> {\n cart: ICartState | undefined;\n promoCodeHeadingText: string;\n appliedPromoCodeHeadingText: string;\n removePromoAriaLabelFormat: string;\n promoPlaceholderText: string;\n promoCodeApplyButtonText: string;\n collapseTimeOut: number;\n removePromoText: string;\n invalidPromoCodeErrorText: string;\n failedToAddPromoCodeErrorText: string;\n duplicatePromoCodeErrorText: string;\n failedToRemovePromoCodeErrorText: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n promoCodeApplyCallback?(): void;\n}\n\ninterface IPromoCodeState {\n isCollapseOpen: boolean;\n promoCodeInputValue: string;\n error: string;\n canApply: boolean;\n}\n\n/**\n *\n * The PromoCode component renders the promocode section.\n * @extends {React.PureComponent}\n */\nclass PromoCode extends React.Component {\n private readonly payLoad: IPayLoad;\n\n constructor(props: IPromoCodeProps, state: IPromoCodeState) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, TelemetryConstant.ApplyPromoCode);\n this.state = {\n isCollapseOpen: false,\n promoCodeInputValue: '',\n error: '',\n canApply: false\n };\n }\n\n public shouldComponentUpdate(nextProps: IPromoCodeProps, nextState: IPromoCodeState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n return (\n
\n
{this.props.promoCodeHeadingText}
\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\n

\n {this.state.error}\n

\n {this._renderAppliedPromoCode(this.props)}\n
\n );\n }\n\n private readonly _onInputChangeHandler = (e: React.ChangeEvent) => {\n const error = e.target.value === '' ? '' : this.state.error;\n this.setState({\n promoCodeInputValue: e.target.value.trim(),\n error,\n canApply: !!e.target.value\n });\n };\n\n private readonly _applyPromotion = (cartState: ICartState | undefined) => {\n if (!cartState || !cartState.cart) {\n return;\n }\n const appliedPromo = this.state.promoCodeInputValue;\n\n cartState\n .addPromoCode({ promoCode: appliedPromo })\n .then(result => {\n if (result.status === 'SUCCESS') {\n // Show success text\n this.setState({ promoCodeInputValue: '', error: '', canApply: false });\n } else if (result.substatus === 'ALREADYADDED') {\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\n } else {\n this.setState({ error: this.props.invalidPromoCodeErrorText });\n }\n })\n .catch(error => {\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\n });\n };\n\n /**\n * On Submit function.\n * @param cartState -Cartstate.\n * @returns Apply promotion.\n */\n private readonly _onSubmitHandler = (cartState: ICartState | undefined) => (event: React.FormEvent) => {\n event.preventDefault();\n this._applyPromotionHandler(cartState);\n };\n\n /**\n * On apply promotion function.\n * @param cartState -Cartstate.\n * @returns Apply promotion.\n */\n private readonly _applyPromotionHandler = (cartState: ICartState | undefined) => () => {\n this._applyPromotion(cartState);\n };\n\n private readonly _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n \n
\n \n \n {promoCodeApplyButtonText}\n \n
\n \n );\n };\n\n private readonly _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\n if (!cartState) {\n return;\n }\n const code = event.currentTarget.getAttribute('data-value') || '';\n cartState\n .removePromoCodes({\n promoCodes: [code]\n })\n .then(result => {\n if (result.status === 'SUCCESS') {\n this.setState({ error: '' });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\n });\n };\n\n private readonly _calculateDiscount = (code: string, cartState: ICartState | undefined) => {\n if (!cartState || !cartState.cart || !cartState.cart.CartLines || cartState.cart.CartLines.length === 0 || !code) {\n return;\n }\n let discountAmount = 0;\n for (const line of cartState.cart.CartLines) {\n if (line.DiscountLines) {\n for (const discountLine of line.DiscountLines) {\n if (discountLine.DiscountCode === code) {\n discountAmount += discountLine.DiscountCost!;\n }\n }\n }\n }\n return discountAmount * -1;\n };\n\n private readonly _renderAppliedPromoCode = (props: IPromoCodeProps) => {\n if (!props.cart || !props.cart.cart || !props.cart.cart.Coupons || props.cart.cart.Coupons.length === 0) {\n return;\n }\n\n const removePromotionHandler = (event: React.MouseEvent) => {\n this._removePromotion(props.cart, event);\n };\n\n const promoCodTotalDiscount = props.cart.cart.Coupons.reduce((count: number, coupon: Coupon) => {\n return count + (this._calculateDiscount(coupon.Code || '', props.cart) || 0);\n }, 0);\n\n return (\n <>\n
\n
{this.props.appliedPromoCodeHeadingText}
\n \n
\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\n const ariaLabel = props.removePromoAriaLabelFormat\n ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code)\n : '';\n\n return (\n
\n
\n {coupon.Code}{' '}\n \n
\n \n {props.removePromoText}\n \n
\n );\n })}\n \n );\n };\n}\n\nexport default PromoCode;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { buildHydratedMockActionContext, buildMockRequest, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, Customer, Employee } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderConfig, IHeaderResources } from '../header.props.autogenerated';\n\nconst mockRequest: IRequestContext = buildMockRequest();\nconst mockRequestURL = {\n requestUrl: new URL('https://wwww.example.com'),\n staticCdnUrl: 'https://wwww.example.com'\n};\nmockRequest.gridSettings = {\n xs: { w: 767, h: 0 },\n sm: { w: 991, h: 0 },\n md: { w: 1199, h: 0 },\n lg: { w: 1599, h: 0 },\n xl: { w: 1600, h: 0 }\n};\nmockRequest.user.isAuthenticated = true;\nmockRequest.user.signInUrl = '/signin';\nmockRequest.user.signOutUrl = '/signout';\nmockRequest.user.signUpUrl = '/signup';\n\nconst mockAnonRequest = buildMockRequest();\nmockAnonRequest.user.isAuthenticated = false;\nmockAnonRequest.user.signInUrl = '/signin';\nmockAnonRequest.user.signOutUrl = '/signout';\nmockAnonRequest.user.signUpUrl = '/signup';\nmockAnonRequest.url = mockRequestURL;\n\nconst mockSigninErrorRequest = buildMockRequest();\nmockSigninErrorRequest.user.isAuthenticated = false;\nmockSigninErrorRequest.user.retailServerErrorCode = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\nmockSigninErrorRequest.user.signInUrl = '/signin';\nmockSigninErrorRequest.user.signOutUrl = '/signout';\nmockSigninErrorRequest.user.signUpUrl = '/signup';\nmockSigninErrorRequest.url = mockRequestURL;\n\nconst mockActionContext = buildHydratedMockActionContext();\nmockActionContext.requestContext.url = mockRequestURL;\n\n/**\n * Method to mock auth context.\n */\n// @ts-expect-error\nexport const mockAuthContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\n// @ts-expect-error\nexport const mockAnonContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockAnonRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- Due to partial mock.\n// @ts-expect-error\nexport const mockSigninContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockSigninErrorRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\nexport const mockHeaderConfig: IHeaderConfig = {\n logoLink: {\n linkUrl: {\n destinationUrl: 'https://ppe.fabrikam.com/fe'\n },\n ariaLabel: 'fabrikam'\n },\n logoImage: {\n src: 'https://img-prod-cms-mr-microsoft-com.akamaized.net/cms/api/fabrikam/imageFileData/MA1G3L'\n }\n};\n\nexport const mockResources: IHeaderResources = {\n mobileHamburgerAriaLabel: 'Mobile view hamburger aria label',\n wishlistTooltipText: 'My wishlist',\n cartLabel: 'Shopping bag, ({0}) items',\n cartQtyLabel: '({0})',\n signInLinkText: 'Sign In',\n signInLinkAriaText: 'Sign In',\n signOutLinkText: 'Sign Out',\n signOutLinkAriaText: 'Sign Out',\n shoppingAsText: 'Shopping as {0}',\n switchCustomerLinkText: 'Switch customer',\n switchCustomerLinkAriaText: 'Switch customer',\n headerPreferredStoreText: 'Select store',\n headerPreferredStoreAriaLabel: 'select preferred store',\n signInCustomerNotAuthorizedTitle: 'Error message if customer not authorized',\n signUpCustomerNotFoundTitle: 'Error message if cutsomer not found',\n signUpMultipleCustomerFoundTitle: 'Multiple customer found error msg',\n closeNotificationLabel: 'Close',\n wishlistCountLabel: '({0})',\n headerAriaLabel: 'Header'\n};\n\nexport const getMockData = (totalItemsInCart: number = 0, accountNumber: string = '2', firstName: string = ''): IHeaderData => {\n return {\n cart: >{\n status: 'SUCCESS',\n result: {\n totalItemsInCart\n }\n },\n employee: >{\n status: 'SUCCESS',\n result: {\n Name: 'Worker'\n }\n },\n accountInformation: >{\n status: 'SUCCESS',\n result: {\n AccountNumber: accountNumber,\n FirstName: firstName\n }\n },\n storeSelectorStateManager: >{\n status: 'SUCCESS',\n result: {}\n }\n };\n};\n\nexport const getMockErrorData = (): IHeaderData => {\n return {\n cart: >{\n status: 'FAILED',\n result: undefined\n },\n employee: >{\n status: 'FAILED',\n result: undefined\n },\n accountInformation: >{\n status: 'FAILED',\n result: undefined\n },\n storeSelectorStateManager: >{\n status: 'FAILED',\n result: undefined\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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(\n item,\n index,\n productPrices ? productPrices.find(p => p.ProductId === item.RecordId) : undefined\n );\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n (recommendation || discountIds) &&\n shouldDisplaySeeAllButton &&\n (ArrayExtensions.hasElements(updatedProducts) || this.props.config.productCollection.listType === 'promotional')\n ? this._getSeeAllButton(headingLabel, recommendation, discountIds)\n : undefined,\n resources: resources\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n let productPrices = this.state.productPrices;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n if (this.props.config.productCollection.listType === 'promotional') {\n productPrices = await getProductPriceForSelectedProducts(\n new ProductPriceForSelectedProductsInput(products.filter(p => !p.IsMasterProduct).map(p => p.RecordId)),\n this.props.context.actionContext\n );\n\n this.setState({ productPrices: productPrices });\n }\n };\n\n private readonly _getProduct = (\n product: ProductSearchResult,\n index: number,\n productPrice?: ProductPrice\n ): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param headingLabel - Heading label.\n * @param recommendation - Recommendation.\n * @param discountIds - Discount Ids.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (headingLabel: string, recommendation?: string, discountIds?: string[]): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n if (!recommendation && !discountIds) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n\n if (discountIds) {\n // see all button for promotion page\n url.searchParams.set('discountIds', discountIds.toString());\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n } else if (recommendation) {\n // See all button for recommendation\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n }\n\n return (\n \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './product-collection';\nimport { IProductCollectionResources } from './product-collection.props.autogenerated';\n\nconst ProductCollectionView: React.FC = props => {\n const {\n heading,\n ProductCollectionContainer,\n products,\n SingleSlideCarouselComponentProps,\n GridComponentProps,\n isCarousel,\n seeAllButton,\n resources\n } = props;\n\n if (products) {\n return (\n \n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n \n );\n }\n\n // If no products are retrieved and the list type is promotional, still render the module to keep the entry of promotion page\n if (props.config.productCollection.listType === 'promotional') {\n return (\n \n {heading}\n {seeAllButton}\n {_renderNoProduct(resources)}\n \n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderNoProduct = (resources: IProductCollectionResources): JSX.Element => {\n return (\n \n

{resources.noProductToRenderText}

\n
\n );\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return {productComponent};\n};\n\nexport default ProductCollectionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 { 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 { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n ChannelInventoryConfiguration,\n ProductRefinerSource,\n ProductRefinerValue,\n ProductSearchCriteria,\n SearchSuggestion,\n SearchSuggestionCriteria\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n getInventoryConfigurationAsync,\n getSearchSuggestionsAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nexport enum SuggestionType {\n Category = 'ScopedCategory',\n Keyword = 'Keyword',\n Product = 'Product',\n None = 'None'\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * Input class for auto suggest search input.\n */\nexport class AutoSuggestInput implements IActionInput {\n public searchQuery?: string;\n\n public topResultsCount?: number;\n\n public suggestionType?: string;\n\n public hitPrefix?: string;\n\n public hitSuffix?: string;\n\n public constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\n this.searchQuery = searchText;\n this.topResultsCount = top;\n this.suggestionType = suggestionType;\n this.hitPrefix = hitPrefix;\n this.hitSuffix = hitSuffix;\n }\n\n public getCacheKey = () => 'AutoSuggestSearchSuggestions';\n\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new AutoSuggestInput();\n};\n\n/**\n * Calls the Retail API and returns a auto-suggest suggestions.\n * @param input\n * @param ctx\n */\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\n // If no input is provided fail out\n if (!input || !input.searchQuery) {\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\n }\n\n const autosuggest: Autosuggestions = {};\n\n const autoSuggestPromises = [_getAutoSuggest(input, autosuggest, ctx)];\n return Promise.all(autoSuggestPromises).then(() => {\n return autosuggest;\n });\n}\n\n/**\n * Returns inventory in stock sortable refiner value.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @param isInStock - The flag indicating whether is getting in-stock refiner or out-of-stock refiner.\n * @returns Refiners.\n */\nconst getInventorySortableRefinerValue = (\n channelInventoryConfiguration: ChannelInventoryConfiguration,\n isInStock: boolean\n): ProductRefinerValue | undefined => {\n if (channelInventoryConfiguration && channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId) {\n return {\n RefinerRecordId: channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId,\n DataTypeValue: AttributeDataType.TrueFalse,\n LeftValueBoundString: isInStock ? 'true' : 'false',\n RightValueBoundString: isInStock ? 'true' : 'false',\n UnitText: '',\n RowNumber: 0,\n Count: 0,\n ExtensionProperties: [],\n RefinerSourceValue: ProductRefinerSource.Attribute\n };\n }\n return undefined;\n};\n\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise {\n const catalogId = getCatalogId(ctx.requestContext);\n let productSearchCriteria: ProductSearchCriteria = {\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n };\n\n if (ctx.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const channelInventoryConfiguration = await getInventoryConfigurationAsync({ callerContext: ctx });\n const isInStockRefiner = true;\n const inventoryRefinerValue = getInventorySortableRefinerValue(channelInventoryConfiguration, isInStockRefiner);\n\n if (inventoryRefinerValue) {\n productSearchCriteria = {\n ...productSearchCriteria,\n Refinement: [inventoryRefinerValue]\n };\n }\n }\n\n const searchCriteria: SearchSuggestionCriteria = {\n ProductSearchCriteria: productSearchCriteria,\n HitPrefix: input.hitPrefix,\n HitSuffix: input.hitSuffix,\n SuggestionType: input.suggestionType\n };\n\n const searchSuggestions = await getSearchSuggestionsAsync(\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\n searchCriteria\n );\n\n if (searchSuggestions && searchSuggestions.length > 0) {\n // Generate image url\n searchSuggestions.map(\n (item: SearchSuggestion) =>\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\n );\n\n autosuggest.AllSearchResults = searchSuggestions;\n } else {\n ctx.telemetry.error(\n `[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`\n );\n }\n}\n\nexport const getSearchSuggestionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\n action: >getSearchSuggestionsAction,\n input: createInput\n});\n\nexport default getSearchSuggestionsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchCategorySuggestProps {\n searchCategorySuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n searchRefiners: ProductRefiner[] | undefined;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n shouldShowFullPath?: boolean;\n}\n\nexport interface ISearchCategoryViewProps {\n title: React.ReactNode;\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * CategorySuggestionsComponent.\n * @param props\n */\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\n const {\n suggestions,\n searchText,\n autoSuggestProps: {\n resources: { categorySuggestionHeading }\n }\n } = props;\n\n const reactNodes: React.ReactNode[] = [];\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, props));\n });\n\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\n\n return { title: titleNode, text: reactNodes };\n};\n\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\n const categoryAutoSuggestionHeading = categorySuggestionHeading\n ? format(categorySuggestionHeading, searchText)\n : `Search \"${searchText}\" in categories`;\n\n return
  • {categoryAutoSuggestionHeading}
  • ;\n};\n\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\n const { searchText, hitPrefix, hitSuffix, shouldShowFullPath } = props;\n\n const splitValue = shouldShowFullPath ? item.Value : item.Value && item.Value.split('|').pop();\n const ariaLabel = splitValue\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = item.Value;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n
  • \n \n {_generateLink(item, searchText, props) && _getHighlightedText(splitValue ? splitValue : '', hitPrefix, hitSuffix)}\n \n
  • \n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\n};\n\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\n const { searchPageURL, searchQsp, searchRefiners } = props;\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n\n if (searchQsp && searchText) {\n queryUrl.searchParams.set(searchQsp, searchText);\n }\n\n const categoryRefiners = searchRefiners?.find(refiners => {\n return refiners.SourceValue === ProductRefinerSource.Category;\n });\n const refiner = categoryRefiners?.Values?.find(item => {\n return item.RefinerRecordId === Number.parseInt(id, 10);\n });\n\n const encodedRefiner = refiner && JSON.stringify(compressRefiners([refiner]));\n if (encodedRefiner) {\n queryUrl.searchParams.set('refiners', encodedRefiner);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n // eslint-disable-next-line react/no-danger\n return ;\n};\n\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\n// or move this code to a common place\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchFormProps {\n hideSearchLabel: boolean | undefined;\n isSearchFormExpanded?: boolean | undefined;\n disableSubmitSearch: boolean | undefined;\n searchTextInput: React.RefObject;\n maxChars: number;\n searchQsp: string;\n searchPlaceholder: string;\n query: string;\n ariaLabelCancel: string;\n ariaLabelSearch: string;\n ariaLabelSubmit: string;\n handleCancelSearchChange(): void;\n handleInputChange(query: string): void;\n}\n\nexport interface ISearchFormViewProps {\n input: React.ReactNode;\n submitBtn: React.ReactNode;\n cancelBtn: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Set updated input value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\n const {\n searchQsp,\n searchPlaceholder,\n hideSearchLabel,\n searchTextInput,\n handleInputChange,\n maxChars,\n disableSubmitSearch,\n handleCancelSearchChange,\n query,\n ariaLabelCancel,\n ariaLabelSearch,\n ariaLabelSubmit\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const inputNode = !hideSearchLabel ? (\n \n ) : (\n \n );\n\n const submitBtnNode = !disableSubmitSearch && \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\n/**\n * Search product suggest resources.\n */\nexport interface ISearchProductSuggestResources {\n freePriceText: string;\n}\n\nexport interface ISearchProductSuggestProps {\n searchProductSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetry: ITelemetry;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n resources?: ISearchProductSuggestResources;\n}\n\nexport interface ISearchProductViewProps {\n title: React.ReactNode;\n items: ISearchProductItemViewProps[];\n}\n\nexport interface ISearchProductItemViewProps {\n text: React.ReactNode;\n thumbnail: React.ReactNode;\n price: React.ReactNode;\n LiProduct: INodeProps;\n AProduct: INodeProps;\n id: string | undefined;\n}\n\nlet payLoad: IPayLoad;\nlet telemetryContent: ITelemetryContent | undefined;\n\n/**\n * ProductSuggestionsComponent.\n * @param props\n */\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\n const {\n suggestions,\n hitSuffix,\n hitPrefix,\n autoSuggestProps: {\n context: { actionContext },\n resources: { productSuggestionHeading }\n },\n moduleType,\n moduleId\n } = props;\n const reactNodes: ISearchProductItemViewProps[] = [];\n telemetryContent = props.telemetryContent;\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\n });\n\n const titleNode = _renderTitle(productSuggestionHeading);\n\n return { title: titleNode, items: reactNodes };\n};\n\nconst _renderTitle = (productSuggestionHeading: string) => {\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\n\n return
  • {productAutoSuggestionHeading}
  • ;\n};\n\nconst _assembleNode = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps,\n moduleType: string,\n moduleId: string\n): ISearchProductItemViewProps => {\n const altText =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n const price = item.Value3?.Value?.DecimalValue;\n return {\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\n price: !ObjectExtensions.isNullOrUndefined(price) && _renderPrice(price, price, moduleId, moduleType, props),\n LiProduct: _getLiWrapper(),\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext, props),\n id: item.Id\n };\n};\n\nconst _getLiWrapper = () => {\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'li' as NodeTag\n };\n};\n\nconst _getAWrapper = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps\n) => {\n const {\n autoSuggestProps: { context }\n } = props;\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n payLoad.contentAction.recid = item.Id;\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPrice = context.cultureFormatter.formatCurrency(item.Value3!.Value!.DecimalValue!);\n\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'a' as NodeTag,\n 'aria-label': `${ariaLabel!} ${productPrice}`,\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\n ...attribute\n };\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n return suggestion.Value && suggestion.Id\n ? getProductPageUrlSync(formattedLink, (suggestion.Id as unknown) as number, actionContext, undefined)\n : '';\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n return (\n // eslint-disable-next-line react/no-danger\n \n );\n};\n\nconst _renderPrice = (\n adjustedPrice: number,\n basePrice: number,\n moduleId: string,\n moduleType: string,\n props: ISearchProductSuggestProps\n): JSX.Element | null => {\n const {\n autoSuggestProps: { context }\n } = props;\n\n return (\n \n );\n};\n\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\n const {\n autoSuggestProps: {\n context: {\n request: { gridSettings }\n },\n config: { imageSettings }\n }\n } = props;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (!suggestion || !suggestion.ImageUrl) {\n props.telemetry.error('Search suggestion content is empty, module wont render.');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=40&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, getUrlSync } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport * as React from 'react';\n\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\nimport {\n CategorySuggestionsComponent,\n FormComponent,\n ISearchCategoryViewProps,\n ISearchKeywordViewProps,\n ISearchProductViewProps,\n KeywordSuggestionsComponent,\n LabelComponent,\n ProductSuggestionsComponent\n} from './components';\nimport { ISearchData } from './search.data';\nimport { ISearchProps, ISuggestionTypeCriterionData, SuggestionTypeCriterionSuggestionType } from './search.props.autogenerated';\n\nexport interface ISearchState {\n isSearchFormExpanded: boolean;\n searchText: string;\n searchKeywordSuggestClass: string;\n searchProductSuggestClass: string;\n searchCategorySuggestClass: string;\n suggestions: Autosuggestions | undefined;\n searchRefiners?: ProductRefiner[] | undefined;\n autoSuggestAriaLabel: string;\n isInitialState: boolean;\n isLoadingAutoSuggest?: boolean;\n}\n\nexport interface ISearchViewProps extends ISearchProps {\n Search: IModuleProps;\n AutoSuggestAriaLabel: INodeProps;\n AutoSuggestAriaLabelText: string;\n searchText: string;\n AutoSuggest: INodeProps;\n KeywordSuggest: INodeProps;\n ProductSuggest: INodeProps;\n CategorySuggest: INodeProps;\n SearchForm: INodeProps;\n FormWrapper: INodeProps;\n UlKeyword: INodeProps;\n UlProduct: INodeProps;\n UlCategory: INodeProps;\n label: React.ReactNode;\n form: React.ReactNode;\n autosuggestKeyword?: ISearchKeywordViewProps;\n autosuggestProduct?: ISearchProductViewProps;\n autosuggestCategory?: ISearchCategoryViewProps;\n callbacks: {\n handleCancelSearchChange(): void;\n handleCancelSearchFocused?(): void;\n };\n isSearchFormExpanded: boolean;\n isLoadingAutoSuggest?: boolean;\n isLoadingNode?: React.ReactNode;\n}\n\n/**\n *\n * Search module.\n * @extends {React.Component, ISearchState>}\n */\nclass Search extends React.Component, ISearchState> {\n private readonly searchTextInput: React.RefObject;\n\n private readonly searchCollapsedLabel: React.RefObject;\n\n private readonly formReference: React.RefObject;\n\n private readonly maxChars: number;\n\n private readonly topResultsCount?: number;\n\n private readonly hitPrefix: string = '{';\n\n private readonly hitSuffix: string = '}';\n\n private readonly waitTime: number = 500;\n\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject;\n\n private readonly autoSuggestResultDiv: React.RefObject;\n\n private readonly searchFormClass: string;\n\n private readonly searchLabelClass: string;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private loadSuggestionsRequestId?: string;\n\n private inputSuggestionType: ISuggestionTypeCriterionData[];\n\n // @ts-expect-error\n private cancellabelDebounce: debounce;\n\n public constructor(props: ISearchProps) {\n super(props);\n this.searchTextInput = React.createRef();\n this.searchCollapsedLabel = React.createRef();\n this.autoSuggestResultScreenReaderDiv = React.createRef();\n this.autoSuggestResultDiv = React.createRef();\n this.formReference = React.createRef();\n this.state = {\n isSearchFormExpanded: false,\n searchText: '',\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\n suggestions: undefined,\n searchRefiners: undefined,\n autoSuggestAriaLabel: '',\n isInitialState: true,\n isLoadingAutoSuggest: false\n };\n this.maxChars =\n (this.props.context &&\n this.props.context.app &&\n this.props.context.app.config &&\n this.props.context.app.config.searchInputMaxLength) ||\n 50;\n\n this.inputSuggestionType = [];\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\n this.searchFormClass = 'ms-search__form';\n this.searchLabelClass = 'ms-search__label';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this._initSuggestionTypes();\n }\n\n public async componentDidMount(): Promise {\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\n window && window.addEventListener('keyup', this._keyup);\n }\n\n public componentWillUnmount(): void {\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\n window && window.removeEventListener('keyup', this._keyup, false);\n }\n\n public componentDidUpdate(): void {\n const {\n config: { hideSearchLabel }\n } = this.props;\n const { isSearchFormExpanded, isInitialState } = this.state;\n\n if (!this.props.context.request.params.isEditor) {\n if (!hideSearchLabel && isSearchFormExpanded) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else if (!isInitialState) {\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: ISearchProps, nextState: ISearchState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- ignore complexity.\n public render(): JSX.Element {\n const {\n context,\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, shouldShowFullCategoryPath, className = '' }\n } = this.props;\n\n const {\n isSearchFormExpanded,\n searchText,\n searchKeywordSuggestClass,\n searchProductSuggestClass,\n searchCategorySuggestClass,\n suggestions,\n searchRefiners,\n isLoadingAutoSuggest\n } = this.state;\n\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\n\n const keywordSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Keyword || suggestion.SuggestionType === SuggestionType.None\n );\n const productSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Product\n );\n const categoryRefiners = searchRefiners?.find(refiner => {\n return refiner.SourceValue === ProductRefinerSource.Category;\n });\n const categorySuggestions = suggestions?.AllSearchResults?.filter(suggestion => {\n if (suggestion.SuggestionType !== SuggestionType.Category) {\n return false;\n }\n const refiner = categoryRefiners?.Values?.find(item => {\n return `${item.RefinerRecordId ?? 0}` === suggestion.Id;\n });\n\n return !ObjectExtensions.isNullOrUndefined(refiner);\n });\n\n const viewProps: ISearchViewProps = {\n ...(this.props as ISearchProps),\n\n Search: {\n moduleProps: this.props,\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\n },\n AutoSuggestAriaLabel: {\n tag: 'div',\n className: 'msc-autoSuggest__screen-reader',\n 'aria-live': 'assertive',\n ref: this.autoSuggestResultScreenReaderDiv\n },\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\n searchText: this.state.searchText,\n AutoSuggest: {\n ref: this.autoSuggestResultDiv,\n className: 'ms-search__autoSuggest'\n },\n KeywordSuggest: {\n className: searchKeywordSuggestClass\n },\n ProductSuggest: {\n className: searchProductSuggestClass\n },\n CategorySuggest: {\n className: searchCategorySuggestClass\n },\n SearchForm: {\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\n },\n FormWrapper: {\n tag: 'form',\n ref: this.formReference,\n className: 'ms-search__searchForm',\n 'aria-label': 'Search',\n name: 'searchForm',\n role: 'search',\n action: searchURL,\n autoComplete: 'off',\n onSubmit: this._handleSubmit\n },\n UlKeyword: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__keywordResults-items', className)\n },\n UlProduct: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__productResults-items', className)\n },\n UlCategory: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__categoryResults-items', className)\n },\n label: LabelComponent({\n isSearchFormExpanded,\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\n searchtext,\n searchLabelArialLabel,\n searchCollapsedLabel: this.searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange: this._handleCancelSearchChange,\n telemetryContent: this.telemetryContent\n }),\n form: FormComponent({\n ariaLabelCancel: cancelBtnAriaLabel,\n ariaLabelSearch: searchBtnAriaLabel,\n ariaLabelSubmit: submitBtnAriaLabel,\n hideSearchLabel,\n searchTextInput: this.searchTextInput,\n disableSubmitSearch,\n handleInputChange: this._handleInputChange,\n handleCancelSearchChange: this._handleCancelSearchChange,\n maxChars: this.maxChars,\n searchQsp,\n searchPlaceholder,\n query: searchText\n }),\n autosuggestKeyword:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (keywordSuggestions && ArrayExtensions.hasElements(keywordSuggestions)))\n ? KeywordSuggestionsComponent({\n searchKeywordSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: keywordSuggestions,\n telemetryContent: this.telemetryContent\n })\n : undefined,\n autosuggestProduct:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (productSuggestions && ArrayExtensions.hasElements(productSuggestions)))\n ? ProductSuggestionsComponent({\n searchProductSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: productSuggestions,\n telemetry: this.props.telemetry,\n moduleType: this.props.typeName,\n moduleId: this.props.id,\n telemetryContent: this.telemetryContent,\n resources: this.props.resources\n })\n : undefined,\n autosuggestCategory:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (categorySuggestions && ArrayExtensions.hasElements(categorySuggestions)))\n ? CategorySuggestionsComponent({\n searchCategorySuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: categorySuggestions,\n searchRefiners,\n telemetryContent: this.telemetryContent,\n shouldShowFullPath: shouldShowFullCategoryPath\n })\n : undefined,\n callbacks: {\n handleCancelSearchChange: this._handleCancelSearchChange,\n handleCancelSearchFocused: this._handleCancelSearchFocused\n },\n isSearchFormExpanded: this.state.isSearchFormExpanded,\n isLoadingAutoSuggest,\n isLoadingNode: this._isLoadingNode()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initSuggestionTypes() {\n const suggestionTypes = this.props.config.suggestionTypeCriterion;\n\n const suggestions = ArrayExtensions.unique(ArrayExtensions.validValues(suggestionTypes));\n if (!ArrayExtensions.hasElements(suggestions)) {\n this.inputSuggestionType = [\n { SuggestionType: SuggestionTypeCriterionSuggestionType.keyword },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.product },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.scopedCategory }\n ];\n return;\n }\n\n const validSuggestions = suggestions.filter(suggestion => suggestion.SuggestionType);\n if (ArrayExtensions.hasElements(validSuggestions)) {\n this.inputSuggestionType = validSuggestions;\n return;\n }\n\n this.inputSuggestionType = [];\n }\n\n /**\n * Function to create the ReactNode for loading Autosuggest result.\n * @returns ReachNode for loading Autosuggest result.\n */\n private readonly _isLoadingNode = (): React.ReactNode => {\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\n return ;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _focusOutTarget = (e: any): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.target.closest('.ms-search') === null) {\n this._clearAutoSuggestState();\n }\n };\n\n private readonly _keyup = (e: KeyboardEvent): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\n this._clearAutoSuggestState();\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n\n if (\n !(\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\n )\n ) {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n };\n\n private readonly _clearAutoSuggestState = (): void => {\n const {\n context: { actionContext },\n data: { searchState }\n } = this.props;\n\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\n searchState.searchText = '';\n searchState.defaultBasicSearchUrl = '';\n searchState.searchQueryStringParameter = '';\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\n this.searchTextInput.current.value = '';\n }\n\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\n };\n\n private async _getSearchSuggestions(loadSuggestionsRequestId: string, query: string) {\n try {\n const searchSuggestions = await getSearchSuggestionsAction(\n new AutoSuggestInput(query, this.topResultsCount, this._getSuggestionType(), this.hitPrefix, this.hitSuffix),\n this.props.context.actionContext\n );\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n return searchSuggestions;\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n this.setState({ suggestions: undefined, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get auto suggest results');\n return undefined;\n }\n }\n\n private async _updateSearchRefiners(loadSuggestionsRequestId: string, query: string, suggestions: Autosuggestions | undefined) {\n try {\n const refiners = await this._getSearchRefiners(query);\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({\n suggestions,\n searchRefiners: refiners,\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions),\n isLoadingAutoSuggest: false\n });\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({ suggestions, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions) });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get refiners results');\n }\n }\n\n private _loadSuggestions(query: string) {\n this.cancellabelDebounce = debounce(async () => {\n this.setState({ isLoadingAutoSuggest: true });\n const loadSuggestionsRequestId = Random.Guid.generateGuid();\n this.loadSuggestionsRequestId = loadSuggestionsRequestId;\n const searchSuggestions = await this._getSearchSuggestions(loadSuggestionsRequestId, query);\n await this._updateSearchRefiners(loadSuggestionsRequestId, query, searchSuggestions);\n }, this.waitTime);\n\n setTimeout(() => {\n this.cancellabelDebounce();\n }, 0);\n }\n\n private readonly _handleInputChange = (query: string): void => {\n if (!query || query.length <= this.maxChars) {\n this.setState({ searchText: query });\n }\n\n if (this.cancellabelDebounce) {\n this.cancellabelDebounce.cancel();\n }\n\n const {\n context,\n data: { searchState }\n } = this.props;\n\n if (context) {\n if (query && query.length > 0) {\n if (query.length > this.maxChars) {\n return;\n }\n\n if (ArrayExtensions.hasElements(this.inputSuggestionType)) {\n this._loadSuggestions(query);\n }\n\n searchState.searchText = query;\n } else {\n this.setState({ suggestions: undefined, searchRefiners: undefined });\n searchState.searchText = '';\n }\n context.actionContext.update(createSearchStateInput(searchState), searchState);\n }\n };\n\n private _getSuggestionType(): string {\n const distinctSuggestionTypes: string[] = this.inputSuggestionType.map(\n suggestionTypeItem => suggestionTypeItem.SuggestionType!.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType!.slice(1)\n );\n return distinctSuggestionTypes.join(',');\n }\n\n private async _getSearchRefiners(searchText: string): Promise {\n const { actionContext: ctx } = this.props.context;\n const catalogId = getCatalogId(ctx.requestContext);\n validateCatalogId(catalogId);\n return ProductsDataActions.getProductSearchRefinersAsync(\n { callerContext: ctx },\n {\n SearchCondition: searchText,\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n }\n );\n }\n\n private readonly _handleSubmit = (\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\n ): void => {\n const {\n config: { disableSubmitSearch },\n context: {\n actionContext,\n app: {\n config: { searchQueryStringParameter }\n }\n }\n } = this.props;\n\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\n e.preventDefault();\n\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else {\n const searchQsp = searchQueryStringParameter || 'q';\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\n document.location.href = searchURL;\n }\n };\n\n private readonly _handleCancelSearchChange = (): void => {\n const { isSearchFormExpanded, suggestions } = this.state;\n\n if (!isSearchFormExpanded) {\n this.setState({\n isSearchFormExpanded: true,\n searchText: '',\n isInitialState: false\n });\n } else {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _handleCancelSearchFocused = (): void => {\n const { suggestions } = this.state;\n if (!(suggestions && suggestions.AllSearchResults)) {\n this._clearAutoSuggestState();\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(route, window.location.href);\n if (qsp && query) {\n queryUrl.searchParams.set(qsp, query);\n }\n\n return queryUrl.href;\n };\n\n private readonly _setAutoSuggestResultCount = (result?: Autosuggestions) => {\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\n ariaLiveRegion.innerText =\n result && result.AllSearchResults && result.AllSearchResults.length > 0 ? suggestResultString : emptyResultString;\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\n return ariaLiveRegion.innerText;\n }\n return '';\n };\n}\n\nexport default Search;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\nimport { ISearchViewProps } from './search';\n\nconst SearchView: React.FC = props => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n CategorySuggest,\n UlKeyword,\n UlProduct,\n UlCategory,\n form,\n autosuggestCategory,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n isLoadingAutoSuggest,\n isLoadingNode\n } = props;\n\n return (\n \n {label}\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\n \n {searchText && searchText.length > 0 ? {AutoSuggestAriaLabelText} : ''}\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword, isLoadingAutoSuggest, isLoadingNode)}\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct, isLoadingAutoSuggest, isLoadingNode)}\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory, isLoadingAutoSuggest, isLoadingNode)}\n \n \n );\n};\n\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\n return (\n \n \n {form.input}\n {form.cancelBtn}\n {form.submitBtn}\n \n \n );\n};\n\nconst _renderKeywordSuggestions = (\n KeywordSuggest: INodeProps,\n UlKeyword: INodeProps,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n keywordSuggestions && (\n \n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n \n \n )\n );\n};\n\nconst _renderProductSuggestions = (\n ProductSuggest: INodeProps,\n UlProduct: INodeProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n productSuggestions && (\n \n \n {productSuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n \n \n {item.thumbnail}\n {item.text}\n {item.price}\n \n \n );\n })}\n \n \n )\n );\n};\n\nconst _renderCategorySuggestions = (\n CategorySuggest: INodeProps,\n UlCategory: INodeProps,\n categorySuggestions?: ISearchCategoryViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n categorySuggestions && (\n \n \n {categorySuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n categorySuggestions.text.map(text => {\n return text;\n })}\n \n \n )\n );\n};\n\nexport default SearchView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 {\n SocialShareItemElement: React.ReactNode | null;\n SocialShareItem: IModuleProps;\n}\n\n/**\n *\n * SocialShareItem component.\n * @extends {React.PureComponent>}\n */\nclass SocialShareItem extends React.PureComponent> {\n constructor(props: ISocialShareItemProps) {\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 \n );\n case socialMedia.twitter:\n return (\n \n );\n case socialMedia.pinterest:\n return (\n \n );\n case socialMedia.linkedin:\n return (\n \n );\n case socialMedia.mail:\n return (\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 = 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 {SocialShareItemElement};\n};\n\nexport default SocialShareItemView;\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 { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAdditionalContentData, ILinksData } from '../video-player.props.autogenerated';\n\n/**\n * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content Component props.\n */\nexport interface IVideoPlayerAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData | undefined;\n handleAdditionalTextChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content view props.\n */\nexport interface IVideoPlayerAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n additionalContentItems?: IVideoPlayerAdditionalContentItemViewProps;\n}\n\n/**\n * IVideoPlayerAdditionalContentProps: Interface for\n * Video Player Additional Content Item view props.\n */\nexport interface IVideoPlayerAdditionalContentItemViewProps {\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentItemContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Video Player Additional content component props.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IVideoPlayerAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Video Player Additional content component props.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IVideoPlayerAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalParagraphChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Video Player Additional content component props.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IVideoPlayerAdditionalContentProps, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'ms-video-player__details__additional-content__cta__links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.openInNewTab,\n role: 'link'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Video Player additonal content item props.\n * @param props - Video Player Additional content component props.\n * @returns IVideoPlayerAdditionalContentItemViewProps.\n */\nconst getAdditionalContentItems = (\n item: IAdditionalContentData,\n props: IVideoPlayerAdditionalContentProps\n): IVideoPlayerAdditionalContentItemViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, index);\n });\n\n return {\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentItemContainer: { className: 'ms-video-player__details__additional-content__container' },\n additionalContentItemLinks: { className: 'ms-video-player__details__additional-content__cta' }\n };\n};\n\n/**\n * VideoPlayerAdditionalContent component.\n * @param props - Video Player Additional content component props.\n * @returns Video Player Additional content view props.\n */\nexport const videoPlayerAdditionalContent = (\n props: IVideoPlayerAdditionalContentProps\n): IVideoPlayerAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n const reactNodes: IVideoPlayerAdditionalContentItemViewProps = getAdditionalContentItems(additionalContent, props);\n return {\n additionalContentNode: { className: 'ms-video-player__details__additional-content' },\n additionalContentItems: reactNodes\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IPlayerData, IPlayerOptions, IPlayerResources, IVideoMetadata, Player } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IVideoPlayerAdditionalContentViewProps, videoPlayerAdditionalContent } from './components/additional-content';\nimport { ILinksData, IVideoPlayerConfig, IVideoPlayerProps } from './video-player.props.autogenerated';\n\nexport interface IVideoPlayerViewProps extends IVideoPlayerProps<{}> {\n player: React.ReactNode;\n title?: React.ReactNode;\n text?: React.ReactNode;\n links?: React.ReactNode;\n detailsContainer?: INodeProps;\n detailsContainerCta?: INodeProps;\n additionalContent?: IVideoPlayerAdditionalContentViewProps;\n handleText?(): void;\n handleParagraph?(): void;\n handleAdditionalText?(): void;\n handleAdditionalParagraph?(): void;\n handleLink?(): void;\n handleAdditionalLink?(): void;\n}\n\n/**\n *\n * VideoPlayer component.\n * @extends {React.PureComponent>}\n */\nclass VideoPlayer extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly isMobileDevice: boolean;\n\n public constructor(props: IVideoPlayerProps) {\n super(props);\n this.isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\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 options = {\n ...this.props.config,\n isMobileDevice: this.isMobileDevice\n };\n const video: MsDyn365.IVideoData = this.props.config.video;\n const playerResources: IPlayerResources = {\n playAriaLabel: this.props.resources.playLabel,\n pauseAriaLabel: this.props.resources.pauseLabel,\n playingAriaLabel: this.props.resources.playingLabel,\n pausedAriaLabel: this.props.resources.pausedLabel,\n muteAriaLabel: this.props.resources.muteLabel,\n unMuteAriaLabel: this.props.resources.unMuteLabel,\n fullScreenAriaLabel: this.props.resources.fullScreenLabel,\n exitFullScreenAriaLabel: this.props.resources.exitFullScreenLabel,\n seekBarLabel: this.props.resources.seekBarLabel,\n videoTimeDurationLabel: this.props.resources.videoTimeDurationLabel,\n closedCaptionLabel: this.props.resources.closedCaptionLabel\n };\n const videoMetaData: IVideoMetadata = {};\n\n if (video) {\n videoMetaData.videoId = video.id;\n videoMetaData.title = video.title;\n videoMetaData.duration = video.playTime;\n\n if (video.thumbnail) {\n videoMetaData.posterframeUrl = video.thumbnail.src;\n }\n\n if (video._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = video._links.binaryReferences;\n }\n }\n const videoPlayerData: IPlayerData = { options: options as IPlayerOptions, metaData: videoMetaData };\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\n player: (\n \n \n \n ),\n title: this._getVideoDetailsHeading(),\n text: this._getVideoDetailsParagraph(),\n links: this._getVideoDetailsLinks(),\n detailsContainer: { className: 'ms-video-player__details' },\n detailsContainerCTA: { className: 'ms-video-player__details__cta' },\n additionalContent: videoPlayerAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleText: this.handleTextChange,\n handleParagraph: this.handleParagraphChange,\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleLink: this.handleLinkTextChange,\n handleAdditionalLink: this.handleAdditionalTextChange\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * Handle text change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Handle paragraph change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * Handle additional text change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalTextChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.heading = event.target.value;\n }\n }\n\n /**\n * Handle additional link text change.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n const additionalContent = this.props.config.additionalContent ?? {};\n if (additionalContent.links) {\n additionalContent.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * Handle additional paragraph change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalParagraphChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.subtext = event.target.value;\n }\n }\n\n /**\n * Get video details links.\n * @returns - React node.\n */\n private _getVideoDetailsLinks(): React.ReactNode[] | undefined {\n const { links } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n\n return links?.map((linkData: ILinksData, index: number) => {\n payLoad.contentAction.etext = linkData.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const linkId = index;\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: linkData.ariaLabel,\n className: 'ms-video-player__details__cta__link',\n linkText: linkData.linkText,\n linkUrl: linkData.linkUrl.destinationUrl,\n openInNewTab: linkData.openInNewTab,\n role: 'button',\n additionalProperties: attributes\n };\n\n return (\n {\n this.handleLinkTextChange(index, event);\n },\n requestContext: this.props.context.request\n }}\n />\n );\n });\n }\n\n private _getVideoDetailsHeading(): React.ReactNode | undefined {\n const { heading } = this.props.config;\n\n return (\n heading && (\n \n )\n );\n }\n\n private _getVideoDetailsParagraph(): React.ReactNode | undefined {\n const { paragraph } = this.props.config;\n\n return (\n paragraph && (\n \n )\n );\n }\n}\n\nexport default VideoPlayer;\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 { IVideoPlayerAdditionalContentViewProps, IVideoPlayerViewProps } from './index';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IVideoPlayerAdditionalContentViewProps) => {\n if (additionalContent.additionalContentItems) {\n return (\n \n <>\n {additionalContent.additionalContentItems.heading}\n \n {additionalContent.additionalContentItems.text}\n \n {additionalContent.additionalContentItems.links}\n \n \n \n \n );\n }\n\n return null;\n};\n\nconst VideoPlayerView: React.FC = props => {\n return (\n
    \n {props.player}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n
    \n );\n};\n\nexport default VideoPlayerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\n\n/**\n * ICartIconViewState: Interface for Cart Icon View State.\n */\ninterface ICartIconViewState {\n isModalOpen: boolean;\n}\n\n/**\n * Render Cart lines.\n * @param cartLines - Flyout cart line view props.\n * @param props - Cart icon view props.-\n * @returns JSX Element.\n */\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n return cartLines.map((cartLine, index) => {\n const cartLineIndex = index;\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\n/**\n * Initiate total price.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\n const totalPrice = price\n ? props.context.cultureFormatter.formatCurrency(price)\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\n return cart && !cart.hasInvoiceLine ? (\n
    \n \n {props.resources.totalPriceFormatString}\n {totalPrice}\n \n
    \n ) : (\n <>\n );\n};\n\n/**\n * Initiate subtotal message.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderSubtotalMessage = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n return cart && !cart.hasInvoiceLine ?

    {props.resources.subTotalMessage}

    : null;\n};\n\n/**\n *\n * CartIconView component.\n * @extends {React.PureComponent}\n */\nexport class CartIconView extends React.PureComponent<\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\n ICartIconViewState\n> {\n private isAutoDisplayTriggered: boolean;\n\n private readonly cartIconRef: React.RefObject = React.createRef();\n\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\n super(props);\n this.isAutoDisplayTriggered = false;\n this.state = {\n isModalOpen: false\n };\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n window.addEventListener('keydown', this._escFunction, false);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('keydown', this._escFunction, false);\n }\n }\n\n /**\n * Render Cart Item count.\n * @returns JSX Element.\n */\n public render(): JSX.Element | null {\n const cart = this.props.data.cart.result ?? undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n if (shouldShowMiniCart) {\n if (!this.isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isModalOpen: true });\n this.isAutoDisplayTriggered = true;\n } else if (!this.state.isModalOpen) {\n // If modal is closed, reset the flag.\n this.isAutoDisplayTriggered = false;\n }\n }\n return (\n \n \n \n \n {this.props.flyoutTitle}\n {this._renderCartItemCount(this.props)}\n {this._renderCartCloseIcon()}\n \n \n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\n {this.props.checkoutBlockedDueToUnavailableFunds}\n {renderCartlines(this.props.cartlines, this.props)}\n \n \n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n {renderSubtotalMessage(this.props)}\n {this.props.checkoutAsSignInUserButton}\n {this.props.checkoutAsGuestButton}\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\n \n {this.props.data.cart.result?.isEmpty ? (\n \n {this.props.resources.continueShoppingButtonTitle}\n \n ) : null}\n \n \n \n \n );\n }\n\n /**\n * Initiate modal container.\n * @returns Inode props.\n */\n private readonly _modalContainer = (): INodeProps => {\n return {\n tag: Modal,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__minicartmodal-container',\n wrapClassName: 'ms-cart-icon__minicartmodal',\n isOpen: this.state.isModalOpen,\n toggle: this.closeModal\n };\n };\n\n /**\n * Initiate open modal.\n */\n private readonly _openModal = (): void => {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\n this.setState({\n isModalOpen: true\n });\n };\n\n /**\n * Initiate close modal.\n */\n private readonly closeModal = (): void => {\n this.cartIconRef.current?.focus();\n this.setState({\n isModalOpen: false\n });\n };\n\n /**\n * Initiate cart close Icon.\n * @returns JSX Element.\n */\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\n return \n
    {choiceSummary}
    \n
    \n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n
    \n
    \n {refineMenu && isExpanded && renderRefiner(refineMenu)}\n \n {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}\n \n
    \n\n \n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n \n \n
    \n );\n};\n\n/**\n * Render Search result Modal.\n * @param modalProps - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createSearchResultModal = (\n modalProps: ISearchResultV2ModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown?: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\n/**\n * Render Refiner Mobile.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefinerMobile = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, refineMenuContainer, refinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render Search result Body.\n * @param props - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createModalBody = (\n props: ISearchResultV2ModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown?: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefinerMobile(refineMenu));\n }\n return null;\n};\n\n/**\n * Render Refiner.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, refineMenuContainer, refinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render Refiner Footer.\n * @param props - The Refine Menu view props.\n * @param handler - The Refine menu toggle function.\n * @param resources - Resources to get the done text and aria label.\n * @returns The JSX Element.\n */\nconst renderRefinerFooter = (\n props: IRefineMenuViewProps,\n handler: MouseEventHandler,\n resources: ISearchResultContainerV2Resources\n): JSX.Element | null => {\n const { refiners } = props;\n if (refiners) {\n return (\n \n \n {resources.doneText}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render sort by drop down.\n * @param props - The sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { sortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return {sortByDropDown};\n }\n return null;\n};\n\n/**\n * Render Title.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, titleContainer } = props;\n if (title) {\n return (\n \n \n {title.titlePrefix}\n {title.titleText}\n \n \n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n"],"names":["HeaderView","React","constructor","props","super","_renderQuickViewIcon","quickOrderLink","className","href","_configureStickyHeader","headerAlertsContainer","document","querySelector","bannerHeights","offsetHeight","headerElement","MsDyn365","isBrowser","documentElement","scrollTop","classList","add","remove","stickyHeader","headerLogo","navStickyPos","_renderAccountBlock","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","accountInfoDropdownButton","signOutLink","signInLink","accountLinks","accountClassName","classnames","Node","Object","assign","map","link","_renderReactFragment","items","ArrayExtensions","hasElements","slot","this","menuNode","componentDidMount","config","useStickyHeader","window","addEventListener","render","HeaderTag","HeaderContainer","HeaderTopBarContainer","Divider","MobileMenuContainer","MobileMenuBodyContainer","MobileMenuLinksContainer","showQuickOrderLink","showPhoneNumber","phoneNumber","quickOrderUrl","getUrlSync","context","actionContext","Module","navIcon","logo","_renderPhoneNumber","ref","menuBar","_renderMobileLogo","search","preferredStore","cartIcon","siteOptions","MobileMenuHeader","wishListIconMobile","telephoneLink","_config$mobileLogoIma","typeName","Logo","logoLink","image","mobileLogoImage","gridSettings","request","requestContext","heading","histogramItems","histogramProps","moduleProps","data","resources","moduleId","id","averageRating","componentId","_data$ratingsSummary$","_data$ratingsSummary$2","_data$ratingsSummary$3","_data$ratingsSummary$4","_data$ratingsSummary$5","_data$ratingsSummary$6","reviewsCount","ratingsSummary","result","reviewsCountString","numberOfReviewsString","format","RatingComponent","avgRating","readOnly","ariaLabel","averageRatingAriaLabel","item","buttonProps","starLabel","bar","histogramItem","user","isOBORequest","changeUserSlug","accountLinksFiltered","forEach","node","linkUrl","_get","push","handleLoginRedirect","_this$props$data$acco","isAuthenticated","isHomePage","url","requestUrl","pathname","customer","accountInformation","location","accountUrl","logoAnchorTag","renderRating","ratingId","totalRatings","_totalRatings$toStrin","numberRatings","toString","undefined","ratingAriaLabel","rating","roundedRating","toFixed","getRatingAriaLabel","ratingCount","ActiveProductComponent","_ref","imageSettings","savingsText","freePriceText","originalPriceText","product","imageUrl","altText","imgData","src","imageProps","cropFocalRegion","Image","loadFailureBehavior","renderProductPlacementImage","PrimaryImageUrl","Name","productId","basePrice","adjustedPrice","price","BasePrice","AdjustedPrice","CustomerContextualPrice","PriceComponent","renderPrice","Price","description","Description","app","hideRating","AverageRating","TotalRatings","assembleNode","_item$links","headingNode","renderHeading","additionalContentHeading","Msdyn365","text","tag","editProps","onEdit","event","handleAdditionalTextChange","paragraphNode","subtext","renderParagraph","additionalContentParagraphText","linksNode","links","ctaLink","index","renderLinks","linkIndex","editableLink","linkText","destinationUrl","openInNewTab","isOpenInNewTab","role","key","onTextChange","handleAdditionalLinkTextChange","additionalContentNode","additionalContentContainer","additionalContentItemLinks","activeImageAdditionalContent","additionalContent","CanvasCalculations","CanvasStyles","ImageMapper","_isDesktopViewPort","_context","getActiveImageWidth","activeImageReferenceValue","activeImageRefs","current","clientWidth","getActiveImageHeight","clientHeight","convertHexToRgb","hexColor","RegExp","exec","rValue","Number","parseInt","gValue","bValue","applyFadingTransition","coords","rgbColor","alpha","_this$_canvas$current","_this$_canvas$current2","halfDivisor","_canvas","getContext","buttonPadding","paddingAdjustment","buttonWidth","measureText","width","fillStyle","body","parentElement","getAttribute","fillText","drawButton","_this$_canvas$current3","_this$_canvas$current4","color","buttonTextClor","buttonHeight","buttonPositionX","buttonPositionY","arcsize","beginPath","moveTo","lineTo","arcTo","stroke","closePath","fill","expandAnimation","_this$props$imageMapp","buttonText","imageMapperResources","animationStartWidth","expandAnimationStartWidth","pointPositionX","pointPositionY","animationEndWidth","expandAnimationEndWidth","radius","expandRadius","rotation","startAngle","endAngle","textFadeInValue","textFadeInStartValue","buttonTextClorInRgb","toLocaleLowerCase","animate","_this$_canvas$current5","_this$_canvas$current6","ellipse","requestAnimationFrame","textFadeInterval","collapseAnimation","_this$props$imageMapp2","collapseAnimationStartWidth","collapseAnimationEndWidth","clearMargin","clearHeight","clearWidth","collapseRadius","textFadeOutValue","textFadeOutStartValue","_this$_canvas$current7","_this$_canvas$current8","clearRect","drawCircle","_this$_canvas$current9","_this$_canvas$current10","viewPort","doubleMultiplier","strokeStyle","arc","Math","PI","scaleCoords","imgWidth","defaultWidth","defaultScale","scale","coord","renderPrefilledAreas","areaMap","areas","area","computeCenter","scaledCoords","handleHoverOn","center","handleHoverOff","_this$_canvas$current11","canvasPositionX","defaultPositionX","canvasPositionY","defaultPositionY","height","click","onClick","preventDefault","hoverOn","onMouseEnter","hoverOff","onMouseLeave","renderAreas","_this$props$imageMapp3","_this$props$imageMapp4","_area$productSearchRe","xsRadius","extendedArea","_objectSpread","areaKey","altTextWithProductName","replace","productSearchResult","shape","join","onFocus","onBlur","productUrl","tabIndex","alt","initCanvas","_this$getActiveImageW","_this$getActiveImageH","_this$_canvas$current12","_backgroundImage","_container","onLoad","defaultHeight","canvasWidth","canvasHeight","style","componentDidUpdate","shouldComponentUpdate","nextProps","shouldRender","_requestContext$gridS","imageData","useMap","name","ActiveImageConstants","ActiveImage","_defaultProductCardWidth","_defaultProdutCardHight","_activePoints","addActivePoints","_product$PrimaryImage","areaId","RecordId","primaryImageUrl","updateClientWidth","viewport","isMobile","variant","VariantType","Browser","setState","renderImageMapper","_this$props$config$ac","productResults","products","activePoints","configProduct","ItemId","itemId","_product$Name","_configProduct$xPosit","_configProduct$yPosit","_configProduct$radius","getProductPageUrlSync","xPosition","yPosition","find","activePoint","JSON","stringify","mappedArea","_activeImageClass","length","state","enterArea","leaveArea","activeImage","_activeImageRefs","altTextForSeeMoreButtonWithProductName","seeMoreButtonText","overlayClass","type","open","resetState","renderProductComponent","_this$state$area","_this$state$area$prim","_product$ItemId","apiSettings","baseImageUrl","productImageSettings","renderProductCard","_productCardDivRef","renderOverlay","getProductCardPositionX","_this$props$config$pr","_this$props$config$pr2","_defaultImageSettings","_area$center$","_area$center","defaultImageSettings","getDefaultImageSettings","productImageSettingsWidth","viewports","lg","w","productCardWidth","leftAllignPosition","position","getProductCardPositionY","_this$props$config$pr3","_this$props$config$pr4","_defaultImageSettings2","productImageSettingsHeight","h","produtCardHight","_area$center$2","_area$center2","xs","q","xl","lazyload","keyDown","enterKey","target","nodeName","escKey","handleTextChange","value","handleParagraphChange","paragraph","renderActiveImageDetailsLinks","payLoad","getPayloadObject","_telemetryContent","linkData","contentAction","etext","attributes","getTelemetryAttributes","linkId","willOpenInNewTab","additionalProperties","handleLinkTextChange","renderActiveImageDetailsHeading","_heading$tag","renderActiveImageDetailsParagraph","getActiveImageId","activeImageId","_activeImageIdPart$","activeImageSource","split","decrementOne","_handleOutsideClick","_this$_productCardDiv","contains","getTelemetryObject","telemetryPageName","friendlyName","telemetry","setTimeout","timeoutInterval","images","getElementsByClassName","Array","from","removeAttribute","componentWillUnmount","removeEventListener","viewProps","activePointContainer","activePointDetailsContainer","imageMapper","overlay","productCard","productCardleftPosition","productCardtopPosition","title","detailsContainer","detailsContainerCta","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","handleAdditionalLinkText","renderView","_this$props$config$ad","activeImageView","top","left","BulkPurchase","_errorCssClass","_errorCssGlyphClass","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_onErrorMessage","errorMessage","stateMessage","messageText","statusCssString","messageGlyph","isOpen","_toggleCollapse","isExpanded","_this$props$data$prod","hasDimensionsInProps","productDimensions","hasDimensionsInData","container","content","_renderCollapseContent","_renderCollapseButton","_renderCollapse","Button","bulkPurchaseHeaderTitle","Collapse","_renderMainContent","isMobileDevice","Viewport","userMessageNode","Alert","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_featureState$result","_this$props$data$orde","_this$props$data$cust","featureState","isMultipleCatalogsFeatureEnabled","IsEnabled","catalogId","getCatalogId","validateCatalogId","ProductDimensionsMatrix","dimensions","orderTemplates","customerInformation","dimensionOnChange","onErrorMessage","isMultipleCatalogFeatureEnabledInHq","BulkPurchaseViewComponent","async","validateCartAsync","cart","propsContext","cartResult","cartVersion","shouldRetry","arguments","Version","error","warning","debug","AsyncResult","resolve","_validationResult$Val","validationResult","CartsDataActions","callerContext","bypassCache","Id","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","ProductId","Behavior","MaximumQuantity","input","cartLineId","LineId","newQuantity","updateLineResult","updateCartLineQuantity","message","getProductByProductId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","ProductPickUpOptionsForCartLineItems","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","channelId","Error","getCartState","getActiveCartProductsAction","ActiveCartProductsInput","response","Promise","ProductsDataActions","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","createObservableDataAction","action","inputData","PickUpInStore","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","cartline","storeSelectorModuleId","openDialog","alreadySelectedLocation","OrgUnitNumber","FulfillmentStoreId","deliveryOptions","onLocationSelected","orgUnitLocation","deliveryMode","updateCartLinePickupLocation","then","status","locationChangedHandler","catch","_onLocationChangedCallback","DeliveryMode","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","foundLocation","OrgUnitName","DeliveryOptions","_props$channelDeliver","retailMulitplePickupFeatureState","channelDeliveryOptionConfig","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","delivery","pickup","deliveryCode","Code","PickupDeliveryModeCodes","pickupDeliveryModeCode","option","callbacks","toggleBopis","defaultComponent","_renderShippingMethod","cartLine","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","onChange","checked","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","ContainerProps","_assembleNode","foundProductAvailability","productPickUpOptions","_foundProductAvailabi","_product$Dimensions","_props$cartState","_context$request$chan","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","wishlists","defaultWishlistName","nameOfWishlist","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","IsInvoiceLine","ObjectExtensions","isNullOrUndefined","_getErrorMessage","currentQuantity","lineId","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","filter","i","ValidationFailures","validation","ErrorContext","Quantity","onRemoveClickHandler","onRemoveClickFunction","payload","TelemetryEvent","RemoveFromCart","telemetryContent","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","toLowerCase","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","Value","getProductUrlSync","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","searchParams","set","CatalogId","getInvoiceDetailsPageUrlSync","cartlineId","hasError","StringExtensions","isNullOrEmpty","CartLineItemComponent","catalogs","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","priceCurrency","channel","Currency","pickUpInStore","pickitUpText","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","shouldShowButtonFailedTooltip","disableButton","disableTooltip","assembleCartlines","cartlines","reactNodes","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","hasInvoiceLine","_assembleGroupInvoiceCartlines","cartLines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","entries","deliveryType","groupByDeliveryType","keys","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","exception","Cart","_isMounted","promotionPopupId","promotionLinkClick","showPromotionDialog","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","sm","removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","validateCart","updateCartlineQuantity","cartlineToUpdate","cartActionResult","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","bind","isCartValid","_this$props$data$cart","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","CartLines","reaction","_this$props$data$cart2","_this$props$data$cart3","nextState","_this$props$context$r","_cart$cart$CartLines","_this$props$data$feat","signInUrl","guestCheckoutUrl","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","emailDeliveryModeCode","EmailDeliveryModeCode","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","RetailMultiplePickupFeatureState","multiplePickUpEnabled","currentCatalogId","getCartLinesGroup","TelemetryConstant","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","cartTitle","CartlinesWrapper","OrderSummaryWrapper","OrderSummaryItems","promoCode","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","orderSummaryHeading","invoiceSummaryTitle","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","showGuestCheckoutButton","guestCheckoutButtonTitle","expressCheckoutButton","slots","paymentExpress","ExpressCheckoutSectionWrapper","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","checkoutBlockedDueToUnavailableFunds","storeSelector","waitingComponent","Waiting","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","isEmpty","OrderSummaryErrors","_getOrderSummaryErrors","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","promotionDialog","Modal","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","line","Wrapper","assertive","outOfStockErrorMessageHeader","header","errors","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","_this$props","_featureState$result2","_this$props$context$r2","channelConfiguration","retailMultiplePickUpOptionEnabled","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","orderTotal","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","currentPriceText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$cata","PickupDeliveryModeCode","modules","storeSelectorId","CartLineItems","productDeliveryOptions","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","salesAgreementPricePrompt","priceEditorResources","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","urlCheck","returnURL","origin","includes","_featureStatuses$find2","featureStatuses","_featureStatuses$find","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","IsB2b","_featureStatuses$find3","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$chan","_this$props$data$cata2","_this$props$data$chan2","_this$props$data$cart5","cartLinesPickUpOptions","__decorate","observer","_renderCartlines","cartEmptyText","_cartLine$cartlineId","renderCartLinesGroupHeader","pickUpText","shippingText","emailShippingText","titleSeparate","_cartLine$pickUpInSto4","groupTitle","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_props$cart","_props$cart2","errorData","renderModuleAttributes","_props$context$action","emailshippingText","emptyCartText","renderCartLinesGroup","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","giftCard","loyalty","_renderOrderSummarylines","orderSummaryLines","subtotal","shipping","otherCharge","tax","totalDiscounts","descClassName","isChecked","ariaSetSize","ariaPosInSet","AddressDetailItemFunctionComponent","labelText","isDisabled","fallbackPattern","onChangeMinValue","checkBoxLabel","disclaimerText","selectedDate","setSelectedDate","useState","isDateEnabled","setIsDateEnabled","minDate","setMinDate","today","Date","toISOString","handleCheckboxChange","selectedValue","console","log","min","pattern","groupName","deliveryOptionRef","selectedItemId","channelConfig","count","changeCurrentDeliveryOption","deliveryClassName","optionClassName","RadioButtonComponent","DescriptionComponent","get","currencyCode","GetLineItems","lineClassName","lineItemClassName","changeText","changeButtonText","showDeliveryOption","setShowDeliveryOption","handleClick","UpdateInCart","_getProduct","_product","_getLineItemComponent","_cartLine$CatalogId","quantityDisplayStringLabel","deliveryMethodLabel","CheckoutCartLineDeliveryOptionsRadio","CheckoutDeliveryOptions","isLoading","groupDeliveryOptions","cartLineSelectedDeliveryOptions","checkoutErrorRef","cartLinesDeliveryOptions","init","moduleState","isSelectDefaultOptionEnabled","onCancel","onSubmit","useDefaultDeliveryOption","canShip","cartDeliveryMode","getSavedDeliveryOption","isMultipleAddressShippingEnabled","getCartLinesSavedDeliveryOption","loadDeliveryOptions","_this$props$data$chec","checkout","checkoutCart","getCartLinesForShipping","isDeliveryModeExists","getDeliveryOptionSelected","selectedItem","DeliveryOption","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","ErrorTitleComponent","ErrorMessageComponent","getDeliveryOptionList","getAriaLabelWithPrice","code","radioButton","onDeliveryOptionChange","getSaveButton","saveBtnLabel","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","_this$props$data$chec2","information","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","_this$props$data$chec3","updateCartLinesDeliverySpecification","updateCartDeliverySpecification","savedDeliveryOption","_this$props$data$chec4","onReady","cartLinesForShipping","existingCartLineSelectedDeliveryOption","cartLineDeliveryOption","selectedDeliveryOption","deliveryModeId","trim","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","onPending","_response$errorDetail","genericErrorMessage","setIsCancellable","_this$props$data$chec5","lineSpecs","checkoutCartLines","group","_checkoutCartLines$fi","address","lineSpec","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ShipToAddress","DeliveryAddress","lineDeliverySpecifications","_this$props$data$chec6","_cartLine$LineId","cartLineSelectedDeliveryOption","RequestedDeliveryDate","requestDeliveryDate","updateCartLines","updatedCartLinesObject","_unused","_this$channelDelivery","getDeliveryOptions","_this$props$data$chec7","cartId","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","deliveryOptionFilter","filterDeliveryModeOption","FilterDeliveryModeOption","None","FilterOutNonCarrierDeliveryMode","getDeliveryOptionsAsync","_unused2","deliveryOptionsNotFound","_this$props$data$chec8","_this$props$data$chec9","updateHasCartDeliveryMode","newHasCartDeliveryMode","isPaymentVerificationRedirection","_this$props$data$chec10","getStoredDeliveryOptions","_this$props$data$chec11","_this$props$data$chec12","_this$props$data$chec13","cartLinesWithShippingAddress","_this$props$data$chec14","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","_this$props$data$chec19","_this$props$data$chec20","_this$props$data$chec21","features","enable_checkout_race_condition_hot_fix","isExpressCheckoutApplied","getGroupDeliveryOptions","isExpressPaymentAppliedInCartPage","currentTarget","onCartLineDeliveryOptionChange","onCartLineRequestDeliveryDateChange","deliveryDate","getCheckoutCartLineGroupDeliveryOptions","requestDeliveryDateEnabled","enableRequestDeliveryDate","groupDeliveryOption","cartLine1","_cartLine$LineId2","_ref2","_cartLine$LineId3","_this$cartLineSelecte","_cartLine1$ShippingAd","_cartLine1$ShippingAd2","_groupDeliveryOption$","isNewLine","isShowLabel","cartLineGroupShippingAddressLabel","FullAddress","cartLineGroupDeliveryOptionsLabel","cartLineGroupDeliveryOptionsText","CheckoutCartLineDeliveryDate","cartLineGroupDeliveryRequestDeliveryDateText","cartLineGroupDeliveryRequestDeliveryDateDisclaimerText","cartLineGroupDeliveryRequestDeliveryDate","_this$cartLineSelecte2","_ref3","_cartLine$LineId4","selectedDeliveryOption1","shippingChargesString","_this$props$data$chec22","getGroupByDelivery","_item$ShippingAddress","GetDeliveryOptionsForCartLineAddressInput","getDeliveryOptionsForCartLineAddress","_group$cartLineIds","_unused3","multipleAddressShippingEnabled","isDataReady","expressPaymentDetailsFromCartPage","properties","ExtensionProperties","property","Key","StringValue","parse","_this$expressPaymentD","_this$expressPaymentD2","isExpressCheckoutAppliedInCartPage","_this$props$data$chec29","when","_this$props$data$chec23","_this$props$data$chec24","_this$props$data$chec25","_this$props$data$chec26","_this$props$data$chec27","_this$props$data$chec28","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec30","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec31","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","feature","isReady","isUpdating","isError","isShowList","isShowSelected","deliveryOptionAriaLabel","deliveryOptionsData","alert","ErrorComponent","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","checkoutCartLineGroupDeliveryOptions","enableCheckoutCartLineDeliveryOptions","saveButton","editButton","cancelButton","observable","computed","withModuleState","DeliveryOptionList","DeliveryOptionSelected","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","label","inputPinLabel","inputExpLabel","alertFieldLabel","fade","includeAlertClass","inputNumber","inputPin","placeholder","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","onRemoveHandler","onRemoveGiftCard","_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","TotalAmount","giftCardSupported","External","shouldBeEnabledForGuest","handleCancelOrSubmit","hasSelectedItem","cultureFormatter","formatCurrency","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","getGiftCard","addGiftCard","Pin","ExpirationDate","TenderTypeId","focus","findGiftcardTenderTypes","tenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","tenderType","OperationId","ConnectorId","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","getTenderTypesAsync","internalGiftcardTenderTypes","OPERATIONS","PayGiftCertificate","externalGiftcardTenderTypes","Both","month","year","getGiftCardAsync","activeGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","card","resolveCardTypesAsync","CardType","GiftCard","getLoyaltyAmount","loyaltyAmount","getCustomerAccountAmount","customerAccountAmount","getGiftCardTotalAmount","reduce","shouldPayGiftCard","showAdditionalFields","EnabledPaymentsForOBO","moduleClassName","checkoutGiftCardProps","showGiftCard","TitleCompoent","form","From","SelectedGiftCard","GiftCardList","_ref4","_objectWithoutProperties","_excluded","AddResource","_ref5","ShowResource","_ref6","max","step","ariaValueMax","ariaValueMin","ariaValueNow","htmlFor","CheckoutLoyalty","_defaultLoyaltyPoints","loyaltyCard","CardNumber","LoyaltyCardId","updateLoyaltyCardId","loyaltyCardNumber","shouldPayLoyalty","_setErrorMessage","_clearError","_dialogToggleRef","_applyLoyaltyPoints","_removeLoyaltyPoints","_onInputChange","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","Loyalty","isShowLoyalty","isShowAddLoyalty","disableAddLoyaltyComponent","checkoutLoyalty","showLoyalty","Heading","headingTag","loyaltyHeadingText","coveredAmountText","TextComponent","loyaltyCoveredAmountText","amount","addLoyalty","drawer","Drawer","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","cardNumber","rewardPoints","RewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","LabelComponent","payWithLoyaltyAmountLabel","loyaltyAmountInput","InputComponent","loyaltyAmountApplyButton","applyCheckoutLoyaltyPaymentText","isNaN","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","removeCheckoutLoyaltyPaymentText","innerRef","point","RewardPointId","checkoutLoyaltyRewardPoint","availablePointsText","ActivePoints","expiringPointsText","expiringPoints","PointsExpiringSoon","updateLoyaltyAmount","newAmount","parseFloat","num","getElementById","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","callActionOrExecute","_points$MaxCurrencyVa","update","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","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","updatedCart","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","_cartlineProduct$Beha","cartlineProduct","isStockedItem","IsStockedProduct","isEmailDelivery","productInventory","_productInventory$Pro","cartLinesInventoryValidation","getActiveChildModuleStates","childIds","getModule","hasModuleState","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","validateForCheckout","retry","_shouldValidateQuantityLimits","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","isB2BSite","isOrderQuantityLimitsFeatureEnabledInSiteSettings","_saveShippingAndBillingAddress","tokenizedPaymentCard","Zip","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","TwoLetterISORegionName","Country","NameOnCard","Street","Address1","StreetNumber","Address2","City","State","ZipCode","Phone","invalidCartVersionErrorMessage","missingRequiredCartTenderLinesErrorMessage","checkoutApiFailureErrorMessage","invoiceCheckoutApiFailureErrorMessage","checkoutResult","apiError","statusCode","errorCode","setCheckoutErrors","_error$data","shouldEnableSinglePaymentAuthorizationCheckout","AdditionalContext","isEditorialMode","params","isEditor","canPlaceOrder","isTermsAndConditionAccepted","disableForOBO","isPaidOffByCustomerAccount","amountDue","isCartReady","asyncResultStatus","AsyncResultStatusCode","LOADING","email","tenderLine","paymentTenderType","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newTenderLine","newTokenizedPaymentCard","newPaymentTenderType","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","isPaymentSectionContainerReady","_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","_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","termsAndConditions","backToShoppingAttributes","checkoutBtnText","hasShippingAddress","hasCartDeliveryMode","hasGuestCheckoutEmail","hasExpressPaymentContainer","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","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","lines","customerAccount","PaymentSummaryComponent","_ref10","_getDeliveryLocation","locationMatch","_input$data$catalogs","_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","cartLinesGrp","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","iconClass","_getLineItems","editCartText","EditCart","attribute","groupClass","loyaltyLabel","giftcardLabel","customerAccountLabel","showLineItems","orderSummaryProps","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","isCancelAllowed","hasControlGroup","saveAndContinueBtnLabel","canSubmit","canCancel","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","focusOnFirstFocusableElement","child","focusOnEditButton","scrollToTitle","formCard","scrollIntoView","getTitle","Tag","_getModules","_getId","prevProps","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","indexOf","getId","getHeading","moduleChildId","hasMissingInfo","hasOrderError","_state$childIds","shouldCollapseAfterRedirect","previousModuleHasError","_this$props$requestCo","GuidedCard","enableControl","buttonsStates","onPlaceOrderHandler","isBusy","buttonSetState","setIsBusy","Purchase","PayCard","PayLoyalty","PayCustomerAccount","orderedProducts","redirect","PlaceOrder","balanceCheckButton","GiftCardBalanceCheck","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","Form","Item","PromoCode","_onInputChangeHandler","e","promoCodeInputValue","canApply","_applyPromotion","appliedPromo","addPromoCode","substatus","_onSubmitHandler","_applyPromotionHandler","_renderForm","_removePromotion","removePromoCodes","promoCodes","_calculateDiscount","discountAmount","DiscountLines","discountLine","DiscountCode","DiscountCost","_renderAppliedPromoCode","Coupons","removePromotionHandler","promoCodTotalDiscount","coupon","ApplyPromoCode","isCollapseOpen","mockRequest","buildMockRequest","mockRequestURL","staticCdnUrl","md","signOutUrl","signUpUrl","mockAnonRequest","mockSigninErrorRequest","retailServerErrorCode","mockActionContext","buildHydratedMockActionContext","HeaderPreferredStore","modalCloseButtonRef","_findPreferredStoreOnClick","storeName","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","showMapViewLink","parentElementRef","_renderLogo","rel","_renderImage","moduleType","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","targetId","_this$props$config$my","myAccountLinks","popOverRef","_toggleNavbar","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","displayName","workerName","customerName","_this$props$data$empl","worker","employee","FirstName","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","cartLabel","cartQtyLabel","logoImage","shouldShowWishlistCount","headerToggleClass","headerClassName","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","wishListIconDesktop","WishListIconComponent","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","CartIconComponent","headerAriaLabel","wrapClassName","Popover","placement","_getSigninButton","_getSignOutButton","switchCustomerLink","_getSwitchCustomerButton","_getAccountInfoDropdownButton","_getAccountLinks","currentDistributor","slotName","SignIn","signInLinkText","signInLinkAriaText","onTelemetryClick","_user$signOutUrl","SignOut","signOutLinkText","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","removeAccountSelectionCookie","shoppingAsText","route","param","delete","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","cta","keyCode","KeyCodes","Escape","_renderDesktopAccountBlock","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","totalAmountAfterGiftCard","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","hasDeliveryMethod","hasShippingMethod","freightFee","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","initProductState","productPrices","productCollectionProducts","productCollection","equals","listType","getProductPriceForSelectedProducts","ProductPriceForSelectedProductsInput","p","IsMasterProduct","productPrice","_this$state$productsD","trace","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","priceResources","priceRangeSeparator","ProductContainer","productComponent","ProductComponent","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","productCollectionViewProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","ProductCollectionContainer","GridComponentProps","seeAllButton","_renderCarousel","carouselContainer","_renderProduct","_renderGrid","gridContainer","_renderNoProduct","noProductToRenderText","PromoBannerCloseButton","closeButtonAriaLabel","onClose","PromoBannerClose","PromoBannerLinks","editableLinks","_mapEditableLinks","linkdata","PromoBannerText","PromoBanner","animating","isVisible","activeIndex","bannerMessages","_next","nextIndex","_isLastItem","_goToIndex","_previous","_isFirstItem","_onDismiss","dismissEnabled","interval","hideFlipper","autoplay","closeButtonLabel","bannerText","bannerAriaLabel","onDismiss","handleLinks","handleText","promoBannerProps","promoBannerTextProps","promoBannerLinksProps","contentProps","promoBannerText","carouselProps","Carousel","next","previous","onIndicatorsClickHandler","hideIndicator","closeButton","slides","QuickOrderDrawer","_toggle","isManuallyToggled","collapseProps","drawerGlyphClass","toggleGlyphClassName","animateGlyph","drawerOpenGlyph","drawerCloseGlyph","drawerClass","toggleButtonProps","block","_generateDrawerButtonInnerMarkup","collapseState","drawerButtonTextClass","toggleButtonClassName","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","onToggle","QuickOrderFormComponent","productTextInput","quantityTextInput","quickOrderState","maxChars","disableAddtoCart","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","addQuantityPlaceholderText","handleQuantityChange","handleInputChange","handleAddToCartClick","onInputChange","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","maxLength","addToCartBtn","userMessage","QuickOrderProduct","simpleProduct","isSelected","QuickOrderDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderProductNumberText","quickOrderProductText","quickOrderUnitPriceText","quickOrderUnitOfMeasureText","quickOrderQuantityText","quickOrderTotalText","quickOrderActionsText","QuickOrderMobileHeaderCellsComponent","QuickOrderTableHeaderComponent","rowClassName","headerCells","QuickOrderTableRowProductImageComponent","_props$context$reques","_props$data$product$P","_props$imageSettings","fallbackImageUrl","getFallbackImageUrl","OmniChannelMedia","containerClassName","fallBackSrc","QuickOrderExtraActionsPopupComponent","QuickOrderDesktopTableRowCellComponent","_dimension$DimensionV","dimensionValue","quickOrderProductDimensionsSeparator","UnitOfMeasureSymbol","IncrementalQuantity","currentCount","quickOrderInputQuantityAriaLabel","quickOrderDecrementButtonAriaLabel","quickOrderIncrementButtonAriaLabel","isGiftCard","IsGiftCard","quickOrderRemoveItemButtonAriaLabel","QuickOrderMobileTableRowCellComponent","quickOrderQuantityMobileText","QuickOrderTableRowComponent","QuickOrderTableComponent","setIsMobile","isMobileView","quickOrderProducts","updateViewport","quickOrderProduct","QuickOrder","waitTime","dimensionUpdateQueue","FinitePromiseQueue","initializedDimensions","Set","cssClassNameConfigure","quickOrderCallbacks","initializeDimension","initializedDimension","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_handleInputChange","query","productText","productResponse","inputQuantityText","quantityInput","HTMLInputElement","cancellableDebounce","cancel","isQuickOrderFormExpanded","_debounce","getScanResult","GetScanResultInput","results","Product","ProductDimensionFull","_addItemToCart","quickOrderAddedToCartSuccessMessage","quickOrderAddedToCartFailureMessage","_validateCart","_this$props$context$a","defaultDeliveryOption","productAvailableQuantity","_updateAvailability","shouldValidateQuantityLimits","addProductToCartInput","availableQuantity","orderQuantityLimitsFeatureIsEnabled","isAddEmailDeliveryItemToCart","addProductToCart","inputProductText","maxQtyLimitReachedMessage","_getMaxQtyMessage","_result$errorDetails","_getConcatenatedMaxQtyMessage","quickOrderMaxQuantityLimitText","quickOrderAlreadyItemQuantityText","_handleQuantityChange","currentValue","inputElement","setAttribute","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_this$state$productRe","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","configureErrors","errorState","mappedDimensions","selectedProduct","reject","newProduct","getSelectedVariant","SelectedVariantInput","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","productAvailable","_getDimensionErrorString","dimensionTypeValue","quickOrderproductDimensionTypeColorErrorMessage","quickOrderproductDimensionTypeConfigurationErrorMessage","quickOrderproductDimensionTypeSizeErrorMessage","quickOrderproductDimensionTypeAmountErrorMessage","quickOrderproductDimensionTypeStyleErrorMessage","_updateProductAvailability","_productResponse$Dime","missingDimensions","_getConfigureErrors","quickOrderWrongQuantityErrorMsg","quickOrderOutofStockErrorMsg","quickOrderFormClass","quickOrderFormProductContent","quickOrderFormMsgContent","quickOrderModuleHeading","quickOrderModuleDescription","quickOrderAddtobag","quickOrderProductQuantityInputLabel","quickOrderProductInputLabel","quickOrderProductDimensionTypeColor","quickOrderProductDimensionTypeConfiguration","quickOrderSelectDimensionFormatString","quickOrderProductDimensionTypeSize","quickOrderProductDimensionTypeStyle","quickOrderProductDimensionTypeAmount","quickAddQuantityPlaceholderText","productConfigureResources","selectDimensionFormatString","quickOrderProps","isB2B","quickOrderForm","quickOrderList","_renderQuickOrderTable","configure","getProductConfigure","_initQuickOrderProducts","tableClassName","productInventoryInfo","_cart$result","maxQuantityForLineItem","addedQuantity","_item$ItemId","_this$state$productRe2","minInventory","renderConfigure","containerProps","dropdowns","renderConfigureDropdown","dropdown","labelContainerProps","select","renderForm","quickOrderProductContent","quickOrderMsgContent","tenantId","inputIsValid","serviceEndpoint","locale","sendRequest","userReviewData","headers","Authorization","authorization","SubmitUserReviewInput","onClickSubmit","ReviewModal","SubmitReview","submitButtonAttribute","cancelButtonAttribute","modal","modalCSS","classNames","onModalToggle","applicationNode","returnFocusRef","returnRef","modalHeader","modalHeaderNode","modalFooter","modalBody","discardReviewButtonText","submitButton","submitDisabled","submitReviewButtonText","ratingsInput","ratingLabel","ratingsLabel","titleInput","titleLabel","textInput","textLabel","privacyPolicyUrl","privacyPolicyLink","autoComplete","inputRow","errorMessageText","userReview","reviewId","editReviewModalTitle","writeReviewModalTitle","stripWhiteSpacesFromString","reviewText","reviewTitle","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","productName","userEmail","emailAddress","userName","token","getRnrAuthEndpointId","submitUserReview","review","submittedDateTime","helpfulPositive","helpfulNegative","firstName","getReviewInput","GetUserReviewInput","TOGGLE_REVIEW_MODAL_BUTTON_ID","TOGGLE_EDIT_MODAL_BUTTON_CARD_ID","HistogramItems","totalRatingsCount","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","stars","totalCount","percentage","formattedPercent","Intl","NumberFormat","barItemAriaLabel","Progress","AverageRatingNumber","summary","TotalReviews","RatingsHistogram","selectFilterBy","completeClass","hideCount","averageNumber","totalReviews","ratingsSummaryProps","filterKey","createRatingsReviewsStateInput","authToken","requestBody","concernCategory","requestHeader","isHelpful","ReviewConcernCategory","ReportReviewConcernInput","ReviewCount","currentPage","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","pairs","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","reportReviewConcern","getUserToken","_value","reportedReview","notification","selectedOption","skipItems","getSelectedProductIdFromActionInput","getReviewsForGivenProduct","GetProductReviewsInput","getRnrEndpointId","_updateVoteUi","alreadyExists","concat","submitHelpfulnessVote","showSpinner","reviewModal","reportReviewModal","filterByDropdown","LabeledDropdown","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","SearchState","SuggestionType","ProductListInventoryFilteringOptions","AutoSuggestInput","searchText","suggestionType","hitPrefix","hitSuffix","searchQuery","topResultsCount","_getAutoSuggest","autosuggest","_ctx$requestContext$a","productSearchCriteria","SearchCondition","Context","ChannelId","productListInventoryDisplay","HideOOS","inventoryRefinerValue","getInventorySortableRefinerValue","channelInventoryConfiguration","isInStock","ProductAvailabilitySortableAttributeRecordId","RefinerRecordId","DataTypeValue","AttributeDataType","TrueFalse","LeftValueBoundString","RightValueBoundString","UnitText","RowNumber","Count","RefinerSourceValue","ProductRefinerSource","Attribute","getInventoryConfigurationAsync","Refinement","searchCriteria","ProductSearchCriteria","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","Paging","Top","ImageUrl","generateImageUrl","AllSearchResults","autoSuggestPromises","all","CategorySuggestionsComponent","suggestions","autoSuggestProps","categorySuggestionHeading","_renderTitle","categoryAutoSuggestionHeading","shouldShowFullPath","splitValue","pop","_generateLink","_getHighlightedText","suggestion","_getCategoryLink","_categoryRefiners$Val","searchPageURL","searchQsp","searchRefiners","queryUrl","categoryRefiners","refiners","SourceValue","Category","refiner","Values","encodedRefiner","compressRefiners","formattedText","dangerouslySetInnerHTML","getRichTextHtml","compressedRefinerKeys","compressedRefiners","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","searchTextInput","disableSubmitSearch","handleCancelSearchChange","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","inputNode","submitBtnNode","cancelBtn","submitBtn","KeywordSuggestionsComponent","formattedLink","searchLabelClass","searchLabelArialLabel","isSearchFormExpanded","searchtext","searchCollapsedLabel","ProductSuggestionsComponent","productSuggestionHeading","productAutoSuggestionHeading","_item$Value","Value3","DecimalValue","thumbnail","_renderThumbnail","_renderPrice","LiProduct","_getLiWrapper","AProduct","_getAWrapper","recid","_props$resources","Search","_isLoadingNode","loadingText","autoSuggestResultLoadingMessage","Spinner","SpinnerSize","medium","labelPosition","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","formReference","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","createSearchStateInput","cancellabelDebounce","inputSuggestionType","_loadSuggestions","_handleSubmit","searchURL","_appendQueryParams","_handleCancelSearchChange","isInitialState","_handleCancelSearchFocused","qsp","_setAutoSuggestResultCount","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","autoSuggestAriaLabel","isLoadingAutoSuggest","searchInputMaxLength","searchFormClass","_initSuggestionTypes","_suggestions$AllSearc","_suggestions$AllSearc2","_suggestions$AllSearc3","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","shouldShowFullCategoryPath","keywordSuggestions","Keyword","productSuggestions","categorySuggestions","_item$RefinerRecordId","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","FormWrapper","UlKeyword","UlProduct","UlCategory","autosuggestKeyword","autosuggestProduct","autosuggestCategory","handleCancelSearchFocused","isLoadingNode","suggestionTypes","suggestionTypeCriterion","unique","validSuggestions","loadSuggestionsRequestId","getSearchSuggestionsAction","_getSuggestionType","_getSearchRefiners","Random","Guid","generateGuid","_getSearchSuggestions","_updateSearchRefiners","suggestionTypeItem","charAt","slice","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","SocialShareItem","_getSocialShareItem","viewprops","SocialShareItemElement","icon","socialMedia","SocialMediaComponent","SocialMedia","Facebook","postUrl","Twitter","Pinterest","Linkedin","Mail","SocialShareItemView","getAdditionalContentItems","additionalContentItemContainer","videoPlayerAdditionalContent","additionalContentItems","VideoPlayer","video","playerResources","playAriaLabel","playLabel","pauseAriaLabel","pauseLabel","playingAriaLabel","playingLabel","pausedAriaLabel","pausedLabel","muteAriaLabel","muteLabel","unMuteAriaLabel","unMuteLabel","fullScreenAriaLabel","fullScreenLabel","exitFullScreenAriaLabel","exitFullScreenLabel","seekBarLabel","videoTimeDurationLabel","closedCaptionLabel","videoMetaData","_video$_links","videoId","duration","playTime","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","player","Player","playerData","_getVideoDetailsHeading","_getVideoDetailsParagraph","_getVideoDetailsLinks","detailsContainerCTA","handleParagraph","handleLink","handleAdditionalLink","CartIconView","cartIconRef","_modalContainer","hideArrow","isModalOpen","closeModal","_openModal","_this$cartIconRef$cur","_renderCartCloseIcon","_renderCartItemCount","cartItemCount","totalItemsInCart","_escFunction","isAutoDisplayTriggered","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","miniCartWrapper","flyoutTitle","emptyCart","cartLineIndex","miniCartItemWrapper","storeLocation","promoContentItem","_props$data$cart$resu","totalPrice","emptyPrice","totalPriceFormatString","renderTotalPrice","_props$data$cart$resu2","subTotalMessage","renderSubtotalMessage","goToCartButton","continueShoppingButtonTitle","renderCartlines","CatalogLabelComponent","catalog","cartLineItemFunctions","renderProductDimensions","dimensionStrings","productDimension","_productDimension$Dim","_productDimension$Dim2","_productDimension$Dim3","_productDimension$Dim4","ProductDimensionType","Color","Configuration","Size","Style","renderProductUnitPrice","renderDiscountLines","_discountLine$OfferId","OfferId","isSalesLine","PeriodicDiscount","EffectiveAmount","Percentage","discountPercent","_discountLine$Percent","updatedPercent","DiscountLineTypeValue","DiscountLineType","TenderTypeDiscount","_discountLine$Effecti","effectiveAmount","renderInventoryLabel","inventoryCssName","renderShippingLabel","_cartline$ChargeLines","shippingChargeLines","ChargeLines","chargeLine","IsShipping","chargeTotal","_chargeLine$Calculate","CalculatedAmount","priceComponent","renderOtherCharges","_cartline$ChargeLines2","_otherCharges$map","chargeline","itemIndex","String","renderSalesAgreementPrompt","SalesAgreementLineRecordId","renderConfirmedShipDate","confirmedShipDate","confirmedShipDateLabel","renderRequestDeliveryDate","requestDeliveryDateLabel","msdyn365Commerce","createComponentOverride","component","_props$context$reques2","_props$primaryImageUr","destructDimensionStrings","productAttribute","imgeClassName","cartLineContentClassName","newValue","generateErrorMessage","renderUnitOfMeasure","unitOfMeasureDisplayType","DefaultUnitOfMeasure","NetAmountWithAllInclusiveTax","GrossAmount","ExtendedPrice","NetPrice","generateQuantityAndPrice","nodes","unitOfMeasure","_props$maxQuantity","_props$data$product$I","CartLinePriceEditor","deliveryLocation","getDefaultColorSwatchSelected","productData","_colorAttribute$swatc","_colorAttribute$swatc2","_colorAttribute$swatc3","attributeValues","colorAttribute","attributeValue","_attributeValue$keyNa","keyName","defaultSwatch","swatches","isDefault","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","baseUrl","renderProductUnitOfMeasure","renderLabel","ratingAriaLabelText","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","_context$app$config","contextConfig","placeholderImageName","fallbackImageSource","img","bypassHideOnFailure","ProductComponentV2","_product$name","_product$recordId","_getProductImageUrlFr","_getProductPageUrlFro","isEnabledProductDescription","inventoryLabel","swatchItemAriaLabel","recordId","MIN_VALUE","productImageUrlFromSwatch","dimensionToPreSelectInProductCard","productImageUrls","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","swatchValue","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","updatePageAndImageUrl","swatchItem","setValue","productPageUrlWithSwatch","newUrl","swatchProductImageUrl","newImageUrl","isUnitOfMeasureEnabled","defaultUnitOfMeasure","_item$keyName$toLocal","_item$keyName","_item$swatches$map","_item$swatches","shouldDisplayDimension","_item$recordId","_swatchItem$swatchVal","_swatchItem$swatchVal2","_dimensionAvailabilit","colorHexCode","swatchColorHexCode","swatchImageUrl","_swatchItem$swatchVal3","swatch","ProductComponentV2SwatchComponent","onSelectDimension","moduleTypeName","inventoryAvailabilityLabel","selectedDimensions","getValues","convertDimensionTypeToProductDimensionType","selectedProductId","renderQuickView","renderProductComparisonButton","_renderAccountDropdownLinks","DescriptionInterval","renderProductCards","productsContainer","getInventoryLabel","channelInventoryConfigurationId","inventoryAttribute","textValue","renderProductCardsDescription","_props$data$products$","_props$data$featureSt","breadCrumbType","isAllowBack","quickviewslot","quickView","isPriceMinMaxFeatureState","renderProducts","_data$products$result","_data$products$result2","listPageState","activeProducts","productDescriptionInterval","productDescriptionIntervalRemainder0","productDescriptionIntervalRemainder9","renderTitleCount","titleContainer","titleCount","configureStickyFilter","isStickyHeader","headerContainer","headerHeight","defaultContainer","refinerElement","createSearchResultModal","modalProps","refineMenu","sortByDropDown","isRecoSearchPage","createModalBody","renderSort","refineMenuContainer","refinerSectionContainer","submenu","renderRefinerMobile","renderRefiner","renderRefinerFooter","handler","doneAriaLabel","doneText","sortingContainer","renderTitle","titlePrefix","titleText","searchResultContainer","pagination","productSectionContainer","choiceSummary","searchResultModal","titleViewProps","categoryNavContainer","refineAndProductSectionContainer","featureSearchContainer","similarLookProduct","useStickyFilter","stickyFilterSetup","enableStickyHeader","setIsExpanded","wrapperRefiner","refinerRefernce","handleClickOutside","useOutsideClick","enableProdutDescription","filterText"],"sourceRoot":""}