{"version":3,"file":"static/js/9.a10dc5b8c20d957edbbe.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/freedom-header/components/logo.tsx?d857","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-header/components/nav-icon.tsx?8633","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-header/components/freedom-header-preferred-store.tsx?9b07","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-header/freedom-header.tsx?0910","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-header/freedom-header.view.tsx?2205","webpack://Msdyn365.Commerce.Online/./src/modules/hosports-b2b-header/components/logo.tsx?65af","webpack://Msdyn365.Commerce.Online/./src/modules/hosports-b2b-header/components/nav-icon.tsx?1b7b","webpack://Msdyn365.Commerce.Online/./src/modules/hosports-b2b-header/components/hosports-b2b-header-preferred-store.tsx?5754","webpack://Msdyn365.Commerce.Online/./src/modules/hosports-b2b-header/hosports-b2b-header.tsx?ef00","webpack://Msdyn365.Commerce.Online/./src/modules/hosports-b2b-header/hosports-b2b-header.view.tsx?ecad","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-header-2021/components/logo.tsx?7e67","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-header-2021/components/nav-icon.tsx?1eec","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-header-2021/components/liquid-header-2021-preferred-store.tsx?722e","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-header-2021/liquid-header-2021.tsx?e59d","webpack://Msdyn365.Commerce.Online/./src/modules/liquid-header-2021/liquid-header-2021.view.tsx?1e34","webpack://Msdyn365.Commerce.Online/./src/themes/absoluteoutdoors/views/components/cartlineitem.component.tsx?061a","webpack://Msdyn365.Commerce.Online/./src/themes/arborbb/views/components/cartlineitem.component.tsx?98ea","webpack://Msdyn365.Commerce.Online/./src/themes/connellyb2b/views/components/cartlineitem.component.tsx?a571","webpack://Msdyn365.Commerce.Online/./src/themes/hosports-b2b/views/components/cartlineitem.component.tsx?675c","webpack://Msdyn365.Commerce.Online/./src/themes/obrien23/views/components/cartlineitem.component.tsx?9b86","webpack://Msdyn365.Commerce.Online/./src/themes/obrienb2b/views/components/cartlineitem.component.tsx?e87e","webpack://Msdyn365.Commerce.Online/./src/themes/watersportdiscounts/views/components/cartlineitem.component.tsx?8247","webpack://Msdyn365.Commerce.Online/./src/modules/bulk-purchase/bulk-purchase.view.tsx?feac","webpack://Msdyn365.Commerce.Online/./src/modules/carousel/carousel.tsx?80d4","webpack://Msdyn365.Commerce.Online/./src/modules/carousel/carousel.view.tsx?d82f","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/components/promocode.component.tsx?d9d6","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.tsx?4ecb","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.view.tsx?a45e","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/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/adventureworks/views/components/buybox-add-to-order-template.tsx?ceb4","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/buybox.view.tsx?98cf","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/quickview.view.tsx?8e29","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/ratings-histogram.view.tsx?bb5b"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport interface ILogoProps {\r\n image: Msdyn365.IImageData;\r\n gridSettings?: Msdyn365.IGridSettings;\r\n link?: ILinkData;\r\n className?: string;\r\n telemetryContent?: ITelemetryContent;\r\n requestContext: Msdyn365.IRequestContext;\r\n}\r\n\r\nexport interface ILinkData {\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n linkText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * Logo component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class Logo extends React.PureComponent {\r\n\r\n private attributes?: Msdyn365.IDictionary;\r\n\r\n constructor(props: ILogoProps) {\r\n super(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\r\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n public render():JSX.Element {\r\n return(\r\n
\r\n {this._renderLogo(this.props)}\r\n
\r\n );\r\n }\r\n\r\n private _renderLogo(config: ILogoProps):JSX.Element {\r\n if(config.link && config.link.linkUrl.destinationUrl) {\r\n return(\r\n \r\n {this._renderImage(config)}\r\n \r\n );\r\n }\r\n return(\r\n this._renderImage(config)\r\n );\r\n }\r\n\r\n private _renderImage(config: ILogoProps): JSX.Element {\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=132&h=28&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=160&h=48&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Logo;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IFreedomHeaderResources } from '../freedom-header.props.autogenerated';\r\n\r\nexport interface INavIconProps {\r\n resources: IFreedomHeaderResources;\r\n isExpanded: boolean;\r\n targetId: string;\r\n telemetryContent?: ITelemetryContent;\r\n toggleNavBar(): void;\r\n}\r\n\r\n/**\r\n *\r\n * NavIcon component\r\n * @extends {React.PureComponent}\r\n */\r\n\r\n@observer\r\nexport class NavIcon extends React.Component {\r\n\r\n private attributes?: Msdyn365.IDictionary;\r\n\r\n constructor(props: INavIconProps) {\r\n super(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\r\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n\r\n public render():JSX.Element {\r\n return (\r\n \r\n );\r\n }\r\n}","import { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IFreedomHeaderData } from '../freedom-header.data';\r\nimport { IFreedomHeaderProps } from '../freedom-header.props.autogenerated';\r\n\r\n/**\r\n * The header preferred store component\r\n */\r\n@observer\r\nexport class HeaderPreferredStore extends React.PureComponent> {\r\n\r\n public handleClick = () => { return this._findPreferreStoreOnClick(this.props); };\r\n\r\n public render(): JSX.Element | undefined {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n slots,\r\n resources\r\n } = this.props;\r\n if (slots && slots.storeSelector && slots.storeSelector.length) {\r\n const storeName = storeSelectorStateManager!.preferredStore && storeSelectorStateManager!.preferredStore.StoreName ?\r\n storeSelectorStateManager!.preferredStore.StoreName :\r\n resources.headerPreferredStoreText;\r\n\r\n return (\r\n
\r\n \r\n {slots.storeSelector}\r\n
\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private async _findPreferreStoreOnClick(props: IFreedomHeaderProps): Promise {\r\n const { data: { storeSelectorStateManager: { result: storeSelectorStateManager } }, modules } = props;\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n storeSelectorStateManager.openDialog({\r\n id: storeSelectorId,\r\n showMapViewLink: false,\r\n onLocationSelected: orgUnitLocation => {\r\n return Promise.resolve();\r\n }\r\n }).catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.error(error.message);\r\n props.telemetry.debug('Unable to set preferred store');\r\n }\r\n return;\r\n });\r\n }\r\n}\r\n\r\nexport default HeaderPreferredStore;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport {\r\n Button, getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes, Modal,\r\n ModalBody, ModalHeader, onTelemetryClick, Popover, TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\r\nimport { IFreedomHeaderData } from './freedom-header.data';\r\nimport { IFreedomHeaderProps, IFreedomHeaderResources, IMyAccountLinksData } from './freedom-header.props.autogenerated';\r\n\r\nexport interface IHeaderState {\r\n mobileMenuCollapsed: boolean;\r\n signinPopoverOpen: boolean;\r\n}\r\n\r\nexport interface IHeaderViewProps extends IFreedomHeaderProps, IHeaderState {\r\n logo: React.ReactNode;\r\n wishListIconDesktop: React.ReactNode;\r\n wishListIconMobile: React.ReactNode;\r\n cartIcon: React.ReactNode;\r\n navIcon: React.ReactNode;\r\n className: string;\r\n menuBar: React.ReactNode[];\r\n search: React.ReactNode[];\r\n siteOptions: React.ReactNode[];\r\n HeaderTag: IModuleProps;\r\n HeaderContainer: INodeProps;\r\n MobileMenuContainer: INodeProps;\r\n MobileMenuHeader: React.ReactNode;\r\n MobileMenuBodyContainer: INodeProps;\r\n MobileMenuLinksContainer: INodeProps;\r\n HeaderTopBarContainer: INodeProps;\r\n Divider: INodeProps;\r\n\r\n AccountInfoDropdownParentContainer?: INodeProps;\r\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\r\n accountInfoDropdownButton?: React.ReactNode;\r\n\r\n signOutLink?: React.ReactNode;\r\n signInLink?: React.ReactNode;\r\n accountLinks?: React.ReactNode[];\r\n preferredStore?: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * Header component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass Header extends React.PureComponent, IHeaderState> {\r\n private popOverRef: React.RefObject;\r\n private telemetryContent: ITelemetryContent;\r\n @computed public get displayName(): Readonly {\r\n const customer = this.props.data.accountInformation?.result;\r\n return customer ? customer.FirstName || customer.Name : undefined;\r\n }\r\n\r\n constructor(props: IFreedomHeaderProps) {\r\n super(props);\r\n this.popOverRef = React.createRef();\r\n this._toggleNavbar = this._toggleNavbar.bind(this);\r\n this._togglePopover = this._togglePopover.bind(this);\r\n this._keydown = this._keydown.bind(this);\r\n this.state = {\r\n mobileMenuCollapsed: true,\r\n signinPopoverOpen: false\r\n };\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n window.addEventListener('keydown', this._keydown);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n window.removeEventListener('keydown', this._keydown, false);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: max-func-body-length\r\n public render(): JSX.Element | null {\r\n const {\r\n id,\r\n typeName,\r\n data: { accountInformation,\r\n cart: { result: cart },\r\n storeSelectorStateManager: {result: storeSelectorStateManager}\r\n },\r\n context: {\r\n request: {\r\n user\r\n }\r\n },\r\n context,\r\n resources: {\r\n cartLabel,\r\n cartQtyLabel\r\n }\r\n } = this.props;\r\n const { logoLink, logoImage } = this.props.config;\r\n const headerClassName = classnames('ms-header', this.props.config.className);\r\n const navbarKey = 'header-nav-mobile';\r\n const customer = accountInformation && accountInformation.result;\r\n const cartIconSlot = this._getSlot('cartIcon');\r\n const menuBarSlot = this._getSlot('freedomMenuBar');\r\n const searchSlot = this._getSlot('search');\r\n const siteOptionsSlot = this._getSlot('siteOptions');\r\n const preferredStoreSlot = this._getSlot('storeSelector');\r\n const viewProps: IHeaderViewProps = {\r\n ...(this.props as IFreedomHeaderProps),\r\n ...(this.state),\r\n logo: ,\r\n wishListIconDesktop: (\r\n \r\n ),\r\n wishListIconMobile: (\r\n \r\n ),\r\n cartIcon: (cartIconSlot && cartIconSlot.length > 0)\r\n ? cartIconSlot[0]\r\n : cart && ,\r\n navIcon: ,\r\n menuBar: menuBarSlot && menuBarSlot.length && menuBarSlot || [],\r\n search: searchSlot && searchSlot.length && searchSlot || [],\r\n siteOptions: siteOptionsSlot && siteOptionsSlot.length && siteOptionsSlot || [],\r\n className: headerClassName,\r\n HeaderTag: {\r\n moduleProps: this.props,\r\n className: classnames(headerClassName),\r\n tag: 'header'\r\n },\r\n HeaderContainer: {\r\n className: classnames('ms-header__container')\r\n },\r\n HeaderTopBarContainer: {\r\n className: classnames('ms-header__topbar freedom')\r\n },\r\n Divider: {\r\n className: classnames('ms-header__divider')\r\n },\r\n MobileMenuContainer: {\r\n tag: Modal,\r\n id: navbarKey,\r\n className: 'ms-header__mobile-hamburger',\r\n isOpen: !this.state.mobileMenuCollapsed,\r\n wrapClassName: 'ms-header__modal'\r\n },\r\n MobileMenuHeader: (\r\n \r\n ),\r\n MobileMenuBodyContainer: {\r\n tag: ModalBody,\r\n className: 'ms-header__mobile-hamburger-menu-body',\r\n },\r\n MobileMenuLinksContainer: {\r\n className: 'ms-header__mobile-hamburger-menu-links',\r\n },\r\n AccountInfoDropdownParentContainer: {\r\n className: 'ms-header__account-info'\r\n },\r\n AccountInfoDropdownPopoverConentContainer: customer && this.displayName && {\r\n tag: Popover,\r\n id: 'myprofilePopover',\r\n className: 'ms-header__account-info-content',\r\n placement: 'bottom',\r\n isOpen: this.state.signinPopoverOpen,\r\n target: this.popOverRef,\r\n toggle: this._togglePopover,\r\n } || undefined,\r\n signInLink: this._getSigninButton(customer, user, this.props.resources),\r\n signOutLink: this._getSignOutButton(customer, user, this.props.resources),\r\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(customer),\r\n accountLinks: this._getAccountLinks(customer),\r\n preferredStore: preferredStoreSlot\r\n && preferredStoreSlot.length\r\n && storeSelectorStateManager\r\n && ()\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /* Handle link text change*/\r\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent) => {\r\n if (this.props.config.myAccountLinks && this.props.config.myAccountLinks[linkIndex]) {\r\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\r\n }\r\n }\r\n\r\n private _getSlot(slotName: string): React.ReactNode[] | null {\r\n const { slots } = this.props;\r\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\r\n }\r\n\r\n private _getSigninButton(customer: Customer | undefined, user: MsDyn365.IRequestContextUser | undefined, resources: IFreedomHeaderResources): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return !customer && (\r\n \r\n {resources.signInLinkText}\r\n \r\n );\r\n }\r\n\r\n private _getSignOutButton(customer: Customer | undefined, user: MsDyn365.IRequestContextUser | undefined, resources: IFreedomHeaderResources): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return customer && this.displayName && (\r\n \r\n {resources.signOutLinkText}\r\n \r\n );\r\n }\r\n\r\n private _getAccountInfoDropdownButton(customer: Customer | undefined): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return customer && this.displayName && (\r\n \r\n {this.displayName}\r\n \r\n );\r\n }\r\n\r\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\r\n const { myAccountLinks } = this.props.config;\r\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\r\n if(!customer || ! this.displayName || !myAccountLinks || !myAccountLinks.length) {\r\n return undefined;\r\n }\r\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\r\n payLoad.contentAction.etext = cta.linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n const editableLink: MsDyn365.ILinksData = {\r\n ariaLabel: cta.ariaLabel,\r\n className: 'ms-signin-info__account-link-button',\r\n linkText: cta.linkText,\r\n linkUrl: cta.linkUrl.destinationUrl,\r\n openInNewTab: cta.openInNewTab,\r\n role: 'button',\r\n additionalProperties: attributes\r\n };\r\n\r\n return (\r\n \r\n );\r\n });\r\n }\r\n\r\n private _toggleNavbar(): void {\r\n this.setState({\r\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\r\n });\r\n }\r\n\r\n private _togglePopover(): void {\r\n this.setState({\r\n signinPopoverOpen: !this.state.signinPopoverOpen\r\n });\r\n }\r\n\r\n private _keydown(e: KeyboardEvent): void {\r\n if (e.keyCode === KeyCodes.Escape) {\r\n this.setState({ mobileMenuCollapsed: true });\r\n }\r\n }\r\n}\r\n\r\nexport default Header;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Collapse, Drawer, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport classnames from 'classnames';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { AsyncResult } from '@msdyn365-commerce/core';\r\nimport { IHeaderViewProps } from './freedom-header';\r\n\r\nconst headerView: React.FC = props => {\r\n const {\r\n HeaderTag,\r\n HeaderContainer,\r\n HeaderTopBarContainer,\r\n Divider\r\n } = props;\r\n return (\r\n \r\n \r\n \r\n\r\n {/* This is the area that is majorly revamped. Subtract components as needed. */}\r\n\r\n
\r\n {props.logo}\r\n {props.navIcon}\r\n \r\n
\r\n\r\n
\r\n {_renderReactFragment(props.menuBar)}\r\n
\r\n \r\n
\r\n {_renderReactFragment(props.search)}\r\n {_renderDesktopAccountBlock(props)}\r\n {props.wishListIconDesktop}\r\n \r\n {props.cartIcon}\r\n {_renderReactFragment(props.siteOptions)}\r\n
\r\n \r\n\r\n
\r\n {_renderCollapseMenu(props)}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nfunction _renderCollapseMenu(props: IHeaderViewProps): JSX.Element | null {\r\n const { MobileMenuLinksContainer, mobileMenuCollapsed } = props;\r\n return (\r\n \r\n \r\n {_renderReactFragment(props.menuBar)}\r\n {_renderReactFragment(props.search)}\r\n {_renderMobileAccountBlock(props, true)}\r\n {props.wishListIconMobile}\r\n \r\n\r\n\r\n \r\n );\r\n}\r\n\r\nconst renderCustomerName = (accountInformation: AsyncResult): React.ReactChild => {\r\n const customer = accountInformation && accountInformation.result;\r\n return (\r\n <>{customer && customer.FirstName}\r\n );\r\n};\r\n\r\nfunction _renderMobileAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\r\n const {\r\n AccountInfoDropdownParentContainer,\r\n signOutLink,\r\n signInLink,\r\n data,\r\n accountLinks } = props;\r\n\r\n if (AccountInfoDropdownParentContainer) {\r\n const accountClassName = classnames('ms-header__drawer', AccountInfoDropdownParentContainer.className, renderForMobile ? 'account-mobile' : 'account-desktop');\r\n\r\n if (accountLinks) {\r\n return (\r\n \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\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\r\n const {\r\n AccountInfoDropdownParentContainer,\r\n AccountInfoDropdownPopoverConentContainer,\r\n accountInfoDropdownButton,\r\n signOutLink,\r\n signInLink,\r\n accountLinks,\r\n } = props;\r\n\r\n if (AccountInfoDropdownParentContainer) {\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n \r\n {accountInfoDropdownButton}\r\n \r\n { accountLinks ? accountLinks.map(link => 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 props.context.telemetry.error('Header content is empty, module wont render.');\r\n return null;\r\n}\r\n\r\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\r\n return (\r\n \r\n {items && items.length\r\n ? items.map((slot: React.ReactNode, index: number) => {\r\n return {slot};\r\n })\r\n : null}\r\n \r\n );\r\n}\r\n\r\nexport default headerView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport interface ILogoProps {\r\n image: Msdyn365.IImageData;\r\n gridSettings?: Msdyn365.IGridSettings;\r\n link?: ILinkData;\r\n className?: string;\r\n telemetryContent?: ITelemetryContent;\r\n requestContext: Msdyn365.IRequestContext;\r\n}\r\n\r\nexport interface ILinkData {\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n linkText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * Logo component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class Logo extends React.PureComponent {\r\n\r\n private attributes?: Msdyn365.IDictionary;\r\n\r\n constructor(props: ILogoProps) {\r\n super(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\r\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n public render():JSX.Element {\r\n return(\r\n
\r\n {this._renderLogo(this.props)}\r\n
\r\n );\r\n }\r\n\r\n private _renderLogo(config: ILogoProps):JSX.Element {\r\n if(config.link && config.link.linkUrl.destinationUrl) {\r\n return(\r\n \r\n {this._renderImage(config)}\r\n \r\n );\r\n }\r\n return(\r\n this._renderImage(config)\r\n );\r\n }\r\n\r\n private _renderImage(config: ILogoProps): JSX.Element {\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=132&h=28&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=160&h=48&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Logo;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IHosportsB2bHeaderResources } from '../hosports-b2b-header.props.autogenerated';\r\n\r\nexport interface INavIconProps {\r\n resources: IHosportsB2bHeaderResources;\r\n isExpanded: boolean;\r\n targetId: string;\r\n telemetryContent?: ITelemetryContent;\r\n toggleNavBar(): void;\r\n}\r\n\r\n/**\r\n *\r\n * NavIcon component\r\n * @extends {React.PureComponent}\r\n */\r\n\r\n@observer\r\nexport class NavIcon extends React.Component {\r\n\r\n private attributes?: Msdyn365.IDictionary;\r\n\r\n constructor(props: INavIconProps) {\r\n super(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\r\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n\r\n public render():JSX.Element {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IHosportsB2BHeaderData } from '../hosports-b2b-header.data';\r\nimport { IHosportsB2bHeaderProps } from '../hosports-b2b-header.props.autogenerated';\r\n\r\n/**\r\n * The header preferred store component\r\n */\r\n@observer\r\nexport class HeaderPreferredStore extends React.PureComponent> {\r\n\r\n public handleClick = () => { return this._findPreferreStoreOnClick(this.props); };\r\n\r\n public render(): JSX.Element | undefined {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n slots,\r\n resources\r\n } = this.props;\r\n if (slots && slots.storeSelector && slots.storeSelector.length) {\r\n const storeName = storeSelectorStateManager!.preferredStore && storeSelectorStateManager!.preferredStore.StoreName ?\r\n storeSelectorStateManager!.preferredStore.StoreName :\r\n resources.headerPreferredStoreText;\r\n\r\n return (\r\n
\r\n \r\n {slots.storeSelector}\r\n
\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private async _findPreferreStoreOnClick(props: IHosportsB2bHeaderProps): Promise {\r\n const { data: { storeSelectorStateManager: { result: storeSelectorStateManager } }, modules } = props;\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n storeSelectorStateManager.openDialog({\r\n id: storeSelectorId,\r\n showMapViewLink: false,\r\n onLocationSelected: orgUnitLocation => {\r\n return Promise.resolve();\r\n }\r\n }).catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.error(error.message);\r\n props.telemetry.debug('Unable to set preferred store');\r\n }\r\n return;\r\n });\r\n }\r\n}\r\n\r\nexport default HeaderPreferredStore;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport {\r\n Button, getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes, Modal,\r\n ModalBody, ModalHeader, onTelemetryClick, Popover, TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\r\nimport { IHosportsB2BHeaderData } from './hosports-b2b-header.data';\r\nimport { IHosportsB2bHeaderProps, IHosportsB2bHeaderResources, IMyAccountLinksData } from './hosports-b2b-header.props.autogenerated';\r\n\r\nexport interface IHeaderState {\r\n mobileMenuCollapsed: boolean;\r\n signinPopoverOpen: boolean;\r\n}\r\n\r\nexport interface IHeaderViewProps extends IHosportsB2bHeaderProps, IHeaderState {\r\n logo: React.ReactNode;\r\n wishListIconDesktop: React.ReactNode;\r\n wishListIconMobile: React.ReactNode;\r\n cartIcon: React.ReactNode;\r\n navIcon: React.ReactNode;\r\n className: string;\r\n menuBar: React.ReactNode[];\r\n search: React.ReactNode[];\r\n siteOptions: React.ReactNode[];\r\n HeaderTag: IModuleProps;\r\n HeaderContainer: INodeProps;\r\n MobileMenuContainer: INodeProps;\r\n MobileMenuHeader: React.ReactNode;\r\n MobileMenuBodyContainer: INodeProps;\r\n MobileMenuLinksContainer: INodeProps;\r\n HeaderTopBarContainer: INodeProps;\r\n Divider: INodeProps;\r\n\r\n AccountInfoDropdownParentContainer?: INodeProps;\r\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\r\n accountInfoDropdownButton?: React.ReactNode;\r\n\r\n signOutLink?: React.ReactNode;\r\n signInLink?: React.ReactNode;\r\n accountLinks?: React.ReactNode[];\r\n preferredStore?: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * Header component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass Header extends React.PureComponent, IHeaderState> {\r\n private popOverRef: React.RefObject;\r\n private telemetryContent: ITelemetryContent;\r\n @computed public get displayName(): Readonly {\r\n const customer = this.props.data.accountInformation?.result;\r\n return customer ? customer.FirstName || customer.Name : undefined;\r\n }\r\n\r\n constructor(props: IHosportsB2bHeaderProps) {\r\n super(props);\r\n this.popOverRef = React.createRef();\r\n this._toggleNavbar = this._toggleNavbar.bind(this);\r\n this._togglePopover = this._togglePopover.bind(this);\r\n this._keydown = this._keydown.bind(this);\r\n this.state = {\r\n mobileMenuCollapsed: true,\r\n signinPopoverOpen: false\r\n };\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n window.addEventListener('keydown', this._keydown);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n window.removeEventListener('keydown', this._keydown, false);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: max-func-body-length\r\n public render(): JSX.Element | null {\r\n const {\r\n id,\r\n typeName,\r\n data: { accountInformation,\r\n cart: { result: cart },\r\n storeSelectorStateManager: {result: storeSelectorStateManager}\r\n },\r\n context: {\r\n request: {\r\n user\r\n }\r\n },\r\n context,\r\n resources: {\r\n cartLabel,\r\n cartQtyLabel\r\n }\r\n } = this.props;\r\n const { logoLink, logoImage } = this.props.config;\r\n const headerClassName = classnames('ms-header', this.props.config.className);\r\n const navbarKey = 'header-nav-mobile';\r\n const customer = accountInformation && accountInformation.result;\r\n const cartIconSlot = this._getSlot('cartIcon');\r\n const menuBarSlot = this._getSlot('baseMenuBar');\r\n const searchSlot = this._getSlot('search');\r\n const siteOptionsSlot = this._getSlot('siteOptions');\r\n const preferredStoreSlot = this._getSlot('storeSelector');\r\n const viewProps: IHeaderViewProps = {\r\n ...(this.props as IHosportsB2bHeaderProps),\r\n ...(this.state),\r\n logo: ,\r\n wishListIconDesktop: (\r\n \r\n ),\r\n wishListIconMobile: (\r\n \r\n ),\r\n cartIcon: (cartIconSlot && cartIconSlot.length > 0)\r\n ? cartIconSlot[0]\r\n : cart && ,\r\n navIcon: ,\r\n menuBar: menuBarSlot && menuBarSlot.length && menuBarSlot || [],\r\n search: searchSlot && searchSlot.length && searchSlot || [],\r\n siteOptions: siteOptionsSlot && siteOptionsSlot.length && siteOptionsSlot || [],\r\n className: headerClassName,\r\n HeaderTag: {\r\n moduleProps: this.props,\r\n className: classnames(headerClassName),\r\n tag: 'header'\r\n },\r\n HeaderContainer: {\r\n className: classnames('ms-header__container')\r\n },\r\n HeaderTopBarContainer: {\r\n className: classnames('inside-xxl always-flex justify')\r\n },\r\n Divider: {\r\n className: classnames('ms-header__divider')\r\n },\r\n MobileMenuContainer: {\r\n tag: Modal,\r\n id: navbarKey,\r\n className: 'ms-header__mobile-hamburger',\r\n isOpen: !this.state.mobileMenuCollapsed,\r\n wrapClassName: 'ms-header__modal'\r\n },\r\n MobileMenuHeader: (\r\n \r\n ),\r\n MobileMenuBodyContainer: {\r\n tag: ModalBody,\r\n className: 'ms-header__mobile-hamburger-menu-body',\r\n },\r\n MobileMenuLinksContainer: {\r\n className: 'ms-header__mobile-hamburger-menu-links',\r\n },\r\n AccountInfoDropdownParentContainer: {\r\n className: 'ms-header__account-info'\r\n },\r\n AccountInfoDropdownPopoverConentContainer: customer && this.displayName && {\r\n tag: Popover,\r\n id: 'myprofilePopover',\r\n className: 'ms-header__account-info-content',\r\n placement: 'bottom',\r\n isOpen: this.state.signinPopoverOpen,\r\n target: this.popOverRef,\r\n toggle: this._togglePopover,\r\n } || undefined,\r\n signInLink: this._getSigninButton(customer, user, this.props.resources),\r\n signOutLink: this._getSignOutButton(customer, user, this.props.resources),\r\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(customer),\r\n accountLinks: this._getAccountLinks(customer),\r\n preferredStore: preferredStoreSlot\r\n && preferredStoreSlot.length\r\n && storeSelectorStateManager\r\n && ()\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /* Handle link text change*/\r\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent) => {\r\n if (this.props.config.myAccountLinks && this.props.config.myAccountLinks[linkIndex]) {\r\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\r\n }\r\n }\r\n\r\n private _getSlot(slotName: string): React.ReactNode[] | null {\r\n const { slots } = this.props;\r\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\r\n }\r\n\r\n private _getSigninButton(customer: Customer | undefined, user: MsDyn365.IRequestContextUser | undefined, resources: IHosportsB2bHeaderResources): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return !customer && (\r\n \r\n {resources.signInLinkText}\r\n \r\n );\r\n }\r\n\r\n private _getSignOutButton(customer: Customer | undefined, user: MsDyn365.IRequestContextUser | undefined, resources: IHosportsB2bHeaderResources): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return customer && this.displayName && (\r\n \r\n {resources.signOutLinkText}\r\n \r\n );\r\n }\r\n\r\n private _getAccountInfoDropdownButton(customer: Customer | undefined): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return customer && this.displayName && (\r\n \r\n {this.displayName}\r\n \r\n );\r\n }\r\n\r\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\r\n const { myAccountLinks } = this.props.config;\r\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\r\n if(!customer || ! this.displayName || !myAccountLinks || !myAccountLinks.length) {\r\n return undefined;\r\n }\r\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\r\n payLoad.contentAction.etext = cta.linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n const editableLink: MsDyn365.ILinksData = {\r\n ariaLabel: cta.ariaLabel,\r\n className: 'ms-signin-info__account-link-button',\r\n linkText: cta.linkText,\r\n linkUrl: cta.linkUrl.destinationUrl,\r\n openInNewTab: cta.openInNewTab,\r\n role: 'button',\r\n additionalProperties: attributes\r\n };\r\n\r\n return (\r\n \r\n );\r\n });\r\n }\r\n\r\n private _toggleNavbar(): void {\r\n this.setState({\r\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\r\n });\r\n }\r\n\r\n private _togglePopover(): void {\r\n this.setState({\r\n signinPopoverOpen: !this.state.signinPopoverOpen\r\n });\r\n }\r\n\r\n private _keydown(e: KeyboardEvent): void {\r\n if (e.keyCode === KeyCodes.Escape) {\r\n this.setState({ mobileMenuCollapsed: true });\r\n }\r\n }\r\n}\r\n\r\nexport default Header;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Collapse, Drawer, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport classnames from 'classnames';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { AsyncResult } from '@msdyn365-commerce/core';\r\nimport { IHeaderViewProps } from './hosports-b2b-header';\r\n\r\nconst headerView: React.FC = props => {\r\n const {\r\n HeaderTag,\r\n HeaderContainer,\r\n HeaderTopBarContainer,\r\n Divider\r\n } = props;\r\n return (\r\n \r\n \r\n \r\n\r\n {/* This is the area that is majorly revamped. Subtract components as needed. */}\r\n\r\n
\r\n {props.logo}\r\n {props.navIcon}\r\n\r\n
\r\n\r\n
\r\n {_renderReactFragment(props.menuBar)}\r\n
\r\n\r\n
\r\n {_renderReactFragment(props.search)}\r\n {_renderDesktopAccountBlock(props)}\r\n {props.wishListIconDesktop}\r\n \r\n {props.cartIcon}\r\n {_renderReactFragment(props.siteOptions)}\r\n
\r\n\r\n\r\n
\r\n {_renderCollapseMenu(props)}\r\n\r\n
\r\n
\r\n );\r\n};\r\n\r\nfunction _renderCollapseMenu(props: IHeaderViewProps): JSX.Element | null {\r\n const { MobileMenuLinksContainer, mobileMenuCollapsed } = props;\r\n return (\r\n \r\n \r\n {_renderReactFragment(props.menuBar)}\r\n {_renderReactFragment(props.search)}\r\n {_renderMobileAccountBlock(props, true)}\r\n {props.wishListIconMobile}\r\n \r\n\r\n\r\n \r\n );\r\n}\r\n\r\nconst renderCustomerName = (accountInformation: AsyncResult): React.ReactChild => {\r\n const customer = accountInformation && accountInformation.result;\r\n return (\r\n <>{customer && customer.FirstName}\r\n );\r\n};\r\n\r\nfunction _renderMobileAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\r\n const {\r\n AccountInfoDropdownParentContainer,\r\n signOutLink,\r\n signInLink,\r\n data,\r\n accountLinks } = props;\r\n\r\n if (AccountInfoDropdownParentContainer) {\r\n const accountClassName = classnames('ms-header__drawer', AccountInfoDropdownParentContainer.className, renderForMobile ? 'account-mobile' : 'account-desktop');\r\n\r\n if (accountLinks) {\r\n return (\r\n \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\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\r\n const {\r\n AccountInfoDropdownParentContainer,\r\n AccountInfoDropdownPopoverConentContainer,\r\n accountInfoDropdownButton,\r\n signOutLink,\r\n signInLink,\r\n accountLinks,\r\n } = props;\r\n\r\n if (AccountInfoDropdownParentContainer) {\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n \r\n {accountInfoDropdownButton}\r\n \r\n { accountLinks ? accountLinks.map(link => 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 props.context.telemetry.error('Header content is empty, module wont render.');\r\n return null;\r\n}\r\n\r\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\r\n return (\r\n \r\n {items && items.length\r\n ? items.map((slot: React.ReactNode, index: number) => {\r\n return {slot};\r\n })\r\n : null}\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 * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport interface ILogoProps {\r\n image: Msdyn365.IImageData;\r\n gridSettings?: Msdyn365.IGridSettings;\r\n link?: ILinkData;\r\n className?: string;\r\n telemetryContent?: ITelemetryContent;\r\n requestContext: Msdyn365.IRequestContext;\r\n}\r\n\r\nexport interface ILinkData {\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n linkText?: string;\r\n}\r\n\r\n/**\r\n *\r\n * Logo component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class Logo extends React.PureComponent {\r\n\r\n private attributes?: Msdyn365.IDictionary;\r\n\r\n constructor(props: ILogoProps) {\r\n super(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\r\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n public render():JSX.Element {\r\n return(\r\n
\r\n {this._renderLogo(this.props)}\r\n
\r\n );\r\n }\r\n\r\n private _renderLogo(config: ILogoProps):JSX.Element {\r\n if(config.link && config.link.linkUrl.destinationUrl) {\r\n return(\r\n \r\n {this._renderImage(config)}\r\n \r\n );\r\n }\r\n return(\r\n this._renderImage(config)\r\n );\r\n }\r\n\r\n private _renderImage(config: ILogoProps): JSX.Element {\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=132&h=28&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=160&h=48&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Logo;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { ILiquidHeader2021Resources } from '../liquid-header-2021.props.autogenerated';\r\n\r\nexport interface INavIconProps {\r\n resources: ILiquidHeader2021Resources;\r\n isExpanded: boolean;\r\n targetId: string;\r\n telemetryContent?: ITelemetryContent;\r\n toggleNavBar(): void;\r\n}\r\n\r\n/**\r\n *\r\n * NavIcon component\r\n * @extends {React.PureComponent}\r\n */\r\n\r\n@observer\r\nexport class NavIcon extends React.Component {\r\n\r\n private attributes?: Msdyn365.IDictionary;\r\n\r\n constructor(props: INavIconProps) {\r\n super(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\r\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n\r\n public render():JSX.Element {\r\n return (\r\n \r\n );\r\n }\r\n}","import { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { ILiquidHeader2021Data } from '../liquid-header-2021.data';\r\nimport { ILiquidHeader2021Props } from '../liquid-header-2021.props.autogenerated';\r\n\r\n/**\r\n * The header preferred store component\r\n */\r\n@observer\r\nexport class HeaderPreferredStore extends React.PureComponent> {\r\n\r\n public handleClick = () => { return this._findPreferreStoreOnClick(this.props); };\r\n\r\n public render(): JSX.Element | undefined {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n slots,\r\n resources\r\n } = this.props;\r\n if (slots && slots.storeSelector && slots.storeSelector.length) {\r\n const storeName = storeSelectorStateManager!.preferredStore && storeSelectorStateManager!.preferredStore.StoreName ?\r\n storeSelectorStateManager!.preferredStore.StoreName :\r\n resources.headerPreferredStoreText;\r\n\r\n return (\r\n
\r\n \r\n {slots.storeSelector}\r\n
\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private async _findPreferreStoreOnClick(props: ILiquidHeader2021Props): Promise {\r\n const { data: { storeSelectorStateManager: { result: storeSelectorStateManager } }, modules } = props;\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n storeSelectorStateManager.openDialog({\r\n id: storeSelectorId,\r\n showMapViewLink: false,\r\n onLocationSelected: orgUnitLocation => {\r\n return Promise.resolve();\r\n }\r\n }).catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.error(error.message);\r\n props.telemetry.debug('Unable to set preferred store');\r\n }\r\n return;\r\n });\r\n }\r\n}\r\n\r\nexport default HeaderPreferredStore;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport {\r\n Button, getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes, Modal,\r\n ModalBody, ModalHeader, onTelemetryClick, Popover, TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\r\nimport { ILiquidHeader2021Data } from './liquid-header-2021.data';\r\nimport { ILiquidHeader2021Props, ILiquidHeader2021Resources, IMyAccountLinksData } from './liquid-header-2021.props.autogenerated';\r\n\r\nexport interface IHeaderState {\r\n mobileMenuCollapsed: boolean;\r\n signinPopoverOpen: boolean;\r\n}\r\n\r\nexport interface IHeaderViewProps extends ILiquidHeader2021Props, IHeaderState {\r\n logo: React.ReactNode;\r\n wishListIconDesktop: React.ReactNode;\r\n wishListIconMobile: React.ReactNode;\r\n cartIcon: React.ReactNode;\r\n navIcon: React.ReactNode;\r\n className: string;\r\n menuBar: React.ReactNode[];\r\n search: React.ReactNode[];\r\n siteOptions: React.ReactNode[];\r\n HeaderTag: IModuleProps;\r\n HeaderContainer: INodeProps;\r\n MobileMenuContainer: INodeProps;\r\n MobileMenuHeader: React.ReactNode;\r\n MobileMenuBodyContainer: INodeProps;\r\n MobileMenuLinksContainer: INodeProps;\r\n HeaderTopBarContainer: INodeProps;\r\n Divider: INodeProps;\r\n\r\n AccountInfoDropdownParentContainer?: INodeProps;\r\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\r\n accountInfoDropdownButton?: React.ReactNode;\r\n\r\n signOutLink?: React.ReactNode;\r\n signInLink?: React.ReactNode;\r\n accountLinks?: React.ReactNode[];\r\n preferredStore?: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * Header component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass Header extends React.PureComponent, IHeaderState> {\r\n private popOverRef: React.RefObject;\r\n private telemetryContent: ITelemetryContent;\r\n @computed public get displayName(): Readonly {\r\n const customer = this.props.data.accountInformation?.result;\r\n return customer ? customer.FirstName || customer.Name : undefined;\r\n }\r\n\r\n constructor(props: ILiquidHeader2021Props) {\r\n super(props);\r\n this.popOverRef = React.createRef();\r\n this._toggleNavbar = this._toggleNavbar.bind(this);\r\n this._togglePopover = this._togglePopover.bind(this);\r\n this._keydown = this._keydown.bind(this);\r\n this.state = {\r\n mobileMenuCollapsed: true,\r\n signinPopoverOpen: false\r\n };\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n window.addEventListener('keydown', this._keydown);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.msdyn365Commerce.isBrowser) {\r\n window.removeEventListener('keydown', this._keydown, false);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: max-func-body-length\r\n public render(): JSX.Element | null {\r\n const {\r\n id,\r\n typeName,\r\n data: { accountInformation,\r\n cart: { result: cart },\r\n storeSelectorStateManager: {result: storeSelectorStateManager}\r\n },\r\n context: {\r\n request: {\r\n user\r\n }\r\n },\r\n context,\r\n resources: {\r\n cartLabel,\r\n cartQtyLabel\r\n }\r\n } = this.props;\r\n const { logoLink, logoImage } = this.props.config;\r\n const headerClassName = classnames('ms-header', this.props.config.className);\r\n const navbarKey = 'header-nav-mobile';\r\n const customer = accountInformation && accountInformation.result;\r\n const cartIconSlot = this._getSlot('cartIcon');\r\n const menuBarSlot = this._getSlot('liquidMenuBar');\r\n const searchSlot = this._getSlot('search');\r\n const siteOptionsSlot = this._getSlot('siteOptions');\r\n const preferredStoreSlot = this._getSlot('storeSelector');\r\n const viewProps: IHeaderViewProps = {\r\n ...(this.props as ILiquidHeader2021Props),\r\n ...(this.state),\r\n logo: ,\r\n wishListIconDesktop: (\r\n \r\n ),\r\n wishListIconMobile: (\r\n \r\n ),\r\n cartIcon: (cartIconSlot && cartIconSlot.length > 0)\r\n ? cartIconSlot[0]\r\n : cart && ,\r\n navIcon: ,\r\n menuBar: menuBarSlot && menuBarSlot.length && menuBarSlot || [],\r\n search: searchSlot && searchSlot.length && searchSlot || [],\r\n siteOptions: siteOptionsSlot && siteOptionsSlot.length && siteOptionsSlot || [],\r\n className: headerClassName,\r\n HeaderTag: {\r\n moduleProps: this.props,\r\n className: classnames(headerClassName),\r\n tag: 'header'\r\n },\r\n HeaderContainer: {\r\n className: classnames('ms-header__container')\r\n },\r\n HeaderTopBarContainer: {\r\n className: classnames('ms-header__topbar liquid')\r\n },\r\n Divider: {\r\n className: classnames('ms-header__divider')\r\n },\r\n MobileMenuContainer: {\r\n tag: Modal,\r\n id: navbarKey,\r\n className: 'ms-header__mobile-hamburger',\r\n isOpen: !this.state.mobileMenuCollapsed,\r\n wrapClassName: 'ms-header__modal'\r\n },\r\n MobileMenuHeader: (\r\n \r\n ),\r\n MobileMenuBodyContainer: {\r\n tag: ModalBody,\r\n className: 'ms-header__mobile-hamburger-menu-body',\r\n },\r\n MobileMenuLinksContainer: {\r\n className: 'ms-header__mobile-hamburger-menu-links',\r\n },\r\n AccountInfoDropdownParentContainer: {\r\n className: 'ms-header__account-info'\r\n },\r\n AccountInfoDropdownPopoverConentContainer: customer && this.displayName && {\r\n tag: Popover,\r\n id: 'myprofilePopover',\r\n className: 'ms-header__account-info-content',\r\n placement: 'bottom',\r\n isOpen: this.state.signinPopoverOpen,\r\n target: this.popOverRef,\r\n toggle: this._togglePopover,\r\n } || undefined,\r\n signInLink: this._getSigninButton(customer, user, this.props.resources),\r\n signOutLink: this._getSignOutButton(customer, user, this.props.resources),\r\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(customer),\r\n accountLinks: this._getAccountLinks(customer),\r\n preferredStore: preferredStoreSlot\r\n && preferredStoreSlot.length\r\n && storeSelectorStateManager\r\n && ()\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /* Handle link text change*/\r\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent) => {\r\n if (this.props.config.myAccountLinks && this.props.config.myAccountLinks[linkIndex]) {\r\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\r\n }\r\n }\r\n\r\n private _getSlot(slotName: string): React.ReactNode[] | null {\r\n const { slots } = this.props;\r\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\r\n }\r\n\r\n private _getSigninButton(customer: Customer | undefined, user: MsDyn365.IRequestContextUser | undefined, resources: ILiquidHeader2021Resources): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return !customer && (\r\n \r\n {resources.signInLinkText}\r\n \r\n );\r\n }\r\n\r\n private _getSignOutButton(customer: Customer | undefined, user: MsDyn365.IRequestContextUser | undefined, resources: ILiquidHeader2021Resources): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return customer && this.displayName && (\r\n \r\n {resources.signOutLinkText}\r\n \r\n );\r\n }\r\n\r\n private _getAccountInfoDropdownButton(customer: Customer | undefined): React.ReactNode | undefined {\r\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n return customer && this.displayName && (\r\n \r\n {this.displayName}\r\n \r\n );\r\n }\r\n\r\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\r\n const { myAccountLinks } = this.props.config;\r\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\r\n if(!customer || ! this.displayName || !myAccountLinks || !myAccountLinks.length) {\r\n return undefined;\r\n }\r\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\r\n payLoad.contentAction.etext = cta.linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\r\n const editableLink: MsDyn365.ILinksData = {\r\n ariaLabel: cta.ariaLabel,\r\n className: 'ms-signin-info__account-link-button',\r\n linkText: cta.linkText,\r\n linkUrl: cta.linkUrl.destinationUrl,\r\n openInNewTab: cta.openInNewTab,\r\n role: 'button',\r\n additionalProperties: attributes\r\n };\r\n\r\n return (\r\n \r\n );\r\n });\r\n }\r\n\r\n private _toggleNavbar(): void {\r\n this.setState({\r\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\r\n });\r\n }\r\n\r\n private _togglePopover(): void {\r\n this.setState({\r\n signinPopoverOpen: !this.state.signinPopoverOpen\r\n });\r\n }\r\n\r\n private _keydown(e: KeyboardEvent): void {\r\n if (e.keyCode === KeyCodes.Escape) {\r\n this.setState({ mobileMenuCollapsed: true });\r\n }\r\n }\r\n}\r\n\r\nexport default Header;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Collapse, Drawer, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport classnames from 'classnames';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { AsyncResult } from '@msdyn365-commerce/core';\r\nimport { IHeaderViewProps } from './liquid-header-2021';\r\n\r\nconst headerView: React.FC = props => {\r\n const {\r\n HeaderTag,\r\n HeaderContainer,\r\n HeaderTopBarContainer,\r\n Divider\r\n } = props;\r\n return (\r\n \r\n \r\n \r\n\r\n {/* This is the area that is majorly revamped. Subtract components as needed. */}\r\n\r\n
\r\n {props.logo}\r\n {props.navIcon}\r\n \r\n
\r\n\r\n
\r\n {_renderReactFragment(props.menuBar)}\r\n
\r\n \r\n
\r\n {_renderReactFragment(props.search)}\r\n {_renderDesktopAccountBlock(props)}\r\n {props.wishListIconDesktop}\r\n \r\n {props.cartIcon}\r\n {_renderReactFragment(props.siteOptions)}\r\n
\r\n \r\n\r\n
\r\n {_renderCollapseMenu(props)}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nfunction _renderCollapseMenu(props: IHeaderViewProps): JSX.Element | null {\r\n const { MobileMenuLinksContainer, mobileMenuCollapsed } = props;\r\n return (\r\n \r\n \r\n {_renderReactFragment(props.menuBar)}\r\n {_renderReactFragment(props.search)}\r\n {_renderMobileAccountBlock(props, true)}\r\n {props.wishListIconMobile}\r\n \r\n\r\n\r\n \r\n );\r\n}\r\n\r\nconst renderCustomerName = (accountInformation: AsyncResult): React.ReactChild => {\r\n const customer = accountInformation && accountInformation.result;\r\n return (\r\n <>{customer && customer.FirstName}\r\n );\r\n};\r\n\r\nfunction _renderMobileAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\r\n const {\r\n AccountInfoDropdownParentContainer,\r\n signOutLink,\r\n signInLink,\r\n data,\r\n accountLinks } = props;\r\n\r\n if (AccountInfoDropdownParentContainer) {\r\n const accountClassName = classnames('ms-header__drawer', AccountInfoDropdownParentContainer.className, renderForMobile ? 'account-mobile' : 'account-desktop');\r\n\r\n if (accountLinks) {\r\n return (\r\n \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\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\r\n const {\r\n AccountInfoDropdownParentContainer,\r\n AccountInfoDropdownPopoverConentContainer,\r\n accountInfoDropdownButton,\r\n signOutLink,\r\n signInLink,\r\n accountLinks,\r\n } = props;\r\n\r\n if (AccountInfoDropdownParentContainer) {\r\n if (AccountInfoDropdownPopoverConentContainer) {\r\n return (\r\n \r\n {accountInfoDropdownButton}\r\n \r\n { accountLinks ? accountLinks.map(link => 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 props.context.telemetry.error('Header content is empty, module wont render.');\r\n return null;\r\n}\r\n\r\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\r\n return (\r\n \r\n {items && items.length\r\n ? items.map((slot: React.ReactNode, index: number) => {\r\n return {slot};\r\n })\r\n : null}\r\n \r\n );\r\n}\r\n\r\nexport default headerView;","/*--------------------------------------------------------------\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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { ChannelDeliveryOptionConfiguration, ProductDimensionType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, DiscountLine, DiscountLineType, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n\r\n /** Display string for discount label. */\r\n discountStringText: string;\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n\r\n /** Display string for quantity label. */\r\n quantityDisplayString: string;\r\n\r\n /** Display string for quantity label. */\r\n inputQuantityAriaLabel: string;\r\n\r\n /** Aria label for the decrement button in quantity component. */\r\n decrementButtonAriaLabel: string;\r\n\r\n /** Aria label for the increment button in quantity component. */\r\n incrementButtonAriaLabel: string;\r\n\r\n /** Original text screenreader. */\r\n originalPriceText: string;\r\n\r\n /** Current text screenreader. */\r\n currentPriceText: string;\r\n\r\n /** Shipping Charges Text. */\r\n shippingChargesText: string;\r\n}\r\n\r\n/**\r\n * Represents cart line data interface.\r\n */\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n\r\n /** The flag to change the quantity component from interactible to static. */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /** The primary image url. */\r\n primaryImageUrl?: string;\r\n\r\n /** The product url. */\r\n productUrl?: string;\r\n\r\n /** GridSettings for the product image in cartLine. */\r\n gridSettings: IGridSettings;\r\n\r\n /** ImageSettings for the product image in cartLine. */\r\n imageSettings: IImageSettings;\r\n\r\n /** Boolean flag to indicate if the item is out of stock. */\r\n isOutOfStock?: boolean;\r\n\r\n /** Flag to make quantity section editable. */\r\n isQuantityEditable?: boolean;\r\n\r\n /** Max quantity for line item. */\r\n maxQuantity?: number;\r\n\r\n /** Current quantity for line item. */\r\n currentQuantity?: number;\r\n\r\n /** Resource string for the component. */\r\n resources: ICartlineResourceString;\r\n\r\n /** SalesLine flag. */\r\n isSalesLine?: boolean;\r\n\r\n /** Error message to show in place of quantity. */\r\n errorMessage?: string;\r\n\r\n /** Inventory information label. */\r\n inventoryInformationLabel?: string;\r\n\r\n /** Inventory information class name. */\r\n inventoryLabelClassName?: string;\r\n\r\n /** Flag to show/hide shipping charges for line items. */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /** Boolean flag to indicate if cart state status is ready. */\r\n isCartStateReady?: boolean;\r\n\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /** The telemetry content. */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /** Quantity onChange callback. */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\r\n}\r\n\r\n/**\r\n * Represents dimensions strings.\r\n */\r\ninterface IDimensionStrings {\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n}\r\n\r\nconst cartLineItemFunctions = {\r\n\r\n /**\r\n * Render product dimensions.\r\n * @param product - Product data.\r\n * @param dimensionStrings - Dimension strings interface.\r\n * @returns JSX Element.\r\n */\r\n renderProductDimensions: (product: SimpleProduct, dimensionStrings: IDimensionStrings) => {\r\n if (!product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Color) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.colorString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Configuration) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.configString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Size) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.sizeString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Style) {\r\n return (\r\n
\r\n \r\n {product.IsGiftCard ? dimensionStrings.amountString : dimensionStrings.styleString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of price display.\r\n * @param props - The cart line props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderProductUnitPrice: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.Price) {\r\n return null;\r\n }\r\n const zeroQuantity: number = 0;\r\n return (\r\n
\r\n \r\n zeroQuantity ? {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n } : {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n }}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n />\r\n \r\n
\r\n );\r\n },\r\n\r\n /**\r\n * Render discount lines.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || !ArrayExtensions.hasElements(props.data.cartLine.DiscountLines)) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the updated discount percentage.\r\n * @param discountLine - The discount line.\r\n * @param cartLine - The cart line.\r\n * @returns The updated discount percentage.\r\n */\r\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\r\n const numberZero = 0;\r\n const decimalPrecision = 2;\r\n const fullPercentage = 100;\r\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\r\n\r\n if ((discountLine.Percentage === numberZero ||\r\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\r\n cartLine.Price && cartLine.Price > numberZero && cartLine.Quantity && cartLine.Quantity !== numberZero) {\r\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\r\n updatedPercent = Number(((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision));\r\n }\r\n\r\n return updatedPercent;\r\n };\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''}%)`}\r\n \r\n
\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * Render inventory label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n const inventoryCssName = props.inventoryLabelClassName ? `msc-cart-line__product-inventory-label ${\r\n props.inventoryLabelClassName}` : 'msc-cart-line__product-inventory-label';\r\n\r\n return (\r\n

\r\n {props.inventoryInformationLabel}\r\n

\r\n );\r\n },\r\n\r\n /**\r\n * Render shipping label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(cartline.DeliveryMode && channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(\r\n deliveryMode => deliveryMode !== cartline.DeliveryMode));\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines ?? []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (!ArrayExtensions.hasElements(shippingChargeLines)) {\r\n return undefined;\r\n }\r\n\r\n const defaultCharge: number = 0;\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount ?? defaultCharge);\r\n }, defaultCharge);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {priceComponent}\r\n \r\n \r\n );\r\n },\r\n\r\n /**\r\n * Render other charges.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter((chargeline) => !chargeline.IsShipping);\r\n\r\n return otherCharges?.map((otherCharge, index) => {\r\n const itemIndex = index;\r\n return otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : '';\r\n }) ?? undefined;\r\n }\r\n};\r\n\r\n/**\r\n * Render cartline component.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { \r\n product, \r\n // update to get rid of weird description flash\r\n //cartLine \r\n } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = product && cartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderProductUnitPrice = cartLineItemFunctions.renderProductUnitPrice(props);\r\n const imageSettings = props.imageSettings;\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n const renderDiscountLines = cartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = cartLineItemFunctions.renderInventoryLabel(props);\r\n const renderShippingLabel = cartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = cartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n // update to get rid of weird description flash\r\n //const productName = product?.Name ?? cartLine.Description;\r\n const productName = product?.Name;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n /**\r\n * Render other charges.\r\n * @param newValue - The cart line props.\r\n * @returns Boolean.\r\n */\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n return props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n return true;\r\n };\r\n\r\n /**\r\n * Generate error message.\r\n * @returns JSX element.\r\n */\r\n const generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n \r\n {props.errorMessage}\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Render Saving component.\r\n * @returns JSX element.\r\n */\r\n const renderSaving = (): JSX.Element | null => {\r\n\r\n if (!props.data.cartLine.DiscountAmount) {\r\n return null;\r\n }\r\n const discountAmountZero: number = 0;\r\n\r\n if (props.data.cartLine.DiscountAmount > discountAmountZero) {\r\n return (\r\n <>\r\n \r\n {`${props.resources.discountStringText || 'Discount'}`}\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n const renderUnitOfMeasure = () => {\r\n\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\r\n return undefined;\r\n }\r\n\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {product.DefaultUnitOfMeasure}\r\n \r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Generate quantity and price component.\r\n * @returns JSX element.\r\n */\r\n const generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n const defaultMaxQuantity: number = 10;\r\n const singleQuantity: number = 1;\r\n const unitOfMeasure = renderUnitOfMeasure();\r\n\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.data.product && props.isQuantityEditable) {\r\n nodes.push(\r\n
\r\n
\r\n {resources.quantityDisplayString}\r\n
\r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {unitOfMeasure}\r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n {unitOfMeasure}\r\n \r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {props.data.cartLine.Quantity}\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n {\r\n renderSaving()\r\n }\r\n {props.isOutOfStock ? renderInventoryLabel : null}\r\n
\r\n );\r\n return nodes;\r\n };\r\n\r\n return (\r\n
\r\n \r\n {/* @ts-ignore */}\r\n \r\n
\r\n
\r\n \r\n {productName}\r\n \r\n {ArrayExtensions.hasElements(productDimensions) ?
\r\n {productDimensions}\r\n
: ''}\r\n
\r\n \r\n
\r\n {renderProductUnitPrice}\r\n {renderInventoryLabel}\r\n {renderDiscountLines}\r\n {props.showShippingChargesForLineItems &&
\r\n {renderShippingLabel}\r\n
}\r\n {renderOtherCharges}\r\n
\r\n {\r\n generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CartLine;\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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { ChannelDeliveryOptionConfiguration, ProductDimensionType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, DiscountLine, DiscountLineType, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n\r\n /** Display string for discount label. */\r\n discountStringText: string;\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n\r\n /** Display string for quantity label. */\r\n quantityDisplayString: string;\r\n\r\n /** Display string for quantity label. */\r\n inputQuantityAriaLabel: string;\r\n\r\n /** Aria label for the decrement button in quantity component. */\r\n decrementButtonAriaLabel: string;\r\n\r\n /** Aria label for the increment button in quantity component. */\r\n incrementButtonAriaLabel: string;\r\n\r\n /** Original text screenreader. */\r\n originalPriceText: string;\r\n\r\n /** Current text screenreader. */\r\n currentPriceText: string;\r\n\r\n /** Shipping Charges Text. */\r\n shippingChargesText: string;\r\n}\r\n\r\n/**\r\n * Represents cart line data interface.\r\n */\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n\r\n /** The flag to change the quantity component from interactible to static. */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /** The primary image url. */\r\n primaryImageUrl?: string;\r\n\r\n /** The product url. */\r\n productUrl?: string;\r\n\r\n /** GridSettings for the product image in cartLine. */\r\n gridSettings: IGridSettings;\r\n\r\n /** ImageSettings for the product image in cartLine. */\r\n imageSettings: IImageSettings;\r\n\r\n /** Boolean flag to indicate if the item is out of stock. */\r\n isOutOfStock?: boolean;\r\n\r\n /** Flag to make quantity section editable. */\r\n isQuantityEditable?: boolean;\r\n\r\n /** Max quantity for line item. */\r\n maxQuantity?: number;\r\n\r\n /** Current quantity for line item. */\r\n currentQuantity?: number;\r\n\r\n /** Resource string for the component. */\r\n resources: ICartlineResourceString;\r\n\r\n /** SalesLine flag. */\r\n isSalesLine?: boolean;\r\n\r\n /** Error message to show in place of quantity. */\r\n errorMessage?: string;\r\n\r\n /** Inventory information label. */\r\n inventoryInformationLabel?: string;\r\n\r\n /** Inventory information class name. */\r\n inventoryLabelClassName?: string;\r\n\r\n /** Flag to show/hide shipping charges for line items. */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /** Boolean flag to indicate if cart state status is ready. */\r\n isCartStateReady?: boolean;\r\n\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /** The telemetry content. */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /** Quantity onChange callback. */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\r\n}\r\n\r\n/**\r\n * Represents dimensions strings.\r\n */\r\ninterface IDimensionStrings {\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n}\r\n\r\nconst cartLineItemFunctions = {\r\n\r\n /**\r\n * Render product dimensions.\r\n * @param product - Product data.\r\n * @param dimensionStrings - Dimension strings interface.\r\n * @returns JSX Element.\r\n */\r\n renderProductDimensions: (product: SimpleProduct, dimensionStrings: IDimensionStrings) => {\r\n if (!product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Color) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.colorString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Configuration) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.configString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Size) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.sizeString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Style) {\r\n return (\r\n
\r\n \r\n {product.IsGiftCard ? dimensionStrings.amountString : dimensionStrings.styleString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of price display.\r\n * @param props - The cart line props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderProductUnitPrice: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.Price) {\r\n return null;\r\n }\r\n const zeroQuantity: number = 0;\r\n return (\r\n
\r\n \r\n zeroQuantity ? {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n } : {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n }}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n />\r\n \r\n
\r\n );\r\n },\r\n\r\n /**\r\n * Render discount lines.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || !ArrayExtensions.hasElements(props.data.cartLine.DiscountLines)) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the updated discount percentage.\r\n * @param discountLine - The discount line.\r\n * @param cartLine - The cart line.\r\n * @returns The updated discount percentage.\r\n */\r\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\r\n const numberZero = 0;\r\n const decimalPrecision = 2;\r\n const fullPercentage = 100;\r\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\r\n\r\n if ((discountLine.Percentage === numberZero ||\r\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\r\n cartLine.Price && cartLine.Price > numberZero && cartLine.Quantity && cartLine.Quantity !== numberZero) {\r\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\r\n updatedPercent = Number(((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision));\r\n }\r\n\r\n return updatedPercent;\r\n };\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''}%)`}\r\n \r\n
\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * Render inventory label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n const inventoryCssName = props.inventoryLabelClassName ? `msc-cart-line__product-inventory-label ${\r\n props.inventoryLabelClassName}` : 'msc-cart-line__product-inventory-label';\r\n\r\n return (\r\n

\r\n {props.inventoryInformationLabel}\r\n

\r\n );\r\n },\r\n\r\n /**\r\n * Render shipping label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(cartline.DeliveryMode && channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(\r\n deliveryMode => deliveryMode !== cartline.DeliveryMode));\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines ?? []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (!ArrayExtensions.hasElements(shippingChargeLines)) {\r\n return undefined;\r\n }\r\n\r\n const defaultCharge: number = 0;\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount ?? defaultCharge);\r\n }, defaultCharge);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {priceComponent}\r\n \r\n \r\n );\r\n },\r\n\r\n /**\r\n * Render other charges.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter((chargeline) => !chargeline.IsShipping);\r\n\r\n return otherCharges?.map((otherCharge, index) => {\r\n const itemIndex = index;\r\n return otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : '';\r\n }) ?? undefined;\r\n }\r\n};\r\n\r\n/**\r\n * Render cartline component.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { \r\n product, \r\n // update to get rid of weird description flash\r\n //cartLine \r\n } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = product && cartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderProductUnitPrice = cartLineItemFunctions.renderProductUnitPrice(props);\r\n const imageSettings = props.imageSettings;\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n const renderDiscountLines = cartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = cartLineItemFunctions.renderInventoryLabel(props);\r\n const renderShippingLabel = cartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = cartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n // update to get rid of weird description flash\r\n //const productName = product?.Name ?? cartLine.Description;\r\n const productName = product?.Name;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n /**\r\n * Render other charges.\r\n * @param newValue - The cart line props.\r\n * @returns Boolean.\r\n */\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n return props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n return true;\r\n };\r\n\r\n /**\r\n * Generate error message.\r\n * @returns JSX element.\r\n */\r\n const generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n \r\n {props.errorMessage}\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Render Saving component.\r\n * @returns JSX element.\r\n */\r\n const renderSaving = (): JSX.Element | null => {\r\n\r\n if (!props.data.cartLine.DiscountAmount) {\r\n return null;\r\n }\r\n const discountAmountZero: number = 0;\r\n\r\n if (props.data.cartLine.DiscountAmount > discountAmountZero) {\r\n return (\r\n <>\r\n \r\n {`${props.resources.discountStringText || 'Discount'}`}\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n const renderUnitOfMeasure = () => {\r\n\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\r\n return undefined;\r\n }\r\n\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {product.DefaultUnitOfMeasure}\r\n \r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Generate quantity and price component.\r\n * @returns JSX element.\r\n */\r\n const generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n const defaultMaxQuantity: number = 10;\r\n const singleQuantity: number = 1;\r\n const unitOfMeasure = renderUnitOfMeasure();\r\n\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.data.product && props.isQuantityEditable) {\r\n nodes.push(\r\n
\r\n
\r\n {resources.quantityDisplayString}\r\n
\r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {unitOfMeasure}\r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n {unitOfMeasure}\r\n \r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {props.data.cartLine.Quantity}\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n {\r\n renderSaving()\r\n }\r\n {props.isOutOfStock ? renderInventoryLabel : null}\r\n
\r\n );\r\n\r\n return nodes;\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {productName}\r\n \r\n {ArrayExtensions.hasElements(productDimensions) ?
\r\n {productDimensions}\r\n
: ''}\r\n
\r\n \r\n
\r\n {renderProductUnitPrice}\r\n {renderInventoryLabel}\r\n {renderDiscountLines}\r\n {props.showShippingChargesForLineItems &&
\r\n {renderShippingLabel}\r\n
}\r\n {renderOtherCharges}\r\n
\r\n {\r\n generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CartLine;\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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { ChannelDeliveryOptionConfiguration, ProductDimensionType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, DiscountLine, DiscountLineType, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n\r\n /** Display string for discount label. */\r\n discountStringText: string;\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n\r\n /** Display string for quantity label. */\r\n quantityDisplayString: string;\r\n\r\n /** Display string for quantity label. */\r\n inputQuantityAriaLabel: string;\r\n\r\n /** Aria label for the decrement button in quantity component. */\r\n decrementButtonAriaLabel: string;\r\n\r\n /** Aria label for the increment button in quantity component. */\r\n incrementButtonAriaLabel: string;\r\n\r\n /** Original text screenreader. */\r\n originalPriceText: string;\r\n\r\n /** Current text screenreader. */\r\n currentPriceText: string;\r\n\r\n /** Shipping Charges Text. */\r\n shippingChargesText: string;\r\n}\r\n\r\n/**\r\n * Represents cart line data interface.\r\n */\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n\r\n /** The flag to change the quantity component from interactible to static. */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /** The primary image url. */\r\n primaryImageUrl?: string;\r\n\r\n /** The product url. */\r\n productUrl?: string;\r\n\r\n /** GridSettings for the product image in cartLine. */\r\n gridSettings: IGridSettings;\r\n\r\n /** ImageSettings for the product image in cartLine. */\r\n imageSettings: IImageSettings;\r\n\r\n /** Boolean flag to indicate if the item is out of stock. */\r\n isOutOfStock?: boolean;\r\n\r\n /** Flag to make quantity section editable. */\r\n isQuantityEditable?: boolean;\r\n\r\n /** Max quantity for line item. */\r\n maxQuantity?: number;\r\n\r\n /** Current quantity for line item. */\r\n currentQuantity?: number;\r\n\r\n /** Resource string for the component. */\r\n resources: ICartlineResourceString;\r\n\r\n /** SalesLine flag. */\r\n isSalesLine?: boolean;\r\n\r\n /** Error message to show in place of quantity. */\r\n errorMessage?: string;\r\n\r\n /** Inventory information label. */\r\n inventoryInformationLabel?: string;\r\n\r\n /** Inventory information class name. */\r\n inventoryLabelClassName?: string;\r\n\r\n /** Flag to show/hide shipping charges for line items. */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /** Boolean flag to indicate if cart state status is ready. */\r\n isCartStateReady?: boolean;\r\n\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /** The telemetry content. */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /** Quantity onChange callback. */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\r\n}\r\n\r\n/**\r\n * Represents dimensions strings.\r\n */\r\ninterface IDimensionStrings {\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n}\r\n\r\nconst cartLineItemFunctions = {\r\n\r\n /**\r\n * Render product dimensions.\r\n * @param product - Product data.\r\n * @param dimensionStrings - Dimension strings interface.\r\n * @returns JSX Element.\r\n */\r\n renderProductDimensions: (product: SimpleProduct, dimensionStrings: IDimensionStrings) => {\r\n if (!product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Color) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.colorString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Configuration) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.configString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Size) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.sizeString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Style) {\r\n return (\r\n
\r\n \r\n {product.IsGiftCard ? dimensionStrings.amountString : dimensionStrings.styleString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of price display.\r\n * @param props - The cart line props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderProductUnitPrice: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.Price) {\r\n return null;\r\n }\r\n const zeroQuantity: number = 0;\r\n return (\r\n
\r\n \r\n zeroQuantity ? {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n } : {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n }}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n />\r\n \r\n
\r\n );\r\n },\r\n\r\n /**\r\n * Render discount lines.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || !ArrayExtensions.hasElements(props.data.cartLine.DiscountLines)) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the updated discount percentage.\r\n * @param discountLine - The discount line.\r\n * @param cartLine - The cart line.\r\n * @returns The updated discount percentage.\r\n */\r\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\r\n const numberZero = 0;\r\n const decimalPrecision = 2;\r\n const fullPercentage = 100;\r\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\r\n\r\n if ((discountLine.Percentage === numberZero ||\r\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\r\n cartLine.Price && cartLine.Price > numberZero && cartLine.Quantity && cartLine.Quantity !== numberZero) {\r\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\r\n updatedPercent = Number(((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision));\r\n }\r\n\r\n return updatedPercent;\r\n };\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''}%)`}\r\n \r\n
\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * Render inventory label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n const inventoryCssName = props.inventoryLabelClassName ? `msc-cart-line__product-inventory-label ${\r\n props.inventoryLabelClassName}` : 'msc-cart-line__product-inventory-label';\r\n\r\n return (\r\n

\r\n {props.inventoryInformationLabel}\r\n

\r\n );\r\n },\r\n\r\n /**\r\n * Render shipping label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(cartline.DeliveryMode && channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(\r\n deliveryMode => deliveryMode !== cartline.DeliveryMode));\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines ?? []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (!ArrayExtensions.hasElements(shippingChargeLines)) {\r\n return undefined;\r\n }\r\n\r\n const defaultCharge: number = 0;\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount ?? defaultCharge);\r\n }, defaultCharge);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {priceComponent}\r\n \r\n \r\n );\r\n },\r\n\r\n /**\r\n * Render other charges.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter((chargeline) => !chargeline.IsShipping);\r\n\r\n return otherCharges?.map((otherCharge, index) => {\r\n const itemIndex = index;\r\n return otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : '';\r\n }) ?? undefined;\r\n }\r\n};\r\n\r\n/**\r\n * Render cartline component.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { \r\n product, \r\n // update to get rid of weird description flash\r\n //cartLine \r\n } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = product && cartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderProductUnitPrice = cartLineItemFunctions.renderProductUnitPrice(props);\r\n const imageSettings = props.imageSettings;\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n const renderDiscountLines = cartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = cartLineItemFunctions.renderInventoryLabel(props);\r\n const renderShippingLabel = cartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = cartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n // update to get rid of weird description flash\r\n //const productName = product?.Name ?? cartLine.Description;\r\n const productName = product?.Name;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n /**\r\n * Render other charges.\r\n * @param newValue - The cart line props.\r\n * @returns Boolean.\r\n */\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n return props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n return true;\r\n };\r\n\r\n /**\r\n * Generate error message.\r\n * @returns JSX element.\r\n */\r\n const generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n \r\n {props.errorMessage}\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Render Saving component.\r\n * @returns JSX element.\r\n */\r\n const renderSaving = (): JSX.Element | null => {\r\n\r\n if (!props.data.cartLine.DiscountAmount) {\r\n return null;\r\n }\r\n const discountAmountZero: number = 0;\r\n\r\n if (props.data.cartLine.DiscountAmount > discountAmountZero) {\r\n return (\r\n <>\r\n \r\n {`${props.resources.discountStringText || 'Discount'}`}\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n const renderUnitOfMeasure = () => {\r\n\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\r\n return undefined;\r\n }\r\n\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {product.DefaultUnitOfMeasure}\r\n \r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Generate quantity and price component.\r\n * @returns JSX element.\r\n */\r\n const generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n const defaultMaxQuantity: number = 10;\r\n const singleQuantity: number = 1;\r\n const unitOfMeasure = renderUnitOfMeasure();\r\n\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.data.product && props.isQuantityEditable) {\r\n nodes.push(\r\n
\r\n
\r\n {resources.quantityDisplayString}\r\n
\r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {unitOfMeasure}\r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n {unitOfMeasure}\r\n \r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {props.data.cartLine.Quantity}\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n {\r\n renderSaving()\r\n }\r\n {props.isOutOfStock ? renderInventoryLabel : null}\r\n
\r\n );\r\n\r\n return nodes;\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {productName}\r\n \r\n {ArrayExtensions.hasElements(productDimensions) ?
\r\n {productDimensions}\r\n
: ''}\r\n
\r\n \r\n
\r\n {renderProductUnitPrice}\r\n {renderInventoryLabel}\r\n {renderDiscountLines}\r\n {props.showShippingChargesForLineItems &&
\r\n {renderShippingLabel}\r\n
}\r\n {renderOtherCharges}\r\n
\r\n {\r\n generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CartLine;\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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { ChannelDeliveryOptionConfiguration, ProductDimensionType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, DiscountLine, DiscountLineType, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n\r\n /** Display string for discount label. */\r\n discountStringText: string;\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n\r\n /** Display string for quantity label. */\r\n quantityDisplayString: string;\r\n\r\n /** Display string for quantity label. */\r\n inputQuantityAriaLabel: string;\r\n\r\n /** Aria label for the decrement button in quantity component. */\r\n decrementButtonAriaLabel: string;\r\n\r\n /** Aria label for the increment button in quantity component. */\r\n incrementButtonAriaLabel: string;\r\n\r\n /** Original text screenreader. */\r\n originalPriceText: string;\r\n\r\n /** Current text screenreader. */\r\n currentPriceText: string;\r\n\r\n /** Shipping Charges Text. */\r\n shippingChargesText: string;\r\n}\r\n\r\n/**\r\n * Represents cart line data interface.\r\n */\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n\r\n /** The flag to change the quantity component from interactible to static. */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /** The primary image url. */\r\n primaryImageUrl?: string;\r\n\r\n /** The product url. */\r\n productUrl?: string;\r\n\r\n /** GridSettings for the product image in cartLine. */\r\n gridSettings: IGridSettings;\r\n\r\n /** ImageSettings for the product image in cartLine. */\r\n imageSettings: IImageSettings;\r\n\r\n /** Boolean flag to indicate if the item is out of stock. */\r\n isOutOfStock?: boolean;\r\n\r\n /** Flag to make quantity section editable. */\r\n isQuantityEditable?: boolean;\r\n\r\n /** Max quantity for line item. */\r\n maxQuantity?: number;\r\n\r\n /** Current quantity for line item. */\r\n currentQuantity?: number;\r\n\r\n /** Resource string for the component. */\r\n resources: ICartlineResourceString;\r\n\r\n /** SalesLine flag. */\r\n isSalesLine?: boolean;\r\n\r\n /** Error message to show in place of quantity. */\r\n errorMessage?: string;\r\n\r\n /** Inventory information label. */\r\n inventoryInformationLabel?: string;\r\n\r\n /** Inventory information class name. */\r\n inventoryLabelClassName?: string;\r\n\r\n /** Flag to show/hide shipping charges for line items. */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /** Boolean flag to indicate if cart state status is ready. */\r\n isCartStateReady?: boolean;\r\n\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /** The telemetry content. */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /** Quantity onChange callback. */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\r\n}\r\n\r\n/**\r\n * Represents dimensions strings.\r\n */\r\ninterface IDimensionStrings {\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n}\r\n\r\nconst cartLineItemFunctions = {\r\n\r\n /**\r\n * Render product dimensions.\r\n * @param product - Product data.\r\n * @param dimensionStrings - Dimension strings interface.\r\n * @returns JSX Element.\r\n */\r\n renderProductDimensions: (product: SimpleProduct, dimensionStrings: IDimensionStrings) => {\r\n if (!product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Color) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.colorString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Configuration) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.configString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Size) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.sizeString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Style) {\r\n return (\r\n
\r\n \r\n {product.IsGiftCard ? dimensionStrings.amountString : dimensionStrings.styleString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of price display.\r\n * @param props - The cart line props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderProductUnitPrice: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.Price) {\r\n return null;\r\n }\r\n const zeroQuantity: number = 0;\r\n return (\r\n
\r\n \r\n zeroQuantity ? {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n } : {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n }}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n />\r\n \r\n
\r\n );\r\n },\r\n\r\n /**\r\n * Render discount lines.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || !ArrayExtensions.hasElements(props.data.cartLine.DiscountLines)) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the updated discount percentage.\r\n * @param discountLine - The discount line.\r\n * @param cartLine - The cart line.\r\n * @returns The updated discount percentage.\r\n */\r\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\r\n const numberZero = 0;\r\n const decimalPrecision = 2;\r\n const fullPercentage = 100;\r\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\r\n\r\n if ((discountLine.Percentage === numberZero ||\r\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\r\n cartLine.Price && cartLine.Price > numberZero && cartLine.Quantity && cartLine.Quantity !== numberZero) {\r\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\r\n updatedPercent = Number(((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision));\r\n }\r\n\r\n return updatedPercent;\r\n };\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''}%)`}\r\n \r\n
\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * Render inventory label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n const inventoryCssName = props.inventoryLabelClassName ? `msc-cart-line__product-inventory-label ${\r\n props.inventoryLabelClassName}` : 'msc-cart-line__product-inventory-label';\r\n\r\n return (\r\n

\r\n {props.inventoryInformationLabel}\r\n

\r\n );\r\n },\r\n\r\n /**\r\n * Render shipping label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(cartline.DeliveryMode && channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(\r\n deliveryMode => deliveryMode !== cartline.DeliveryMode));\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines ?? []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (!ArrayExtensions.hasElements(shippingChargeLines)) {\r\n return undefined;\r\n }\r\n\r\n const defaultCharge: number = 0;\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount ?? defaultCharge);\r\n }, defaultCharge);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {priceComponent}\r\n \r\n \r\n );\r\n },\r\n\r\n /**\r\n * Render other charges.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter((chargeline) => !chargeline.IsShipping);\r\n\r\n return otherCharges?.map((otherCharge, index) => {\r\n const itemIndex = index;\r\n return otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : '';\r\n }) ?? undefined;\r\n }\r\n};\r\n\r\n/**\r\n * Render cartline component.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { \r\n product, \r\n // update to get rid of weird description flash\r\n //cartLine \r\n } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = product && cartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderProductUnitPrice = cartLineItemFunctions.renderProductUnitPrice(props);\r\n const imageSettings = props.imageSettings;\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n const renderDiscountLines = cartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = cartLineItemFunctions.renderInventoryLabel(props);\r\n const renderShippingLabel = cartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = cartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n // update to get rid of weird description flash\r\n //const productName = product?.Name ?? cartLine.Description;\r\n const productName = product?.Name;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n /**\r\n * Render other charges.\r\n * @param newValue - The cart line props.\r\n * @returns Boolean.\r\n */\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n return props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n return true;\r\n };\r\n\r\n /**\r\n * Generate error message.\r\n * @returns JSX element.\r\n */\r\n const generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n \r\n {props.errorMessage}\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Render Saving component.\r\n * @returns JSX element.\r\n */\r\n const renderSaving = (): JSX.Element | null => {\r\n\r\n if (!props.data.cartLine.DiscountAmount) {\r\n return null;\r\n }\r\n const discountAmountZero: number = 0;\r\n\r\n if (props.data.cartLine.DiscountAmount > discountAmountZero) {\r\n return (\r\n <>\r\n \r\n {`${props.resources.discountStringText || 'Discount'}`}\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n const renderUnitOfMeasure = () => {\r\n\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\r\n return undefined;\r\n }\r\n\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {product.DefaultUnitOfMeasure}\r\n \r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Generate quantity and price component.\r\n * @returns JSX element.\r\n */\r\n const generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n const defaultMaxQuantity: number = 10;\r\n const singleQuantity: number = 1;\r\n const unitOfMeasure = renderUnitOfMeasure();\r\n\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.data.product && props.isQuantityEditable) {\r\n nodes.push(\r\n
\r\n
\r\n {resources.quantityDisplayString}\r\n
\r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {unitOfMeasure}\r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n {unitOfMeasure}\r\n \r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {props.data.cartLine.Quantity}\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n {\r\n renderSaving()\r\n }\r\n {props.isOutOfStock ? renderInventoryLabel : null}\r\n
\r\n );\r\n return nodes;\r\n };\r\n\r\n return (\r\n
\r\n \r\n {/* @ts-ignore */}\r\n \r\n
\r\n
\r\n \r\n {productName}\r\n \r\n {ArrayExtensions.hasElements(productDimensions) ?
\r\n {productDimensions}\r\n
: ''}\r\n
\r\n \r\n
\r\n {renderProductUnitPrice}\r\n {renderInventoryLabel}\r\n {renderDiscountLines}\r\n {props.showShippingChargesForLineItems &&
\r\n {renderShippingLabel}\r\n
}\r\n {renderOtherCharges}\r\n
\r\n {\r\n generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CartLine;\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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { ChannelDeliveryOptionConfiguration, ProductDimensionType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, DiscountLine, DiscountLineType, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n\r\n /** Display string for discount label. */\r\n discountStringText: string;\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n\r\n /** Display string for quantity label. */\r\n quantityDisplayString: string;\r\n\r\n /** Display string for quantity label. */\r\n inputQuantityAriaLabel: string;\r\n\r\n /** Aria label for the decrement button in quantity component. */\r\n decrementButtonAriaLabel: string;\r\n\r\n /** Aria label for the increment button in quantity component. */\r\n incrementButtonAriaLabel: string;\r\n\r\n /** Original text screenreader. */\r\n originalPriceText: string;\r\n\r\n /** Current text screenreader. */\r\n currentPriceText: string;\r\n\r\n /** Shipping Charges Text. */\r\n shippingChargesText: string;\r\n}\r\n\r\n/**\r\n * Represents cart line data interface.\r\n */\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n\r\n /** The flag to change the quantity component from interactible to static. */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /** The primary image url. */\r\n primaryImageUrl?: string;\r\n\r\n /** The product url. */\r\n productUrl?: string;\r\n\r\n /** GridSettings for the product image in cartLine. */\r\n gridSettings: IGridSettings;\r\n\r\n /** ImageSettings for the product image in cartLine. */\r\n imageSettings: IImageSettings;\r\n\r\n /** Boolean flag to indicate if the item is out of stock. */\r\n isOutOfStock?: boolean;\r\n\r\n /** Flag to make quantity section editable. */\r\n isQuantityEditable?: boolean;\r\n\r\n /** Max quantity for line item. */\r\n maxQuantity?: number;\r\n\r\n /** Current quantity for line item. */\r\n currentQuantity?: number;\r\n\r\n /** Resource string for the component. */\r\n resources: ICartlineResourceString;\r\n\r\n /** SalesLine flag. */\r\n isSalesLine?: boolean;\r\n\r\n /** Error message to show in place of quantity. */\r\n errorMessage?: string;\r\n\r\n /** Inventory information label. */\r\n inventoryInformationLabel?: string;\r\n\r\n /** Inventory information class name. */\r\n inventoryLabelClassName?: string;\r\n\r\n /** Flag to show/hide shipping charges for line items. */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /** Boolean flag to indicate if cart state status is ready. */\r\n isCartStateReady?: boolean;\r\n\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /** The telemetry content. */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /** Quantity onChange callback. */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\r\n}\r\n\r\n/**\r\n * Represents dimensions strings.\r\n */\r\ninterface IDimensionStrings {\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n}\r\n\r\nconst cartLineItemFunctions = {\r\n\r\n /**\r\n * Render product dimensions.\r\n * @param product - Product data.\r\n * @param dimensionStrings - Dimension strings interface.\r\n * @returns JSX Element.\r\n */\r\n renderProductDimensions: (product: SimpleProduct, dimensionStrings: IDimensionStrings) => {\r\n if (!product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Color) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.colorString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Configuration) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.configString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Size) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.sizeString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Style) {\r\n return (\r\n
\r\n \r\n {product.IsGiftCard ? dimensionStrings.amountString : dimensionStrings.styleString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of price display.\r\n * @param props - The cart line props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderProductUnitPrice: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.Price) {\r\n return null;\r\n }\r\n const zeroQuantity: number = 0;\r\n return (\r\n
\r\n \r\n zeroQuantity ? {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n } : {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n }}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n />\r\n \r\n
\r\n );\r\n },\r\n\r\n /**\r\n * Render discount lines.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || !ArrayExtensions.hasElements(props.data.cartLine.DiscountLines)) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the updated discount percentage.\r\n * @param discountLine - The discount line.\r\n * @param cartLine - The cart line.\r\n * @returns The updated discount percentage.\r\n */\r\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\r\n const numberZero = 0;\r\n const decimalPrecision = 2;\r\n const fullPercentage = 100;\r\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\r\n\r\n if ((discountLine.Percentage === numberZero ||\r\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\r\n cartLine.Price && cartLine.Price > numberZero && cartLine.Quantity && cartLine.Quantity !== numberZero) {\r\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\r\n updatedPercent = Number(((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision));\r\n }\r\n\r\n return updatedPercent;\r\n };\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''}%)`}\r\n \r\n
\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * Render inventory label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n const inventoryCssName = props.inventoryLabelClassName ? `msc-cart-line__product-inventory-label ${\r\n props.inventoryLabelClassName}` : 'msc-cart-line__product-inventory-label';\r\n\r\n return (\r\n

\r\n {props.inventoryInformationLabel}\r\n

\r\n );\r\n },\r\n\r\n /**\r\n * Render shipping label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(cartline.DeliveryMode && channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(\r\n deliveryMode => deliveryMode !== cartline.DeliveryMode));\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines ?? []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (!ArrayExtensions.hasElements(shippingChargeLines)) {\r\n return undefined;\r\n }\r\n\r\n const defaultCharge: number = 0;\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount ?? defaultCharge);\r\n }, defaultCharge);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {priceComponent}\r\n \r\n \r\n );\r\n },\r\n\r\n /**\r\n * Render other charges.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter((chargeline) => !chargeline.IsShipping);\r\n\r\n return otherCharges?.map((otherCharge, index) => {\r\n const itemIndex = index;\r\n return otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : '';\r\n }) ?? undefined;\r\n }\r\n};\r\n\r\n/**\r\n * Render cartline component.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { \r\n product, \r\n // update to get rid of weird description flash\r\n //cartLine \r\n } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = product && cartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderProductUnitPrice = cartLineItemFunctions.renderProductUnitPrice(props);\r\n const imageSettings = props.imageSettings;\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n const renderDiscountLines = cartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = cartLineItemFunctions.renderInventoryLabel(props);\r\n const renderShippingLabel = cartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = cartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n // update to get rid of weird description flash\r\n //const productName = product?.Name ?? cartLine.Description;\r\n const productName = product?.Name;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n /**\r\n * Render other charges.\r\n * @param newValue - The cart line props.\r\n * @returns Boolean.\r\n */\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n return props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n return true;\r\n };\r\n\r\n /**\r\n * Generate error message.\r\n * @returns JSX element.\r\n */\r\n const generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n \r\n {props.errorMessage}\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Render Saving component.\r\n * @returns JSX element.\r\n */\r\n const renderSaving = (): JSX.Element | null => {\r\n\r\n if (!props.data.cartLine.DiscountAmount) {\r\n return null;\r\n }\r\n const discountAmountZero: number = 0;\r\n\r\n if (props.data.cartLine.DiscountAmount > discountAmountZero) {\r\n return (\r\n <>\r\n \r\n {`${props.resources.discountStringText || 'Discount'}`}\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n const renderUnitOfMeasure = () => {\r\n\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\r\n return undefined;\r\n }\r\n\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {product.DefaultUnitOfMeasure}\r\n \r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Generate quantity and price component.\r\n * @returns JSX element.\r\n */\r\n const generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n const defaultMaxQuantity: number = 10;\r\n const singleQuantity: number = 1;\r\n const unitOfMeasure = renderUnitOfMeasure();\r\n\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.data.product && props.isQuantityEditable) {\r\n nodes.push(\r\n
\r\n
\r\n {resources.quantityDisplayString}\r\n
\r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {unitOfMeasure}\r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n {unitOfMeasure}\r\n \r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {props.data.cartLine.Quantity}\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n {\r\n renderSaving()\r\n }\r\n {props.isOutOfStock ? renderInventoryLabel : null}\r\n
\r\n );\r\n return nodes;\r\n };\r\n\r\n return (\r\n
\r\n \r\n {/* @ts-ignore */}\r\n \r\n
\r\n
\r\n \r\n {productName}\r\n \r\n {ArrayExtensions.hasElements(productDimensions) ?
\r\n {productDimensions}\r\n
: ''}\r\n
\r\n \r\n
\r\n {renderProductUnitPrice}\r\n {renderInventoryLabel}\r\n {renderDiscountLines}\r\n {props.showShippingChargesForLineItems &&
\r\n {renderShippingLabel}\r\n
}\r\n {renderOtherCharges}\r\n
\r\n {\r\n generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CartLine;\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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { ChannelDeliveryOptionConfiguration, ProductDimensionType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, DiscountLine, DiscountLineType, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n\r\n /** Display string for discount label. */\r\n discountStringText: string;\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n\r\n /** Display string for quantity label. */\r\n quantityDisplayString: string;\r\n\r\n /** Display string for quantity label. */\r\n inputQuantityAriaLabel: string;\r\n\r\n /** Aria label for the decrement button in quantity component. */\r\n decrementButtonAriaLabel: string;\r\n\r\n /** Aria label for the increment button in quantity component. */\r\n incrementButtonAriaLabel: string;\r\n\r\n /** Original text screenreader. */\r\n originalPriceText: string;\r\n\r\n /** Current text screenreader. */\r\n currentPriceText: string;\r\n\r\n /** Shipping Charges Text. */\r\n shippingChargesText: string;\r\n}\r\n\r\n/**\r\n * Represents cart line data interface.\r\n */\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n\r\n /** The flag to change the quantity component from interactible to static. */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /** The primary image url. */\r\n primaryImageUrl?: string;\r\n\r\n /** The product url. */\r\n productUrl?: string;\r\n\r\n /** GridSettings for the product image in cartLine. */\r\n gridSettings: IGridSettings;\r\n\r\n /** ImageSettings for the product image in cartLine. */\r\n imageSettings: IImageSettings;\r\n\r\n /** Boolean flag to indicate if the item is out of stock. */\r\n isOutOfStock?: boolean;\r\n\r\n /** Flag to make quantity section editable. */\r\n isQuantityEditable?: boolean;\r\n\r\n /** Max quantity for line item. */\r\n maxQuantity?: number;\r\n\r\n /** Current quantity for line item. */\r\n currentQuantity?: number;\r\n\r\n /** Resource string for the component. */\r\n resources: ICartlineResourceString;\r\n\r\n /** SalesLine flag. */\r\n isSalesLine?: boolean;\r\n\r\n /** Error message to show in place of quantity. */\r\n errorMessage?: string;\r\n\r\n /** Inventory information label. */\r\n inventoryInformationLabel?: string;\r\n\r\n /** Inventory information class name. */\r\n inventoryLabelClassName?: string;\r\n\r\n /** Flag to show/hide shipping charges for line items. */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /** Boolean flag to indicate if cart state status is ready. */\r\n isCartStateReady?: boolean;\r\n\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /** The telemetry content. */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /** Quantity onChange callback. */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\r\n}\r\n\r\n/**\r\n * Represents dimensions strings.\r\n */\r\ninterface IDimensionStrings {\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n}\r\n\r\nconst cartLineItemFunctions = {\r\n\r\n /**\r\n * Render product dimensions.\r\n * @param product - Product data.\r\n * @param dimensionStrings - Dimension strings interface.\r\n * @returns JSX Element.\r\n */\r\n renderProductDimensions: (product: SimpleProduct, dimensionStrings: IDimensionStrings) => {\r\n if (!product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Color) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.colorString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Configuration) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.configString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Size) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.sizeString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Style) {\r\n return (\r\n
\r\n \r\n {product.IsGiftCard ? dimensionStrings.amountString : dimensionStrings.styleString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of price display.\r\n * @param props - The cart line props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderProductUnitPrice: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.Price) {\r\n return null;\r\n }\r\n const zeroQuantity: number = 0;\r\n return (\r\n
\r\n \r\n zeroQuantity ? {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n } : {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n }}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n />\r\n \r\n
\r\n );\r\n },\r\n\r\n /**\r\n * Render discount lines.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || !ArrayExtensions.hasElements(props.data.cartLine.DiscountLines)) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the updated discount percentage.\r\n * @param discountLine - The discount line.\r\n * @param cartLine - The cart line.\r\n * @returns The updated discount percentage.\r\n */\r\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\r\n const numberZero = 0;\r\n const decimalPrecision = 2;\r\n const fullPercentage = 100;\r\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\r\n\r\n if ((discountLine.Percentage === numberZero ||\r\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\r\n cartLine.Price && cartLine.Price > numberZero && cartLine.Quantity && cartLine.Quantity !== numberZero) {\r\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\r\n updatedPercent = Number(((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision));\r\n }\r\n\r\n return updatedPercent;\r\n };\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''}%)`}\r\n \r\n
\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * Render inventory label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n const inventoryCssName = props.inventoryLabelClassName ? `msc-cart-line__product-inventory-label ${\r\n props.inventoryLabelClassName}` : 'msc-cart-line__product-inventory-label';\r\n\r\n return (\r\n

\r\n {props.inventoryInformationLabel}\r\n

\r\n );\r\n },\r\n\r\n /**\r\n * Render shipping label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(cartline.DeliveryMode && channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(\r\n deliveryMode => deliveryMode !== cartline.DeliveryMode));\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines ?? []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (!ArrayExtensions.hasElements(shippingChargeLines)) {\r\n return undefined;\r\n }\r\n\r\n const defaultCharge: number = 0;\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount ?? defaultCharge);\r\n }, defaultCharge);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {priceComponent}\r\n \r\n \r\n );\r\n },\r\n\r\n /**\r\n * Render other charges.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter((chargeline) => !chargeline.IsShipping);\r\n\r\n return otherCharges?.map((otherCharge, index) => {\r\n const itemIndex = index;\r\n return otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : '';\r\n }) ?? undefined;\r\n }\r\n};\r\n\r\n/**\r\n * Render cartline component.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { \r\n product, \r\n // update to get rid of weird description flash\r\n //cartLine \r\n } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = product && cartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderProductUnitPrice = cartLineItemFunctions.renderProductUnitPrice(props);\r\n const imageSettings = props.imageSettings;\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n const renderDiscountLines = cartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = cartLineItemFunctions.renderInventoryLabel(props);\r\n const renderShippingLabel = cartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = cartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n // update to get rid of weird description flash\r\n //const productName = product?.Name ?? cartLine.Description;\r\n const productName = product?.Name;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n /**\r\n * Render other charges.\r\n * @param newValue - The cart line props.\r\n * @returns Boolean.\r\n */\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n return props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n return true;\r\n };\r\n\r\n /**\r\n * Generate error message.\r\n * @returns JSX element.\r\n */\r\n const generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n \r\n {props.errorMessage}\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Render Saving component.\r\n * @returns JSX element.\r\n */\r\n const renderSaving = (): JSX.Element | null => {\r\n\r\n if (!props.data.cartLine.DiscountAmount) {\r\n return null;\r\n }\r\n const discountAmountZero: number = 0;\r\n\r\n if (props.data.cartLine.DiscountAmount > discountAmountZero) {\r\n return (\r\n <>\r\n \r\n {`${props.resources.discountStringText || 'Discount'}`}\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n const renderUnitOfMeasure = () => {\r\n\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\r\n return undefined;\r\n }\r\n\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {product.DefaultUnitOfMeasure}\r\n \r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Generate quantity and price component.\r\n * @returns JSX element.\r\n */\r\n const generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n const defaultMaxQuantity: number = 10;\r\n const singleQuantity: number = 1;\r\n const unitOfMeasure = renderUnitOfMeasure();\r\n\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.data.product && props.isQuantityEditable) {\r\n nodes.push(\r\n
\r\n
\r\n {resources.quantityDisplayString}\r\n
\r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {unitOfMeasure}\r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n {unitOfMeasure}\r\n \r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {props.data.cartLine.Quantity}\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n {\r\n renderSaving()\r\n }\r\n {props.isOutOfStock ? renderInventoryLabel : null}\r\n
\r\n );\r\n\r\n return nodes;\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {productName}\r\n \r\n {ArrayExtensions.hasElements(productDimensions) ?
\r\n {productDimensions}\r\n
: ''}\r\n
\r\n \r\n
\r\n {renderProductUnitPrice}\r\n {renderInventoryLabel}\r\n {renderDiscountLines}\r\n {props.showShippingChargesForLineItems &&
\r\n {renderShippingLabel}\r\n
}\r\n {renderOtherCharges}\r\n
\r\n {\r\n generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CartLine;\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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { ChannelDeliveryOptionConfiguration, ProductDimensionType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, DiscountLine, DiscountLineType, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n\r\n /** Display string for discount label. */\r\n discountStringText: string;\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n\r\n /** Display string for quantity label. */\r\n quantityDisplayString: string;\r\n\r\n /** Display string for quantity label. */\r\n inputQuantityAriaLabel: string;\r\n\r\n /** Aria label for the decrement button in quantity component. */\r\n decrementButtonAriaLabel: string;\r\n\r\n /** Aria label for the increment button in quantity component. */\r\n incrementButtonAriaLabel: string;\r\n\r\n /** Original text screenreader. */\r\n originalPriceText: string;\r\n\r\n /** Current text screenreader. */\r\n currentPriceText: string;\r\n\r\n /** Shipping Charges Text. */\r\n shippingChargesText: string;\r\n}\r\n\r\n/**\r\n * Represents cart line data interface.\r\n */\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n\r\n /** The flag to change the quantity component from interactible to static. */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /** The primary image url. */\r\n primaryImageUrl?: string;\r\n\r\n /** The product url. */\r\n productUrl?: string;\r\n\r\n /** GridSettings for the product image in cartLine. */\r\n gridSettings: IGridSettings;\r\n\r\n /** ImageSettings for the product image in cartLine. */\r\n imageSettings: IImageSettings;\r\n\r\n /** Boolean flag to indicate if the item is out of stock. */\r\n isOutOfStock?: boolean;\r\n\r\n /** Flag to make quantity section editable. */\r\n isQuantityEditable?: boolean;\r\n\r\n /** Max quantity for line item. */\r\n maxQuantity?: number;\r\n\r\n /** Current quantity for line item. */\r\n currentQuantity?: number;\r\n\r\n /** Resource string for the component. */\r\n resources: ICartlineResourceString;\r\n\r\n /** SalesLine flag. */\r\n isSalesLine?: boolean;\r\n\r\n /** Error message to show in place of quantity. */\r\n errorMessage?: string;\r\n\r\n /** Inventory information label. */\r\n inventoryInformationLabel?: string;\r\n\r\n /** Inventory information class name. */\r\n inventoryLabelClassName?: string;\r\n\r\n /** Flag to show/hide shipping charges for line items. */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /** Boolean flag to indicate if cart state status is ready. */\r\n isCartStateReady?: boolean;\r\n\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /** The telemetry content. */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /** Quantity onChange callback. */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\r\n}\r\n\r\n/**\r\n * Represents dimensions strings.\r\n */\r\ninterface IDimensionStrings {\r\n\r\n /** String for size key. */\r\n sizeString: string;\r\n\r\n /** String for color key. */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension. */\r\n configString: string;\r\n\r\n /** String for style key. */\r\n styleString: string;\r\n\r\n /** String for amount key. */\r\n amountString?: string;\r\n}\r\n\r\nconst cartLineItemFunctions = {\r\n\r\n /**\r\n * Render product dimensions.\r\n * @param product - Product data.\r\n * @param dimensionStrings - Dimension strings interface.\r\n * @returns JSX Element.\r\n */\r\n renderProductDimensions: (product: SimpleProduct, dimensionStrings: IDimensionStrings) => {\r\n if (!product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Color) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.colorString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Configuration) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.configString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Size) {\r\n return (\r\n
\r\n \r\n {dimensionStrings.sizeString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === ProductDimensionType.Style) {\r\n return (\r\n
\r\n \r\n {product.IsGiftCard ? dimensionStrings.amountString : dimensionStrings.styleString}\r\n {': '}\r\n \r\n {productDimension.DimensionValue?.Value}\r\n \r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of price display.\r\n * @param props - The cart line props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderProductUnitPrice: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.Price) {\r\n return null;\r\n }\r\n const zeroQuantity: number = 0;\r\n return (\r\n
\r\n \r\n zeroQuantity ? {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n } : {\r\n price: {\r\n CustomerContextualPrice: props.data.cartLine.Price\r\n }\r\n }}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n />\r\n \r\n
\r\n );\r\n },\r\n\r\n /**\r\n * Render discount lines.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || !ArrayExtensions.hasElements(props.data.cartLine.DiscountLines)) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the updated discount percentage.\r\n * @param discountLine - The discount line.\r\n * @param cartLine - The cart line.\r\n * @returns The updated discount percentage.\r\n */\r\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\r\n const numberZero = 0;\r\n const decimalPrecision = 2;\r\n const fullPercentage = 100;\r\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\r\n\r\n if ((discountLine.Percentage === numberZero ||\r\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\r\n cartLine.Price && cartLine.Price > numberZero && cartLine.Quantity && cartLine.Quantity !== numberZero) {\r\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\r\n updatedPercent = Number(((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision));\r\n }\r\n\r\n return updatedPercent;\r\n };\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''}%)`}\r\n \r\n
\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * Render inventory label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n const inventoryCssName = props.inventoryLabelClassName ? `msc-cart-line__product-inventory-label ${\r\n props.inventoryLabelClassName}` : 'msc-cart-line__product-inventory-label';\r\n\r\n return (\r\n

\r\n {props.inventoryInformationLabel}\r\n

\r\n );\r\n },\r\n\r\n /**\r\n * Render shipping label.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(cartline.DeliveryMode && channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(\r\n deliveryMode => deliveryMode !== cartline.DeliveryMode));\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines ?? []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (!ArrayExtensions.hasElements(shippingChargeLines)) {\r\n return undefined;\r\n }\r\n\r\n const defaultCharge: number = 0;\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount ?? defaultCharge);\r\n }, defaultCharge);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {priceComponent}\r\n \r\n \r\n );\r\n },\r\n\r\n /**\r\n * Render other charges.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter((chargeline) => !chargeline.IsShipping);\r\n\r\n return otherCharges?.map((otherCharge, index) => {\r\n const itemIndex = index;\r\n return otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : '';\r\n }) ?? undefined;\r\n }\r\n};\r\n\r\n/**\r\n * Render cartline component.\r\n * @param props - The cart line props.\r\n * @returns JSX element.\r\n */\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { \r\n product, \r\n // update to get rid of weird description flash\r\n //cartLine \r\n } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = product && cartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderProductUnitPrice = cartLineItemFunctions.renderProductUnitPrice(props);\r\n const imageSettings = props.imageSettings;\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n const renderDiscountLines = cartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = cartLineItemFunctions.renderInventoryLabel(props);\r\n const renderShippingLabel = cartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = cartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n // update to get rid of weird description flash\r\n //const productName = product?.Name ?? cartLine.Description;\r\n const productName = product?.Name;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n /**\r\n * Render other charges.\r\n * @param newValue - The cart line props.\r\n * @returns Boolean.\r\n */\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n return props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n return true;\r\n };\r\n\r\n /**\r\n * Generate error message.\r\n * @returns JSX element.\r\n */\r\n const generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n \r\n {props.errorMessage}\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Render Saving component.\r\n * @returns JSX element.\r\n */\r\n const renderSaving = (): JSX.Element | null => {\r\n\r\n if (!props.data.cartLine.DiscountAmount) {\r\n return null;\r\n }\r\n const discountAmountZero: number = 0;\r\n\r\n if (props.data.cartLine.DiscountAmount > discountAmountZero) {\r\n return (\r\n <>\r\n \r\n {`${props.resources.discountStringText || 'Discount'}`}\r\n \r\n \r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n const renderUnitOfMeasure = () => {\r\n\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\r\n return undefined;\r\n }\r\n\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {product.DefaultUnitOfMeasure}\r\n \r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Generate quantity and price component.\r\n * @returns JSX element.\r\n */\r\n const generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n const defaultMaxQuantity: number = 10;\r\n const singleQuantity: number = 1;\r\n const unitOfMeasure = renderUnitOfMeasure();\r\n\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.data.product && props.isQuantityEditable) {\r\n nodes.push(\r\n
\r\n
\r\n {resources.quantityDisplayString}\r\n
\r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {unitOfMeasure}\r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n {unitOfMeasure}\r\n \r\n\r\n {generateErrorMessage()}\r\n\r\n \r\n {props.data.cartLine.Quantity}\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n {\r\n renderSaving()\r\n }\r\n {props.isOutOfStock ? renderInventoryLabel : null}\r\n
\r\n );\r\n return nodes;\r\n };\r\n\r\n return (\r\n
\r\n \r\n {/* @ts-ignore */}\r\n \r\n
\r\n
\r\n \r\n {productName}\r\n \r\n {ArrayExtensions.hasElements(productDimensions) ?
\r\n {productDimensions}\r\n
: ''}\r\n
\r\n \r\n
\r\n {renderProductUnitPrice}\r\n {renderInventoryLabel}\r\n {renderDiscountLines}\r\n {props.showShippingChargesForLineItems &&
\r\n {renderShippingLabel}\r\n
}\r\n {renderOtherCharges}\r\n
\r\n {\r\n generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CartLine;\r\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 { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselData } from './carousel.data';\nimport { ICarouselProps } from './carousel.props.autogenerated';\nimport { ICarouselState } from './carousel.state';\n\nexport interface ICarouselViewProps extends ICarouselProps<{}>, ICarouselState {\n closeAnimation: string;\n carouselContainer: IModuleProps;\n telemetryContent: ITelemetryContent;\n next(): void;\n previous(): void;\n onIndicatorsClickHandler(): void;\n handleDismissCarousel(): void;\n handleOnExited(): void;\n handleOnExiting(): void;\n}\n\n/**\n *\n * CarouselModule component.\n * @extends {React.PureComponent>}\n */\nclass CarouselModule extends React.PureComponent, ICarouselState> {\n private animating: boolean;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: ICarouselProps, state: ICarouselState) {\n super(props);\n this.state = { activeIndex: 0, closeNow: false, dismissCarousel: false };\n this.animating = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n if (this.props.context.request.cookies.get(`CarouselDismiss_${this.props.id}`) === undefined) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'false');\n this.setState({ dismissCarousel: false });\n }\n }\n }\n\n public render(): JSX.Element | null {\n if (this.state.dismissCarousel) {\n return null;\n }\n\n const { className } = this.props.config;\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 ...this.state,\n telemetryContent: this.telemetryContent,\n carouselContainer: {\n moduleProps: this.props,\n className: classnames('ms-carousel', className)\n },\n closeAnimation: this.state.closeNow ? 'close-now' : '',\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n handleDismissCarousel: this._handleDismissCarousel,\n handleOnExited: this._onExited,\n handleOnExiting: this._onExiting\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Function implementation to dismiss the Carousel.\n */\n private readonly _handleDismissCarousel = (): void => {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'true');\n this.setState({ dismissCarousel: true });\n }\n };\n\n /**\n * Function implementation to move to next slide.\n */\n private readonly _next = (): void => {\n const { slots } = this.props;\n const nextIndex = this.state.activeIndex === (slots && slots.content && slots.content.length - 1) ? 0 : this.state.activeIndex + 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n /**\n * Function implementation to move to previous slide.\n */\n private readonly _previous = (): void => {\n const slots = this.props.slots && this.props.slots.content;\n const nextIndex = this.state.activeIndex === 0 ? (slots ? slots.length - 1 : 0) : this.state.activeIndex - 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n private readonly _onExiting = (): void => {\n this.animating = true;\n };\n\n private readonly _onExited = (): void => {\n this.animating = false;\n this.setState({ closeNow: false });\n };\n\n /**\n * Function implementation to move to a given slide.\n * @param newIndex\n */\n private readonly _goToIndex = (newIndex: number): void => {\n if (this.animating) {\n return;\n }\n this.setState({ activeIndex: newIndex });\n };\n}\n\nexport default CarouselModule;\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 { Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselViewProps } from './carousel';\n\n/**\n * Returns item slots.\n * @returns Array of item slots.\n * @param props -Props.\n */\nconst retrieveItems = (props: ICarouselViewProps): React.ReactNode[] => {\n let items = [];\n items = props.slots && props.slots.content && props.slots.content.length > 0 ? props.slots.content : [];\n return items;\n};\nconst CarouselView: React.FC = props => (\n \n \n \n);\n\nexport default CarouselView;\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 { AddOrderTemplateToCartComponent, ILinesAddedToCartDialogResources } from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getFallbackImageUrl, getProductUrlSync, OrderTemplate, OrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateActionMessageState } from '../order-template-list';\n\nexport interface ISingleOrderTemplateProps extends ProductList {\n orderTemplateState: IOrderTemplateActionMessageState;\n name?: string;\n orderTemplate: OrderTemplate;\n context: ICoreContext;\n imageSettings?: IImageSettings;\n enableImageProductLink?: boolean;\n removeFromOrderTemplateListText: string;\n addToBagText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n handlers: {\n onRemoveOrderTemplate(id: string): void | undefined;\n onDismiss(): void;\n };\n resources: {\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface ISingleOrderTemplateViewProps {\n key: string;\n orderTemplateImage: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n orderTemplateStatusMessage?: React.ReactNode;\n orderTemplateName?: React.ReactNode;\n orderTemplateAriaLabel?: string;\n orderTemplateHeaderDivider?: React.ReactNode;\n}\n\nconst _removeItemFromOrderTemplateList = (props: ISingleOrderTemplateProps): void => {\n const { onRemoveOrderTemplate } = props.handlers;\n const { itemKey } = props;\n\n onRemoveOrderTemplate && itemKey && onRemoveOrderTemplate(itemKey);\n};\n\nconst OrderTemplateActions = {\n removeOrderTemplate: _removeItemFromOrderTemplateList\n};\n\n/**\n * Remove order template action.\n * @param input -Single order template props.\n * @returns Set remove order template.\n */\nconst removeOrderTemplateActionHandler = (input: ISingleOrderTemplateProps) => () => {\n OrderTemplateActions.removeOrderTemplate(input);\n};\n\nexport const OrderTemplateRender = (input: ISingleOrderTemplateProps): ISingleOrderTemplateViewProps | null => {\n const {\n Id,\n orderTemplate,\n removeFromOrderTemplateListText,\n orderTemplateState,\n handlers,\n name,\n imageSettings,\n context,\n telemetryContent,\n enableImageProductLink\n } = input;\n\n if (!Id) {\n return null;\n }\n\n const _getOrderTemplatePageUrl = (): string => {\n const url = getUrlSync('ordertemplate', context.actionContext) ?? '';\n const separator = url.includes('?') ? '&' : '?';\n if (Id) {\n return `${url}${separator}id=${Id}`;\n }\n return '';\n };\n\n const { onDismiss } = handlers;\n\n return {\n key: `${Id}-template`,\n orderTemplateImage: _renderOrderTemplateImages(context, orderTemplate.orderTemplateLines, imageSettings, enableImageProductLink),\n orderTemplateAriaLabel: _renderAriaLabel(input),\n orderTemplateName: (\n
\n \n
\n {orderTemplate.totalLines}\n {` `}\n line items\n
\n
\n
\n ),\n addToCartButton: (\n
\n \n
\n ),\n removeButton: (\n \n ),\n orderTemplateStatusMessage: orderTemplateState && orderTemplateState.isOpen && orderTemplateState.userMessage && (\n
\n \n {orderTemplateState.userMessage}\n \n
\n )\n };\n};\n\n/**\n * On image click handler.\n * @param productUrl -Product url value.\n * @returns Assign window location.\n */\nconst onClickHandler = (productUrl: string) => () => {\n window.location.assign(productUrl);\n};\n\nconst _renderOrderTemplateImages = (\n context: ICoreContext,\n orderTemplateLines?: OrderTemplateLine[],\n imageSettings?: IImageSettings,\n enableImageProductLink?: boolean\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n lg: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n xl: { q: 'w=140&h=140&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n if (orderTemplateLines) {\n const count = orderTemplateLines.length < 4 ? orderTemplateLines.length : 4;\n\n return (\n
\n {orderTemplateLines?.slice(0, count).map(line => {\n const productUrl = line.fullProduct\n ? getProductUrlSync(line.fullProduct.ProductDetails, context.actionContext, undefined)\n : '';\n\n return (\n \n );\n })}\n
\n );\n }\n return
;\n};\n\nconst _renderAriaLabel = (props: ISingleOrderTemplateProps): string => {\n const { name } = props;\n return `${name}`;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateListStatus } from '../order-template-list';\n\nexport interface IOrderTemplateListStatusMessageProps {\n className?: string;\n errorType: orderTemplateListStatus;\n text?: string;\n}\n\nexport const OrderTemplateListStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * The Create Order Template Button Props.\n */\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n /**\n * The label for create order template.\n */\n createOrderTemplateText: string;\n\n /**\n * The create order template dialog resources.\n */\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n\n /**\n * The delegate to fire when dialog captured any user entry.\n */\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = props => {\n const onCancelHandler = React.useCallback(() => {\n return;\n }, []);\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = React.useCallback(() => {\n setOrderTemplateNameDialogOpen(true);\n }, []);\n\n return (\n <>\n \n {props.createOrderTemplateText}\n \n \n \n );\n};\n\nexport default CreateOrderTemplateButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Spinner from '../order-template/components/add-line/spinner';\nimport {\n ISingleOrderTemplateProps,\n ISingleOrderTemplateViewProps,\n OrderTemplateListStatusMessage,\n OrderTemplateRender\n} from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { HeadingTag, IOrderTemplateListProps, IOrderTemplateListResources } from './order-template-list.props.autogenerated';\n\nexport interface IOrderTemplateActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n headerStatusMessage: string;\n}\n\nexport type orderTemplateListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IOrderTemplateListViewProps extends IOrderTemplateListProps {\n OrderTemplateList: IModuleProps;\n status?: orderTemplateListStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplates?: INodeProps;\n OrderTemplate?: INodeProps;\n orderTemplates?: ISingleOrderTemplateViewProps[];\n createOrderTemplateButton?: React.ReactNode;\n templateHeaderStatusMessage?: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateList component.\n * @extends {React.PureComponent, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps) {\n super(props);\n this.state = {\n itemKey: '',\n userMessage: '',\n headerStatusMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false\n };\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps,\n nextState: IOrderTemplateActionMessageState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { className, heading } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && orderTemplates.result;\n const orderTemplateListHeading = heading?.text ?? this.props.resources.orderTemplateListTitle;\n\n if (orderTemplates.status === 'LOADING') {\n const errorProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: (\n \n )\n };\n return this.props.renderView(errorProps);\n }\n\n if (orderTemplatesData && orderTemplatesData.length === 0) {\n // When no order templates are found for customer\n const emptyViewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n createOrderTemplateButton: (\n \n ),\n heading: (\n \n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: ,\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n
\n \n {this.state.headerStatusMessage}\n \n
\n ),\n OrderTemplates: {\n className: 'ms-order-template__list-item',\n tag: 'ul'\n },\n OrderTemplate: {\n className: 'ms-order-template__tile',\n tag: 'li'\n },\n orderTemplates: orderTemplatesData && this._renderOrderTemplateList(orderTemplatesData)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateListResources): 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 private _renderOrderTemplateList(orderTemplates: OrderTemplate[]): ISingleOrderTemplateViewProps[] {\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n return orderTemplates.map((orderTemplate: OrderTemplate, index) => {\n const currentTemplateProps: ISingleOrderTemplateProps = {\n orderTemplateState: this.state,\n Id: orderTemplate.productList.Id,\n name: orderTemplate.productList.Name,\n orderTemplate,\n context,\n imageSettings,\n enableImageProductLink,\n removeFromOrderTemplateListText: 'remove',\n addToBagText: this.props.resources.addToBagButtonText,\n index,\n itemKey: orderTemplate.productList.Id,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n handlers: {\n onRemoveOrderTemplate: this._onRemoveFromOrderTemplateList,\n onDismiss: this._onDismiss\n },\n resources: {\n closeWindowButtonText: this.props.resources.closeWindowButtonText,\n addToCartFailureMessage: this.props.resources.addToCartFailureMessage,\n addToCartSuccessMessage: this.props.resources.addToCartSuccessMessage,\n addToCartProcessMessage: this.props.resources.addToCartProcessMessage,\n orderTemplateErrorMessage: this.props.resources.orderTemplateErrorMessage,\n linesAddedToCartDialogResources: {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n }\n }\n };\n\n return OrderTemplateRender(currentTemplateProps)!;\n });\n }\n\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _reloadPage = async () => {\n window.location.reload();\n };\n\n private readonly _onRemoveFromOrderTemplateList = (productListId: string): void | undefined => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplates } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplates.result && orderTemplates.result[0] && productListId) {\n const orderTemplate = orderTemplates.result.find(p => p.productList.Id === productListId);\n if (orderTemplate) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: productListId,\n headerStatusMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n })\n .then(this._reloadPage)\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template.');\n }\n }\n };\n}\n\nexport default OrderTemplateList;\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 { ISingleOrderTemplateViewProps } from './components';\nimport { IOrderTemplateListViewProps } from './order-template-list';\n\nexport const OrderTemplateListView: React.FC = props => {\n const {\n OrderTemplateList,\n status,\n statusMessage,\n heading,\n OrderTemplates,\n orderTemplates,\n OrderTemplate,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n \n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n \n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n \n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\nexport default OrderTemplateListView;\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 default (props: { className: string; msg?: string }) => (\n <>\n
\n {props?.msg &&
{props?.msg}
}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component {\n public state: IAddLineToTemplateState = {\n isOpen: false,\n query: '',\n products: [],\n content: CONTENT.Search,\n selectedProduct: null\n };\n\n public defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\n }\n\n public onComponentDidUpdate(): void {\n this.searchTextInput.current?.focus();\n }\n\n @computed get showBackArrow(): boolean {\n return this.state.content === CONTENT.ProductConfiguration;\n }\n\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): 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 {\n resources: { addLineModalLinkText, backToResultsText }\n } = this.props;\n\n const modalProps = {\n ...this.props,\n className: 'msc-add-line-to-template',\n toggle: this._toggleModalHandler,\n isOpen: this.state.isOpen,\n ariaLabel: addLineModalLinkText\n };\n\n return (\n <>\n \n \n {this.showBackArrow && (\n \n )}\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n {addLineModalLinkText}\n \n \n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText }\n } = this.props;\n\n return (\n \n \n \n \n \n \n \n
\n );\n }\n\n private _onIncrementalChange(amount: number): void {\n const updatedQuantity = this.state.currentInput + amount;\n\n if (updatedQuantity >= 1 && updatedQuantity <= this.props.max) {\n this.props.onChange && this.props.onChange(updatedQuantity);\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt(e.target.value, 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, 200)();\n });\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\n this.props.onChange && this.props.onChange(minValue);\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\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 { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductDimensionValue, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getFallbackImageUrl,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getSelectedVariant,\n IProductInventoryInformation,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent, ModalBody, ModalFooter } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport OrderTemplateQuantity from '../common/order-template-quantity';\nimport { Dropdown, IAddLineToTemplateProps, IAddLineToTemplateResources, IDropdownItemProps, IDropdownOnSelection } from '.';\n\nexport interface IProductCnnfigurationProps extends IAddLineToTemplateProps {\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n imageSettings: IImageSettings;\n telemetryContent?: ITelemetryContent;\n searchForm: React.ReactNode;\n addToTemplateHandler(params: IProductConfigurationState): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n}\n\nexport interface IProductConfigurationState {\n quantity: number;\n unitPrice: number;\n totalPrice: number;\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n selectedDimensions: {};\n productAvailableQuantity?: IProductInventoryInformation;\n buttonDisabled: boolean;\n showAddConfirmation: boolean;\n errorMessage?: string;\n isBusy: boolean;\n errors: { dimension?: string[]; add?: string };\n}\n\n/**\n * Configure selected product for addition to order template.\n */\nexport class ProductConfiguration extends React.Component {\n private selectedDimensions: {} = {};\n\n constructor(props: IProductCnnfigurationProps) {\n super(props);\n\n this.state = {\n quantity: 1,\n unitPrice: props.product.Price,\n totalPrice: props.product.Price,\n product: props.product,\n dimensions: props.dimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n selectedDimensions: {},\n buttonDisabled: false,\n showAddConfirmation: false\n } as IProductConfigurationState;\n }\n\n public shouldComponentUpdate(nextProps: IProductCnnfigurationProps, nextState: IProductConfigurationState): 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 {\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings }\n },\n resources: {\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n totalPriceLabel\n },\n imageSettings,\n highlightSearchTerm\n } = this.props;\n const { buttonDisabled, product, quantity, unitPrice, totalPrice, showAddConfirmation, errors } = this.state;\n\n return (\n <>\n \n {this.props.searchForm}\n
\n
\n
\n \n
\n
{product?.ItemId}
\n {highlightSearchTerm(product?.Name ?? '')}\n
\n {addLineProductUnitPricePrefix}\n {` `}\n {this._formatPrice(unitPrice)}\n
\n
\n {addLineProductUnitOfMeasurePrefix}\n {` `}\n {product?.DefaultUnitOfMeasure}\n
\n
\n
\n
{this._getDimensionsNodes()}
\n
\n
\n
{quantitySelectLabel}
\n \n
\n
\n
\n {totalPriceLabel}\n {` `}\n {this._formatPrice(totalPrice)}\n
\n
\n \n {showAddConfirmation && (\n \n
\n )}\n {errors?.add && (\n
\n
\n )}\n \n {addItemToTemplateText}\n \n \n \n );\n }\n\n private _getConfirmationMessage(): string {\n const selectedDimensionNames = this.state.dimensions\n .map(dimension => {\n let variant = dimension.DimensionValues?.find(\n value => value.RecordId === this.selectedDimensions[dimension.DimensionTypeValue]\n )?.Value;\n if (dimension.DimensionTypeValue === 3) {\n variant = `size ${variant}`;\n }\n return variant;\n })\n .filter(value => value);\n\n return this.props.resources.addToTemplateConfirmation\n .replace('{count}', this.state.quantity.toString())\n .replace('{productAndDimensions}', `${this.state.product.Name}, ${Object.values(selectedDimensionNames).join(', ')}`);\n }\n\n private _getDimensionsNodes(): React.ReactElement[] {\n const { dimensions } = this.state;\n const { resources } = this.props;\n\n return dimensions?.map((dimension: ProductDimensionFull) => {\n const { DimensionValues, DimensionTypeValue } = dimension;\n const mapDimensions = (value: ProductDimensionValue): IDropdownItemProps => ({\n id: value.RecordId,\n value: value.Value || ''\n });\n const dimensionName = this._getDropdownName(DimensionTypeValue, resources);\n const dropdownList: IDropdownItemProps[] = DimensionValues ? DimensionValues.map(mapDimensions) : [];\n dropdownList.unshift({ id: 0, value: `Choose a ${dimensionName}` });\n\n return (\n
\n
{dimensionName}
\n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n \n \n \n )}\n \n
\n );\n });\n }\n\n private readonly _getDimensionsError = (dimensionName: string) =>\n this.props.resources.dimensionMissingError.replace(/{dimensionName}/g, dimensionName);\n\n private readonly _addToTemplateHandler = async (event: React.MouseEvent) => {\n // Hide confirmation of previous addition when adding multiple items\n this.setState({\n isBusy: true,\n showAddConfirmation: false,\n errors: { ...this.state.errors, add: undefined }\n });\n\n const missingDimensions = this.state.dimensions\n .map(dimension => dimension.DimensionTypeValue.toString())\n .filter(type => !this.selectedDimensions[type]);\n\n this.setState({\n errors: { dimension: missingDimensions }\n });\n if (missingDimensions.length > 0) {\n this.setState({\n isBusy: false\n });\n return;\n }\n\n this.props\n .addToTemplateHandler({ ...this.state })\n .then(status => {\n // Validate against the existance of a ProductListId\n if (status.ProductListId) {\n this.setState({\n isBusy: false,\n showAddConfirmation: true\n });\n }\n })\n .catch(error => {\n const { addToTemplateDuplicateError, addToTemplateGenericError } = this.props.resources;\n let errorMessage;\n\n if (error.error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n errorMessage = addToTemplateDuplicateError;\n } else {\n errorMessage = addToTemplateGenericError;\n }\n\n this.setState({\n isBusy: false,\n errors: { ...this.state.errors, add: errorMessage }\n });\n this.props.context.telemetry.error('Error adding item to order template');\n });\n };\n\n private readonly _onQuantityChange = (newValue: number) => {\n this.setState({\n quantity: newValue,\n totalPrice: newValue * this.props.product.Price\n });\n };\n\n private readonly _updateDimensionValue = (\n productDimensionFull: ProductDimensionFull,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n // Rehydrate the selected variants price, available dimensions & sizes\n private readonly _onDimensionChanged = async (selection: IDropdownOnSelection): Promise => {\n const { product, dimensions, context } = this.props;\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = context;\n\n // Remaining error notifications for missing dimensions\n const remainingDimensionsErrors = this.state.errors?.dimension?.filter(id => id !== selection.dropdownId.toString());\n\n this.setState({\n isBusy: false,\n showAddConfirmation: false,\n buttonDisabled: true,\n errors: { add: undefined, dimension: remainingDimensionsErrors }\n });\n\n // Update currently selected dimensions\n this.selectedDimensions[selection.dropdownId] = +selection.selectId;\n\n const mappedDimensions = dimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, this.selectedDimensions[dimension.DimensionTypeValue]) ||\n dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension && dimension.DimensionValue;\n });\n\n const variantProduct = await getSelectedVariant(\n new SelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n\n if (!variantProduct) {\n this.props.context.telemetry.error(\n `Error retrieving variant product for product ${product.MasterProductId ? product.MasterProductId : product.RecordId}`\n );\n return;\n }\n\n const dimensionInput = new GetDimensionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n );\n const variantDimensions = await getDimensionsForSelectedVariant(dimensionInput, actionContext);\n\n if (!variantDimensions) {\n this.props.context.telemetry.error('Error retrieving dimensions for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n const availabilityInput = new ProductAvailabilitiesForSelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId\n );\n\n // @TODO sync UX quantity w/ actual availability\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(availabilityInput, actionContext);\n const priceInput = new PriceForSelectedVariantInput(product.RecordId, channelId);\n const productPrice = await getPriceForSelectedVariant(priceInput, actionContext);\n\n if (!productPrice) {\n this.props.context.telemetry.error('Error retrieving price for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n this.setState({\n buttonDisabled: false,\n productAvailableQuantity: (newAvailableQuantity && newAvailableQuantity[0]) || undefined,\n unitPrice: +(productPrice.BasePrice || product.Price),\n dimensions: variantDimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n product: variantProduct\n });\n };\n\n private readonly _getDropdownName = (dimensionType: number, resources: IAddLineToTemplateResources): string => {\n switch (dimensionType) {\n case 1: // Color\n return resources.productDimensionTypeColor;\n case 2: // Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // Size\n return resources.productDimensionTypeSize;\n case 4: // Style\n return resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private _formatPrice(price: number): string {\n const {\n context: {\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n }\n } = this.props;\n\n return formatCurrency(price.toFixed(2), currencyCode);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { IAddLineToTemplateProps } from '.';\n\nexport interface IProductListProps extends IAddLineToTemplateProps {\n products: ProductSearchResult[];\n imageSettings: IImageSettings;\n searchForm: React.ReactNode;\n clickHandler(product: ProductSearchResult): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n renderResultCountText(): string;\n}\n\nexport const ProductList = (props: IProductListProps) => {\n const {\n products,\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings },\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n },\n clickHandler,\n highlightSearchTerm,\n renderResultCountText,\n resources: { selectProductButtonText },\n imageSettings\n } = props;\n\n return (\n <>\n

\n {renderResultCountText()}\n

\n {props.searchForm}\n
\n {products.map((product: ProductSearchResult, index: number) => {\n const { Price, ItemId, Name, PrimaryImageUrl } = product;\n const price = formatCurrency(Price.toFixed(2), currencyCode);\n const primaryImageSource = generateImageUrl(PrimaryImageUrl ?? '', apiSettings) ?? '';\n const fallBackImg = getFallbackImageUrl(ItemId, apiSettings) ?? '';\n\n return (\n
\n
\n \n
\n
{ItemId}
\n {highlightSearchTerm(Name ?? '')}\n
\n
\n
\n {price}\n \n
\n
\n );\n })}\n
\n \n );\n};\n\ninterface IProductSelectButton {\n product: ProductSearchResult;\n buttonText: string;\n clickHandler(product: ProductSearchResult): Promise;\n}\n\nconst ProductSelectButton = (props: IProductSelectButton) => {\n const [isBusy, setBusy] = useState(false);\n const { product, buttonText, clickHandler } = props;\n const getClickHandler = React.useCallback(async () => {\n setBusy(!isBusy);\n await clickHandler(product);\n setBusy(!isBusy);\n }, [clickHandler, isBusy, product]);\n\n return (\n \n {buttonText}\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 { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport { IOrderTemplateData } from '../order-template.data';\nimport { IOrderTemplateProps } from '../order-template.props.autogenerated';\nimport { AddLineToTemplate } from '.';\n\ninterface IOrderTemplateBulkActionsProps extends IOrderTemplateProps {\n orderTemplateId: string;\n selectedLines: IOrderTemplateLineViewModel[];\n isMinifiedView: boolean;\n onAddSelectionToBag(): void;\n onRemoveSelection(): void;\n}\n\ninterface IOrderTemplateBulkActionsState {\n isAddDisabled: boolean;\n isRemoveDisabled: boolean;\n}\n\n/**\n * Bulk Order Template line actions.\n */\nexport class OrderTemplateBulkActions extends React.PureComponent {\n public state: IOrderTemplateBulkActionsState = {\n isAddDisabled: true,\n isRemoveDisabled: true\n };\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateBulkActionsProps,\n state: IOrderTemplateBulkActionsState\n ): IOrderTemplateBulkActionsState {\n const selectedLines = props.selectedLines.length;\n let nextState = { ...state };\n nextState = {\n isAddDisabled: selectedLines === 0,\n isRemoveDisabled: selectedLines === 0\n };\n return nextState;\n }\n\n public render(): JSX.Element {\n const {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n addSelectedToBagButtonText,\n removeSelectedToBagButtonText,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n } = this.props.resources;\n const addLineProps = {\n context: this.props.context,\n resources: {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n },\n imageSettings: this.props.config.imageSettings,\n orderTemplateId: this.props.orderTemplateId\n };\n\n return (\n <>\n \n \n \n {!this.props.isMinifiedView && addSelectedToBagButtonText}\n \n \n \n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\n \n \n );\n }\n\n private readonly addHandler = (event: React.MouseEvent) => {\n this.setState({\n isAddDisabled: true\n });\n\n this.props.onAddSelectionToBag();\n\n this.setState({\n isAddDisabled: false\n });\n };\n\n private readonly removeHandler = (event: React.MouseEvent) => {\n this.setState({\n isRemoveDisabled: true\n });\n\n this.props.onRemoveSelection();\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 AddOrderTemplateToCartComponent,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n RenameOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IOrderTemplateActionsData {\n orderTemplate: OrderTemplate;\n}\n\nexport interface IOrderTemplateActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onRemoveTemplate(orderTemplateId: string): void;\n onRenameTemplate(orderTemplate: ProductList): Promise;\n };\n renameOrderTemplateDialogStrings: IOrderTemplateNameDialogResources;\n resources: {\n addTemplateToBagButtonText: string;\n renameTemplateButtonText: string;\n deleteTemplateButtonText: string;\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n}\n\nexport interface IOrderTemplateActionsViewProps {\n addTemplateToBag: React.ReactNode;\n renameTemplate?: React.ReactNode;\n removeTemplate?: React.ReactNode;\n}\n\n/**\n * Remove Order Action.\n * @param props -Order template action props.\n * @returns Remove order template.\n */\nconst removeOrderActionHandler = (props: IOrderTemplateActionsProps) => () => {\n _removeOrderTemplate(props);\n};\n\nexport const OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\n const { resources } = props;\n const { deleteTemplateButtonText } = resources;\n\n return {\n addTemplateToBag: _getOrderTemplateAddToCartDialog(props),\n renameTemplate: _getOrderTemplateRenameControl(props),\n removeTemplate: (\n \n )\n };\n};\n\nconst _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\n const {\n data: { orderTemplate },\n handlers\n } = props;\n const { onRemoveTemplate } = handlers;\n\n if (onRemoveTemplate) {\n onRemoveTemplate(orderTemplate.productList.Id);\n }\n};\n\nconst _getOrderTemplateAddToCartDialog = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const {\n data: { orderTemplate },\n typeName,\n id,\n context,\n telemetryContent,\n resources\n } = props;\n const {\n addTemplateToBagButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n } = resources;\n\n const dialogStrings = {\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n };\n\n return (\n \n );\n};\n\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\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 { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport OrderTemplateQuantity from './common/order-template-quantity';\n\nexport interface IOrderTemplateLineProps extends ProductListLine {\n orderTemplateLine: IOrderTemplateLineViewModel;\n productListLine: ProductListLine;\n price?: ProductPrice;\n context: ICoreContext;\n productUrl: string;\n imageSettings?: IImageSettings;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n isQuantityDisabledForUpdate?: boolean;\n handlers: {\n onAddToBag(product: SimpleProduct, quantity: number, itemKey: string): void;\n onRemoveItem(line: IOrderTemplateLineViewModel): void | undefined;\n onChangeQuantity(orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps): void;\n onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void;\n };\n resources: {\n selectOneRowText?: string;\n moreButtonText?: string;\n viewProductDetailsText?: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n inputQuantityAriaLabel: string;\n removeFromOrderTemplateLinesText: string;\n addToBagButtonText: string;\n deleteButtonText: string;\n incrementButtonAriaLabel?: string;\n decrementButtonAriaLabel?: string;\n editOrderTemplateLineQuantityError?: string;\n };\n index: number;\n isMobile: boolean;\n productQuantityView?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n toggleDetailsDisplayed(props: IOrderTemplateLineProps): void;\n}\n\nexport interface IOrderTemplateLineViewProps {\n key?: string;\n productImage: React.ReactNode;\n productPrice?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productName?: string;\n productNumber?: React.ReactNode;\n productInfo?: React.ReactNode;\n productLabel?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n productQuantity?: number;\n productQuantityView?: React.ReactNode;\n productListId?: string;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n isMobile?: boolean;\n}\n\ninterface IEventHandlerFactory {\n getAddToBag(): (event: React.MouseEvent) => void;\n getRemoveItem(): (event: React.MouseEvent) => void;\n}\n\nconst OrderTemplateLineActions = (props: IOrderTemplateLineProps): IEventHandlerFactory => {\n const { orderTemplateLine, productListLine, quantity, handlers } = props;\n const { LineId } = productListLine;\n const { onAddToBag, onRemoveItem } = handlers;\n\n return {\n getAddToBag: () => (event: React.MouseEvent) => {\n LineId && orderTemplateLine.fullProduct && onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId);\n },\n getRemoveItem: () => (event: React.MouseEvent) => LineId && onRemoveItem(props.orderTemplateLine)\n };\n};\n\ninterface IPopupProps extends IOrderTemplateLineProps {\n addButtonClassName: string;\n removeButtonClassName: string;\n}\n\nconst PopUp = (props: IPopupProps): JSX.Element | null => {\n const { addToBagButtonText, removeFromOrderTemplateLinesText, moreButtonText, viewProductDetailsText } = props.resources;\n const [showMobile, setShowMobile] = useState(false);\n const componentClassName = 'ms-table';\n\n const getViewHandler = () => (event: React.MouseEvent) => {\n props.toggleDetailsDisplayed(props);\n };\n\n const toggle = React.useCallback(() => {\n setShowMobile(!showMobile);\n }, [showMobile]);\n\n return (\n
\n \n {showMobile && (\n
\n \n View\n \n {getActionButton(\n props.isMobile,\n props.removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n {getActionButton(\n props.isMobile,\n props.addButtonClassName,\n addToBagButtonText,\n OrderTemplateLineActions(props).getAddToBag()\n )}\n
\n )}\n
\n );\n};\n\nconst getActionButton = (\n isMobile: boolean,\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n\n/**\n * On Select line function.\n * @param orderTemplateLine -Order template line.\n * @param input -Order template line props.\n * @returns Set on select order template.\n */\nconst onSelectLineHandler = (orderTemplateLine: IOrderTemplateLineViewModel, input: IOrderTemplateLineProps) => (\n event: React.ChangeEvent\n) => {\n orderTemplateLine.isChecked = !orderTemplateLine.isChecked;\n\n input.handlers.onSelect(orderTemplateLine, event.target.checked);\n};\n\nexport const OrderTemplateLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | null => {\n const { orderTemplateLine, productListLine, price, context, imageSettings, quantity, resources, isMobile } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n const { removeFromOrderTemplateLinesText, addToBagButtonText, selectOneRowText } = resources;\n if (!product) {\n return null;\n }\n\n const { ItemId, Name, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(ItemId, context.actionContext.requestContext.apiSettings);\n const addButtonClassName = input.isMobile ? 'ms-table__row-links-add' : 'ms-order-template-table-line__product-add-button';\n const removeButtonClassName = input.isMobile ? 'ms-table__row-links-delete' : 'ms-order-template-table-line__product-remove-button';\n\n return {\n isMobile,\n selectLine: (\n \n ),\n key: LineId!,\n productImage:\n PrimaryImageUrl &&\n Name &&\n _renderProductImage(\n 'ms-order-template-table-line__product-image',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: product &&
{ItemId}
,\n productUnitOfMeasure: price ? (\n
{UnitOfMeasure || price.UnitOfMeasure}
\n ) : (\n undefined\n ),\n productListId: LineId!,\n removeButton: getActionButton(\n input.isMobile,\n removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(input).getRemoveItem()\n ),\n productQuantityView:
{_generateQuantity(input, LineId!)}
,\n productQuantity: quantity,\n addToBagButton: getActionButton(\n input.isMobile,\n addButtonClassName,\n addToBagButtonText,\n OrderTemplateLineActions(input).getAddToBag()\n ),\n popUp: \n };\n};\n\nexport const OrderTemplateMobileLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | undefined => {\n const { orderTemplateLine, productListLine, price, context, imageSettings } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n if (!product) {\n return;\n }\n const { ItemId, Name, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(ItemId, context.actionContext.requestContext.apiSettings);\n\n return {\n productImage:\n PrimaryImageUrl &&\n Name &&\n _renderProductImage('thumbnail', context, product.ProductDetails.Name!, PrimaryImageUrl, fallbackImage, imageSettings),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: ItemId,\n productUnitOfMeasure: UnitOfMeasure || price?.UnitOfMeasure,\n productQuantityView: _generateQuantity(input, LineId!)\n };\n};\n\nexport interface IOrderTemplateProductQuantityViewProps {\n ContainerProps: INodeProps;\n input: React.ReactNode;\n}\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps | undefined) => void,\n itemKey: string,\n props: IOrderTemplateLineProps\n) => (newValue: number) => {\n if (onChangeQuantity) {\n onChangeQuantity(itemKey, newValue, props);\n }\n};\n\nconst _generateQuantity = (props: IOrderTemplateLineProps, itemKey: string): React.ReactNode => {\n const { handlers, resources, quantity } = props;\n const { onChangeQuantity } = handlers;\n return (\n \n );\n};\n\nexport const _renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string,\n imageSettings?: IImageSettings\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n if (image) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderPrice = (props: IOrderTemplateLineProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IOrderTemplateLineProps): (string | undefined)[] => {\n const { orderTemplateLine } = props;\n\n if (!orderTemplateLine.fullProduct || !orderTemplateLine.fullProduct.ProductDetails.Dimensions) {\n return [];\n }\n\n return orderTemplateLine.fullProduct.ProductDetails.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n return dimension.DimensionValue.Value;\n });\n};\n\nexport const renderProductInfo = (props: IOrderTemplateLineProps): React.ReactNode | undefined => {\n const { orderTemplateLine, productUrl } = props;\n const name = orderTemplateLine.fullProduct?.ProductDetails.Name;\n\n const dimensions = _renderProductDimensions(props);\n if (!orderTemplateLine.fullProduct) {\n return [];\n }\n\n const productName = productUrl ? (\n \n {name}\n \n ) : (\n
{name}
\n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n
\n
{productName}
\n
{dimensionsLine}
\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateLinesStatus } from '../order-template';\n\nexport interface IOrderTemplateLinesStatusMessageProps {\n className?: string;\n errorType: orderTemplateLinesStatus;\n text?: string;\n}\n\nexport const OrderTemplateLinesStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\n \n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getUrlSync, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(this.className, className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n\n return this.props.renderView(errorProps);\n }\n\n const orderTemplateResult = orderTemplate && orderTemplate.result;\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\n\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\n window.location.href = this._getOrderTemplatePageUrl();\n return null;\n }\n\n const emptyViewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources,\n orderActions: orderTemplateResult && this._renderOrderTemplateActions(orderTemplateResult),\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n }\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'SUCCESS',\n productsStatusMessage: this.state.isOpen && (\n
\n \n {this.state.userMessage}\n \n
\n ),\n heading: heading && ,\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n },\n ProductsTable: {\n className: `${this.className}__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `${this.className}-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\n ProductDetails: {\n className: `${this.className}-table-line__link`,\n tag: 'a'\n },\n orderLines: this._renderProductList(),\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\n orderActions: this._renderOrderTemplateActions(orderTemplateResult),\n pagination: this._renderPagination(),\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n isDetailsDisplayed: this.state.isDetailsDisplayed,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n detailedProductView: this.state.detailedProductView,\n isMobile: this.isMobile\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\n line.isChecked = isChecked;\n\n const updated =\n this.state.productSelection.map(product => {\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\n line.isChecked = isChecked;\n }\n return product;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n public onSelectAll(isChecked: boolean): void {\n const updated =\n this.state.productSelection.map(line => {\n line.isChecked = isChecked;\n return line;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n private _renderProductListHeader(resources: IOrderTemplateResources): React.ReactNode {\n const {\n productImage,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productActionsText,\n selectAllRowsText\n } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productImage: productImage,\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n selectAllRowsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n }\n };\n\n return ;\n }\n\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\n return (\n line.isChecked)}\n onAddSelectionToBag={this._onAddSelectionToBag}\n onRemoveSelection={this._onRemoveSelection}\n isMinifiedView={this.isMobile}\n />\n );\n }\n\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n };\n }\n\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\n freePriceText: this.props.resources.freePriceText,\n originalPriceText: this.props.resources.originalPriceText,\n currentPriceText: this.props.resources.currentPriceText\n };\n }\n\n private readonly _onRemoveSelection = (): void => {\n const { context, resources } = this.props;\n const { telemetry } = context;\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n const maxWaitTimeInMilliSeconds: number = 1000;\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(async () => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n this.setState({\n userMessage: removeSelectedFailureMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n });\n }\n };\n\n private readonly _getOrderTemplatePageUrl = (): string => {\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n if (this.props.data.orderTemplate?.result?.productList.Id) {\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\n }\n return '';\n };\n\n private readonly _onAddSelectionToBag = async (): Promise => {\n const lines = this.state.productSelection;\n const selectedLines = lines.filter(line => line.isChecked);\n if (selectedLines.length > 0) {\n for (const productLine of selectedLines) {\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\n const product = productLine.fullProduct?.ProductDetails ?? {\n RecordId: 0,\n ProductTypeValue: 0,\n BasePrice: 0,\n Price: 0,\n AdjustedPrice: 0\n };\n const quantity = productLine.productListLine.Quantity ?? 0;\n this._addItemToBag(product, quantity, itemKey);\n }\n }\n return Promise.resolve(void 0);\n };\n\n private _renderOrderTemplateActions(orderTemplate: OrderTemplate): IOrderTemplateActionsViewProps {\n const { id, typeName, context, resources } = this.props;\n const {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage\n } = resources;\n\n const orderTemplateActions: IOrderTemplateActionsProps = {\n data: { orderTemplate },\n id,\n typeName,\n context,\n telemetryContent: this.telemetryContent,\n handlers: {\n onRenameTemplate: this._renameTemplate,\n onRemoveTemplate: this._removeTemplate\n },\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\n }\n };\n\n return OrderTemplateActionsView(orderTemplateActions);\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\n orderTemplateDescription: '',\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\n };\n }\n\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n return new URL(reqContext.url.requestUrl.href);\n };\n\n /**\n * On close handler.\n */\n private readonly onCloseHandler = () => {\n this.setState({\n itemKey: this.state.itemKey,\n userMessage: this.state.userMessage,\n statusCssString: this.state.statusCssString,\n messageGlyph: this.state.messageGlyph,\n isOpen: this.state.isOpen,\n isItemAddedToOrderTemplateOpen: false\n });\n };\n\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _isFirstPage(): boolean {\n return this._getCurrentPageNumber() === 0;\n }\n\n private _getCurrentPageNumber(): number {\n const itemsPerPage = this.props.config.itemsPerPage || 50;\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\n }\n\n private readonly _renderPagination = (): React.ReactNode | null => {\n const { config, context, data, resources } = this.props;\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\n if (!orderTemplate) {\n return null;\n }\n\n const fullUrl = this._getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 50;\n const currentPageNumber = this._getCurrentPageNumber();\n const skipCount = currentPageNumber * itemsPerPage;\n const totalItems = orderTemplate && orderTemplate.totalLines;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel\n } = this.props.resources;\n\n const { context, telemetry } = this.props;\n const { imageSettings } = this.props.config;\n\n return this.state.productSelection.map((line, index) => {\n const currentProductProps: IOrderTemplateLineProps = {\n orderTemplateLine: line,\n productListLine: line.productListLine,\n price: line.fullProduct?.ProductPrice,\n context,\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\n productUrl: line.fullProduct ? getProductUrlSync(line.fullProduct.ProductDetails, context.actionContext, undefined) : '',\n imageSettings,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n quantity: line.productListLine.Quantity!,\n handlers: {\n onAddToBag: this._addItemToBag,\n onRemoveItem: this._removeItemFromOrderTemplateLines,\n onChangeQuantity: this._changeQuantity,\n onSelect: this.onSelect.bind(this)\n },\n resources: {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed\n };\n\n return OrderTemplateLineView(currentProductProps)!;\n });\n }\n\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\n let state = {\n isDetailsDisplayed: !this.state.isDetailsDisplayed\n };\n if (props) {\n state = {\n ...state,\n ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n }\n };\n }\n this.setState(state);\n };\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _changeQuantity = (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate?.result) {\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex(\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return;\n }\n const prevQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n // Update mobile modal\n if (props) {\n props.quantity = quantity;\n this.setState({\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n }\n\n this.setState({\n isQuantityDisabledForUpdate: true\n });\n\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\n line.productListLine\n ])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isQuantityDisabledForUpdate: false,\n isOpen: false\n });\n if (list) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...orderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\n updatedOrderTemplate\n );\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = resources.editOrderTemplateLineQuantityError;\n if (props) {\n props && (props.productListLine.Quantity = prevQuantity);\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true,\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n } else {\n newProductListLine.productListLine.Quantity = prevQuantity;\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = (product: SimpleProduct, quantity: number, itemKey: string): void => {\n const { context, data, resources, telemetry } = this.props;\n const { cart } = data;\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\n\n if (context) {\n if (cart.result) {\n const addProductToCartInput = {\n product,\n count: quantity\n };\n\n cart.result\n .addProductToCart(addProductToCartInput)\n .then((result: ICartActionResult) => {\n if (result.status === 'SUCCESS') {\n return getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n product.RecordId,\n this.props.context.actionContext.requestContext.apiSettings.channelId,\n product\n ),\n this.props.context.actionContext\n ).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: !isMiniCart,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else if (result.substatus === 'MAXQUANTITY') {\n const cartLineQuantity: number | undefined =\n cart.result?.cart.CartLines &&\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\n this.setState({\n itemKey,\n userMessage:\n cartLineQuantity !== undefined\n ? maxQuantityLimitText\n .replace('{curQuantity}', cartLineQuantity.toString())\n .replace('{maxQuantity}', context.app.config.maxQuantityForCartLineItem.toString()) ||\n defaultMessage\n : defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n })\n .catch((error: Error) => {\n telemetry.warning(error.message);\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n }\n }\n };\n\n private readonly _removeItemFromOrderTemplateLines = (line: IOrderTemplateLineViewModel): void | undefined => {\n const { context, data, telemetry } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const maxWaitTimeInMilliSeconds: number = 1000;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate?.result && line) {\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\n line.productListLine\n ])\n .then(async () => {\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\n );\n }\n }\n };\n\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\n window.location.reload();\n return Promise.resolve();\n };\n\n private readonly _removeTemplate = () => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate && orderTemplate.result) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: orderTemplate.result?.productList.Id || '',\n userMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\n if (newLink) {\n window.location.assign(newLink);\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template.');\n }\n };\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n }\n\n private readonly _getViewport = (): GridSize => {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
\n
\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
\n {paginationNextText}\n
\n );\n };\n}\n\nexport default OrderTemplateLines;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: { cancelBtnLabel, productNumberText, productText, productUnitPriceText, productUOMText, productQuantityText }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n
    \n
  • {detailedProductView?.productImage}
  • \n
  • \n {productText}:\n {detailedProductView?.productInfo}\n
  • \n
  • \n {productNumberText}:\n {detailedProductView?.productNumber}\n
  • \n
  • \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n
  • \n
  • \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n
  • \n
  • \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n
  • \n {productsStatusMessage &&
  • {productsStatusMessage}
  • }\n
\n
\n \n \n \n \n
\n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile\n } = product;\n\n return (\n \n {selectLine}\n {productImage}\n {isMobile ? (\n \n
{productNumber}
\n
\n {quantityLabel}:{` `}\n {productQuantity}\n
\n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n
\n );\n};\n\nexport default OrderTemplateLinesView;\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 { createObservableDataAction, IAction, IActionContext, sendRequest } from '@msdyn365-commerce/core';\n\nimport { SubmitUserReviewInput } from './inputs/submit-user-review-input';\n\n/**\n * This data action allows submitting review to the reviews service.\n * @param input This user review submission text.\n * @param ctx The data action context.\n */\nasync function submitReview(input: SubmitUserReviewInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n ctx.trace(`[SubmitUserReview] Failed to submit reviews for product due to bad input ${input}`);\n return '';\n }\n\n const requestUrl =\n `${input.serviceEndpoint}/v2.0/reviews/product/${input.productId}/user?` +\n `tenantId=${input.tenantId}&` +\n `channelId=${input.channelId}&` +\n `locale=${input.locale}`;\n\n return sendRequest(requestUrl, 'post', input.userReviewData, { headers: { Authorization: `id_token ${input.authorization}` } })\n .then(response => {\n if (response.status !== 200 && response.status !== 201) {\n ctx.trace('[SubmitUserReview] Failed to submit reviews for product');\n ctx.trace(response.data);\n return '';\n }\n return response.data;\n })\n .catch(error => {\n ctx.trace('[SubmitUserReview] Failed to submit reviews for product');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[SubmitUserReview] Failed to submit reviews for product');\n ctx.trace(error);\n return '';\n });\n}\n\nfunction inputIsValid(input: SubmitUserReviewInput): boolean {\n return input && !!input.productId && !!input.tenantId;\n}\n\nexport const submitReviewDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/submit-user-review',\n action: >submitReview\n});\n\nexport default submitReviewDataAction;\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\nimport { IUserReviewData } from './submit-user-review-input-data';\n\n/**\n * SubmitUserReview Input Action.\n */\nexport class SubmitUserReviewInput implements IActionInput {\n /**\n * The Id representing the product to get the ratings for.\n */\n public productId?: string;\n\n /**\n * The ID representing the tenant.\n */\n public tenantId: string;\n\n /**\n * The calling organization's channel id.\n */\n public channelId: string;\n\n /**\n * The locale for which to get the ratings from.\n */\n public locale: string;\n\n /**\n * The user's review data.\n */\n public userReviewData: IUserReviewData;\n\n /**\n * The user's authorization token.\n */\n public authorization: string;\n\n /**\n * The ratings and reviews service endpoint.\n */\n public serviceEndpoint: string;\n\n constructor(\n productId: string | undefined,\n tenantId: string,\n channelId: string,\n locale: string,\n userReviewData: IUserReviewData,\n authorization: string,\n serviceEndpoint: string\n ) {\n this.productId = productId;\n this.tenantId = tenantId;\n this.channelId = channelId;\n this.locale = locale;\n this.userReviewData = userReviewData;\n this.authorization = authorization;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'SubmitUserReview';\n\n public getCacheObjectType = () => 'SubmitUserReview';\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 { getUrlSync, IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getRnrAuthEndpointId, getRnrPartnerId } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\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 { GetUserReviewInput } from '../actions/inputs/get-user-review-input';\nimport { SubmitUserReviewInput } from '../actions/inputs/submit-user-review-input';\nimport submitUserReview from '../actions/submit-user-review';\n\nexport interface IReviewModalProps {\n userReview?: Review;\n product?: SimpleProduct;\n renderContextId: string;\n resources: IReviewModalResources;\n context: ICoreContext>;\n parentId: string;\n parentType: string;\n isOpen: boolean;\n rating: number;\n reviewTitle: string;\n reviewText: string;\n returnRef: React.RefObject | undefined;\n hasError: boolean;\n telemetryContent?: ITelemetryContent;\n onModalToggle(): void;\n onTitleChange(event: React.ChangeEvent): void;\n onTextChange(event: React.ChangeEvent): void;\n onRatingChange(value: number): void;\n onReviewComplete?(isSuccess: boolean): void;\n}\n\nexport interface IReviewModalResources {\n selectRatingAriaLabel: string;\n selectRatingLabel: string;\n reviewTitleLabel: string;\n reviewTextLabel: string;\n privacyPolicyTitle: string;\n privacyPolicyTextFormat: string;\n writeReviewModalTitle: string;\n editReviewModalTitle: string;\n submitReviewButtonText: string;\n discardReviewButtonText: string;\n errorMessageText: string;\n reviewTitleAriaLabel?: string;\n reviewAriaLabel?: string;\n}\n\nexport interface IReviewModalViewProps {\n modal: INodeProps;\n modalHeader: React.ReactElement;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n rating: React.ReactElement;\n ratingLabel: React.ReactElement;\n titleInput: React.ReactElement;\n titleLabel: React.ReactElement;\n textInput: React.ReactElement;\n textLabel: React.ReactElement;\n privacyPolicyUrl: React.ReactElement;\n form: INodeProps;\n inputRow: INodeProps;\n error: React.ReactElement;\n}\n\n/**\n * On Click Submit.\n * @param props -Review Modal props.\n * @returns On submit.\n */\nconst onClickSubmit = (props: IReviewModalProps) => () => {\n onSubmit(props);\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const ReviewModal = (props: IReviewModalProps): IReviewModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SubmitReview);\n const submitButtonAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelButtonAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return {\n modal: {\n tag: Modal,\n className: 'ms-review-modal msc-modal-input-required',\n toggle: props.onModalToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: modalHeaderNode(props),\n modalFooter: { tag: ModalFooter, className: 'ms-review-modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-review-modal-body' },\n cancelButton: (\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 } 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 ? '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) {\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) {\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 });\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: 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 { SearchSuggestion, SearchSuggestionCriteria } from '@msdyn365-commerce/retail-proxy';\nimport { getSearchSuggestionsAsync } 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 * 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\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise {\n const catalogId = getCatalogId(ctx.requestContext);\n const searchCriteria: SearchSuggestionCriteria = {\n 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 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 } 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 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 {\n AddToOrderTemplateComponent,\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateActionErrorResult,\n IOrderTemplateNameDialogResources\n} from '@msdyn365-commerce/components';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n getConfigureErrors,\n IBuyboxCallbacks,\n IBuyboxCommonResources,\n IBuyboxData,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport * as React from 'react';\n\nimport { IBuyboxProps as IBuyboxExtentionProps } from '../../definition-extensions/buybox.ext.props.autogenerated';\n\n/**\n * To generate AddToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of AddToOrderTemplateDialog resources..\n */\nfunction generateAddToOrderTemplateDialogResources(resources: IBuyboxCommonResources): 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 * To generate OrderTemplateNameDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of OrderTemplateNameDialog resources..\n */\nfunction generateOrderTemplateNameDialogResources(resources: IBuyboxCommonResources): 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 * To generate ItemAddedToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of ItemAddedToOrderTemplateDialog resources..\n */\nfunction generateItemAddedToOrderTemplateDialogResources(resources: IBuyboxCommonResources): 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.priceFree,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n}\n\n/**\n * To generate DuplicateItemsWhenAddingToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of DuplicateItemsWhenAddingToOrderTemplateDialog resources..\n */\nfunction generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: IBuyboxCommonResources\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 * Add to wishlist failed function.\n * @param callbacks -Buybox callbacks.\n * @param resources -Buybox resources.\n * @param product -Simple product.\n * @returns Update error state.\n */\nconst onAddToOrderTemplateFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\n result: IOrderTemplateActionErrorResult\n) => {\n callbacks.updateErrorState({\n errorHost: 'ORDER_TEMPLATE',\n configureErrors:\n result.status === 'MISSING_DIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\n });\n};\n\n/**\n * RenderAddToOrderTemplateButton.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @param product - Product data.\n * @returns -- Returns JSX element.\n */\nexport const renderAddToOrderTemplateButton = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n product: SimpleProduct\n): React.ReactNode => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file.\n id,\n typeName,\n context,\n data: {\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n resources\n } = props;\n\n const { quantity } = state;\n\n const isShowButtonText = true;\n\n return (\n orderTemplates && (\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 { AddToWishlistComponent, IWishlistActionErrorResult } from '@msdyn365-commerce/components';\nimport { format, ItemAvailability, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n getConfigureErrors,\n IBuyboxAddToCartViewProps,\n IBuyboxCallbacks,\n IBuyboxCommonResources,\n IBuyboxData,\n IBuyboxFindInStoreViewProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxResources as IBuyboxExtentionResources,\n IBuyboxShopSimilarLookViewProps,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { IncrementalQuantity, INodeProps, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IBuyboxProps as IBuyboxExtentionProps, IBuyboxProps } from '../definition-extensions/buybox.ext.props.autogenerated';\nimport { renderAddToOrderTemplateButton } from './components/buybox-add-to-order-template';\n\n/**\n * BuyBoxConstants enum.\n */\nexport enum BuyBoxConstants {\n zero = 0\n}\n\n/**\n * On Change function.\n * @param callbacks -Callbacks.\n * @returns Update quantity.\n */\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\n if (callbacks.updateQuantity) {\n return callbacks.updateQuantity(newValue);\n }\n return true;\n};\n\n/**\n * RenderQuantity.\n * @param quantityComponent - QuantityComponent.\n * @param callbacks - Callbacks.\n * @param props - Props.\n * @param state - State.\n * @param extentionResources - ExtentionResources.\n * @param quantityLimitsMessages - QuantityLimitsMessages.\n * @param max - Max.\n * @param telemetryContent - TelemetryContent.\n * @param unitOfMeasure - Unit Of Measure.\n * @returns -- Returns.\n */\nconst renderQuantity = (\n quantityComponent: IBuyboxProductQuantityViewProps,\n callbacks: IBuyboxCallbacks,\n props: IBuyboxProps,\n state: IBuyboxState,\n extentionResources: IBuyboxExtentionResources,\n quantityLimitsMessages: React.ReactNode,\n\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n max: number | undefined,\n telemetryContent?: ITelemetryContent,\n unitOfMeasure?: React.ReactNode\n): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\n\n const { resources } = props;\n\n const { quantity } = state;\n\n return (\n \n \n {heading}\n {errors}\n \n\n \n {unitOfMeasure}\n {quantityLimitsMessages}\n \n );\n};\n\n/**\n * Render key in price function.\n * @param keyInPrice - KeyInPrice.\n * @returns -- Returns.\n */\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\n\n return (\n \n {heading}\n {input}\n \n );\n};\n\n/**\n * RenderAddToCart.\n * @param addToCart - AddToCart.\n * @returns -- Returns.\n */\nconst renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, errorBlock, button } = addToCart;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\n/**\n * RenderFindInStore.\n * @param findInStore - FindInStore.\n * @returns -- Returns.\n */\nconst renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\n\n return (\n \n {storeSelector}\n {heading}\n {productPickupOptionList}\n {description}\n {errors}\n {button}\n {modal}\n \n );\n};\n\n/**\n * RenderAddToOrderTemplate.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @returns -- Returns.\n */\nconst renderAddToOrderTemplate = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): JSX.Element | null => {\n const product = props.data.product.result;\n if (!props.addToOrderTemplate || !product) {\n return null;\n }\n\n const orderTemplateButton = renderAddToOrderTemplateButton(props, state, callbacks, product);\n\n return (\n \n {props.addToOrderTemplate.errorBlock}\n {orderTemplateButton}\n \n );\n};\n\n/**\n * Add to wishlist failed function.\n * @param callbacks -Buybox callbacks.\n * @param resources -Buybox resources.\n * @param product -Simple product.\n * @returns Update error state.\n */\nconst onAddToWishlistFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\n result: IWishlistActionErrorResult\n) => {\n callbacks.updateErrorState({\n errorHost: 'WISHLIST',\n configureErrors:\n result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\n });\n};\n\n/**\n * RenderAddToWishlist.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @param product - Product data.\n * @returns -- Returns.\n */\nconst renderAddtoWishlistButton = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n product: SimpleProduct\n): React.ReactNode => {\n const { context, resources } = props;\n const wishlists = props.data.wishlists.result;\n const isShowWishlitButtonText = true;\n return (\n \n );\n};\n\n/**\n * RenderAddToWishlist.\n * @param props - Buybox viewprops.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @returns -- Returns.\n */\nconst renderAddToWishlist = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): JSX.Element | null => {\n const product = props.data.product.result;\n if (!props.addToWishlist || !product) {\n return null;\n }\n\n if (!props.config.enableWishlist) {\n return null;\n }\n\n const wishlistButton = renderAddtoWishlistButton(props, state, callbacks, product);\n return (\n \n {props.addToWishlist.errorBlock}\n {wishlistButton}\n \n );\n};\n\n/**\n * RRenderShopSimilarItem.\n * @param shopSimilarItem - ShopSimilarItem.\n * @returns -- Returns.\n */\nconst renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, errors, input } = shopSimilarItem;\n\n return (\n \n {errors}\n {input}\n \n );\n};\n\n/**\n * RenderSocialShare.\n * @param socialShare - Social share react node array.\n * @returns -- Returns.\n */\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\n if (!socialShare || socialShare.length === 0) {\n return undefined;\n }\n\n return <>{socialShare[0]};\n};\n\n/**\n * RenderConfigureDropdown.\n * @param dropdown - Buybox product configure dropdown view props.\n * @returns -- Returns JSX.Element.\n */\nconst renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n {heading}\n {select}\n {errors}\n \n );\n};\n\n/**\n * RenderConfigure.\n * @param configure - Buybox product configure view props.\n * @returns -- Returns JSX.Element.\n */\nconst renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n};\n\n/**\n * BuyboxView.\n * @param props - Props.\n * @returns -- Returns.\n */\nconst BuyboxView: React.FC> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const {\n ModuleProps,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n MediaGalleryContainerProps,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n ProductInfoContainerProps,\n addToCart,\n addToOrderTemplate,\n addToWishlist,\n productComparisonButton,\n configure,\n description,\n findInStore,\n quantity,\n price,\n title,\n rating,\n inventoryLabel,\n shopSimilarLook,\n keyInPrice,\n shopSimilarDescription,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n max,\n unitOfMeasure,\n callbacks,\n state,\n resources,\n quantityLimitsMessages,\n telemetryContent,\n app: { config: appConfig }\n } = props;\n let skuText: string = props.resources.skuText;\n skuText += props.data.product.result?.ItemId;\n const preferredStoreInfo: IStoreInfo | undefined = props.data.storeSelectorStateManager.result?.preferredStore;\n const preferredStoreId = preferredStoreInfo?.StoreId ? preferredStoreInfo.StoreId : '';\n const preferredStoreName = preferredStoreInfo?.StoreName ? preferredStoreInfo.StoreName : '';\n\n const [availability, setAvailability] = React.useState('');\n const [isStoreChange, setIsStoreChange] = React.useState(false);\n\n /**\n * GetStockInventoryLabel.\n * @param availabilityWithHours - Stock availability with hours.\n * @returns -- Returns.\n */\n const getStockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\n for (const productInventoryInformation of availabilityWithHours.ProductInventoryInformation) {\n if (\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n productInventoryInformation.InventLocationId\n ) {\n return productInventoryInformation.StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n const getInventory = React.useCallback(async () => {\n const input = new GetFullAvailableInventoryNearbyInput(\n props.data.product.result?.RecordId,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n true\n );\n\n /**\n * IsProductInStock.\n * @param itemAvailabilities - Item availability array.\n * @returns -- Returns.\n */\n const isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\n if (!appConfig.enableStockCheck) {\n return true;\n }\n\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[BuyBoxConstants.zero].AvailableQuantity! > BuyBoxConstants.zero;\n }\n\n return false;\n };\n\n await getFullAvailableInventoryNearby(input, props.context.actionContext)\n .catch((error: Error) => {\n props.telemetry.error(error.message);\n })\n .then(response => {\n if (response && ArrayExtensions.hasElements(response)) {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreId;\n const filteredFullOrgUnitAvailability = response.filter(isPreferredStore);\n const preferredStoreAvailability = ArrayExtensions.hasElements(filteredFullOrgUnitAvailability)\n ? filteredFullOrgUnitAvailability[BuyBoxConstants.zero]\n : undefined;\n const stockStatusLabel: string | undefined = getStockInventoryLabel(preferredStoreAvailability);\n const isInStock = isProductInStock(preferredStoreAvailability?.OrgUnitAvailability?.ItemAvailabilities);\n const resourceLabel = isInStock ? props.resources.inStockText : props.resources.outOfStockText;\n const stockText: string | undefined = stockStatusLabel ? stockStatusLabel : resourceLabel;\n const preferredStoreAvailabilityText = `${format(\n props.resources.availabilityAtPreferredStoreText,\n preferredStoreName\n )} ${stockText}`;\n setAvailability(preferredStoreAvailabilityText);\n }\n });\n\n setIsStoreChange(false);\n }, [\n props.data.product.result?.RecordId,\n appConfig.enableStockCheck,\n preferredStoreId,\n preferredStoreName,\n props.context.actionContext,\n props.resources.availabilityAtPreferredStoreText,\n props.resources.inStockText,\n props.resources.outOfStockText,\n props.telemetry\n ]);\n\n React.useEffect(() => {\n if (props.config.displayStockAvailability) {\n getInventory().catch((error: Error) => {\n props.telemetry.error(error.message);\n });\n }\n }, [getInventory, isStoreChange, props.telemetry, props.config.displayStockAvailability]);\n\n reaction(\n () => props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\n () => {\n setIsStoreChange(true);\n }\n );\n\n /**\n * RenderAvailabiltyAtPreferredStore.\n * @returns -- Returns.\n */\n const renderAvailabilityAtPreferredStore = (): JSX.Element | undefined => {\n const hasProductDimensions = ArrayExtensions.hasElements(props.data.product.result?.Dimensions);\n if (hasProductDimensions && props.data.product.result?.MasterProductId === undefined) {\n return undefined;\n }\n const containerProps: INodeProps = {\n className: 'ms-buybox__preferred-store-availability',\n tag: 'span'\n };\n\n return {availability};\n };\n return (\n \n {props.mediaGallery}\n \n {title}\n \n
    {skuText}
    \n {rating}\n
    \n \n
    {props.resources.priceText}
    \n {price}\n
    \n {configure && renderConfigure(configure)}\n {keyInPrice && renderKeyInPrice(keyInPrice)}\n \n
    \n {quantity &&\n renderQuantity(\n quantity,\n callbacks,\n props,\n state,\n resources,\n quantityLimitsMessages,\n max,\n telemetryContent,\n unitOfMeasure\n )}\n {props.bulkPurchaseLink}\n
    \n
    \n {props.config.displayStockAvailability && preferredStoreId && renderAvailabilityAtPreferredStore()}\n {inventoryLabel}\n {renderAddToCart(addToCart)}\n {findInStore && renderFindInStore(findInStore)}\n {addToWishlist && renderAddToWishlist(props, state, callbacks)}\n {productComparisonButton}\n {addToOrderTemplate && renderAddToOrderTemplate(props, state, callbacks)}\n {findInStore?.productPickupOptionList ? (\n
    {findInStore.productPickupOptionList}
    \n ) : null}\n {_renderSocialShare(props.slots && props.slots.socialShare)}\n
    {props.resources.shopText}
    \n \n {shopSimilarLook && renderShopSimilarItem(shopSimilarLook)}\n {shopSimilarDescription && renderShopSimilarItem(shopSimilarDescription)}\n \n \n
    {props.resources.descriptionText}
    \n {description}\n
    \n {ArrayExtensions.hasElements(props.slots.productSpecification) ? (\n {props.slots.productSpecification[0]}\n ) : null}\n
    \n
    \n );\n};\n\nexport default BuyboxView;\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 (\n
    \n \n {props.resources.totalPriceFormatString}\n {totalPrice}\n \n
    \n );\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 {renderCartlines(this.props.cartlines, this.props)}\n \n \n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n

    {this.props.resources.subTotalMessage}

    \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