{"version":3,"file":"static/js/32.a141b122da797b3c83fa.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/b2b/views/navigation-menu.view.tsx?abe4","webpack://Msdyn365.Commerce.Online/./src/themes/b2b/views/organization-users-tile.view.tsx?d3b0","webpack://Msdyn365.Commerce.Online/./src/modules/business-sign-up/components/sign-up-button.tsx?e1d9","webpack://Msdyn365.Commerce.Online/./src/modules/business-sign-up/components/sign-up-error.tsx?7f8a","webpack://Msdyn365.Commerce.Online/./src/modules/business-sign-up/components/sign-up-input.tsx?5bbe","webpack://Msdyn365.Commerce.Online/./src/modules/business-sign-up/components/sign-up-label.tsx?4988","webpack://Msdyn365.Commerce.Online/./src/modules/business-sign-up/business-sign-up.tsx?13a2","webpack://Msdyn365.Commerce.Online/./src/modules/business-sign-up/business-sign-up.view.tsx?e2f8","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/components/accept-button.tsx?8e73","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/components/links.tsx?97b8","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/cookie-compliance.tsx?02ac","webpack://Msdyn365.Commerce.Online/./src/modules/cookie-compliance/cookie-compliance.view.tsx?a33f","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/header.view.tsx?6d84","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-button/product-comparison-button.tsx?9384","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-button/product-comparison-button.view.tsx?94a7","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-pickup-option-list.tsx?7a25","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-lines.tsx?87ff","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-search-form.tsx?fb9a","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-small-components.tsx?4335","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/pickup-option-list.tsx?dae0","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?fe27","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?923d","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/components/selected-store/selected-store.tsx?bfbc","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/store-selector.tsx?e416","webpack://Msdyn365.Commerce.Online/./src/modules/store-selector/store-selector.view.tsx?71a6","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/cart.view.tsx?3909","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/content-block.view.tsx?0db4","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/footer-item.view.tsx?15be","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/store-selector.view.tsx?ccdd"],"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 { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n categoryImageAltText: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private currentLevel: number = 0;\r\n private escapeKey: number = 27;\r\n private menuNode: React.RefObject;\r\n private telemetryContent: ITelemetryContent;\r\n private payLoad: IPayLoad;\r\n constructor(props: INavigationMenuViewProps & INavigationMenuProps<{}>) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._escFunction = this._escFunction.bind(this);\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView } = this.props;\r\n\r\n this.currentLevel = 1;\r\n return {isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { isMobileView, menuItemData, Navigation } = this.props;\r\n return (\r\n \r\n {menuItemData.map((menuItem: IMenuItemData) => {\r\n return this._renderDrawerMenu(menuItem);\r\n })}\r\n \r\n );\r\n }\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props;\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDrawerMenu(menuItem: IMenuItemData): JSX.Element | null {\r\n if (menuItem && menuItem.subMenu && menuItem.subMenu.length > 0) {\r\n return this._renderDrawer(menuItem);\r\n } else {\r\n return this._renderLinkMenuItem(menuItem);\r\n }\r\n }\r\n\r\n private _renderDrawer(menuItem: IMenuItemData): JSX.Element | null {\r\n const toggleButtonText = menuItem.linkText;\r\n // VSI-Customizations start\r\n const categoriesToExclude = this.props.config.categoriesToExclude || [];\r\n const categoryMatched = !categoriesToExclude.some(cate => cate.toLowerCase().trim() === toggleButtonText?.toLowerCase().trim());\r\n return categoryMatched ? (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n ) : null;\r\n }\r\n\r\n private _renderLinkText(linkText: string | undefined): JSX.Element {\r\n return {linkText};\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(item);\r\n } else if (item && item.linkText && !item.linkURL) {\r\n return this._renderSpanMenuItem(item);\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData, isMobileView } = this.props;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n // VSI-Customizations start\r\n const categoriesToExclude = this.props.config.categoriesToExclude || [];\r\n if (categoriesToExclude.length > 0) {\r\n for (let index = 0; index < categoriesToExclude.length; index++) {\r\n const cateIndex = menuItemData.findIndex(menu => menu.linkText?.toLowerCase() === categoriesToExclude[index].toLowerCase());\r\n if (cateIndex >= 0) {\r\n menuItemData.splice(cateIndex, 1);\r\n }\r\n }\r\n }\r\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\r\n let menuItem: IMenuItemData = {};\r\n for (let i = 0; i < menuItemData.length; i++) {\r\n if (menuItemData[i] && menuItemData[i].id === activeMenu) {\r\n menuItem = menuItemData[i];\r\n this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemData[i].linkText });\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemData[i]) as IMenuItemData;\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n menuItem &&\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}{' '}\r\n \r\n );\r\n } else {\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n }\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item && item.subMenu;\r\n if (subMenus && subMenus.length > 0) {\r\n for (let i = 0; i <= subMenus.length - 1; i++) {\r\n if (subMenus[i].id === this.state.activeMenu) {\r\n this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\r\n return subMenus[i];\r\n }\r\n const found = this._getFromSubMenu(subMenus[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\r\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false);\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return this._renderSpanMenuItem(menuItemData);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\r\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\r\n // const isParentMenu:boolean= false;\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions =\r\n subMenus &&\r\n subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = option.subMenu && option.subMenu.length > 0;\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\r\n }\r\n let subMenu;\r\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\r\n if (haveSubmenu) {\r\n this.currentLevel++;\r\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\r\n }\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, hoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n // VSI-Customizations start\r\n const categoriesToExclude = this.props.config.categoriesToExclude || [];\r\n const categoryMatched = !categoriesToExclude.some(cate => cate.toLowerCase().trim() === linkText.toLowerCase().trim());\r\n if (categoryMatched) {\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n return null;\r\n }\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n {linkText}\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\r\n const categoryImageDisplay =\r\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\r\n const promotionalContentDisplay =\r\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\r\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = 1;\r\n return (\r\n \r\n 2 &&\r\n 'navmenu-multi-level'\r\n )}\r\n >\r\n {menuOptions}\r\n \r\n {categoryImageDisplay &&\r\n this.state.categoryImage &&\r\n this.state.categoryImage.map(item => (\r\n \r\n {this.state.categoryImage && this._getCategoryImage(item?.src!, item.altText!.toString())}\r\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n \r\n ))}\r\n \r\n );\r\n }\r\n private _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\r\n const linkText = option && option.linkText ? option.linkText : '';\r\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n option.promotionalContent.map(item => {\r\n if (item && item.image) {\r\n const imageSrc = item.image.src;\r\n promotionalImage.push({\r\n src: imageSrc,\r\n altText: item.text,\r\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\r\n });\r\n }\r\n });\r\n }\r\n this.setState({\r\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\r\n categoryImageAltText: linkText\r\n });\r\n };\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\r\n parentMenu: parentId\r\n });\r\n if (this.props.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n private _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey) {\r\n this._closeSubmenu();\r\n }\r\n };\r\n private _getCategoryImage = (categoryImage: string, alttext: string): React.ReactNode | null => {\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, this.props.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const ImageData: IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport default NavigationMenuView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IOrganizationUsersTileViewProps } from '@msdyn365-commerce-modules/account-management/src/modules/organization-users-tile/./organization-users-tile';\r\n\r\nconst OrganizationUsersTileView: React.FC = props => {\r\n const { OrganizationUsersTile, heading, description, links } = props;\r\n const user = props.context.actionContext.requestContext.user;\r\n\r\n return (\r\n // @ts-ignore\r\n user.isB2b ? (\r\n \r\n {heading}\r\n {description}\r\n {links}\r\n \r\n ) : null\r\n );\r\n};\r\n\r\nexport default OrganizationUsersTileView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IBusinessSignUpButtonProps {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n link?: string;\n telemetryContent: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nexport const SignUpButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n telemetryContent,\n disabled,\n link,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent, text);\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n return (\n \n {text}\n \n );\n};\n\nexport default SignUpButton;\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\nexport interface IBusinessSignUpErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nexport const SignUpError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n

{message}

\n \n );\n};\n\nexport default SignUpError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { InputType } from '../business-sign-up';\n\nexport interface IBusinessSignUpInputProps {\n id?: string;\n type: InputType;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n isRequired: boolean;\n fieldReference?: React.RefObject;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface IBusinessSignUpInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nexport const SignUpInput: React.FC = ({\n id,\n type,\n value,\n pattern,\n className,\n maxLength,\n isRequired,\n onChange,\n fieldReference\n}) => {\n if (type === InputType.TextArea) {\n return (\n \n );\n }\n\n return (\n \n );\n};\n\nexport default SignUpInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IBusinessSignUpLabelProps {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nexport const SignUpLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default SignUpLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent, getUrlSync, RichTextComponent, Text } from '@msdyn365-commerce/core';\nimport { Address, BusinessPartnerProspect } from '@msdyn365-commerce/retail-proxy';\nimport { createProspectAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\nimport { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBusinessSignUpConfig, IBusinessSignUpProps } from './business-sign-up.props.autogenerated';\nimport { SignUpButton, SignUpError, SignUpInput, SignUpLabel } from './components';\n\nexport interface IBusinessSignUpExtendedProps extends IBusinessSignUpProps {\n formItems?: IFormItem[];\n}\n\nexport interface IBusinessSignUpItem {\n wrapper: INodeProps;\n isAddressInput?: boolean;\n id: string;\n label: React.ReactNode;\n errorMessage: React.ReactNode;\n input?: React.ReactNode;\n}\n\nexport interface IBusinessState {\n isReady: boolean;\n formItems: IFormItem[];\n addressHasErrors: boolean;\n showAddressErrors: boolean;\n hasSubmitErrors: boolean;\n}\n\nexport interface IBusinessSignUpLocalAccount {\n FormWrapper: INodeProps;\n items: IBusinessSignUpItem[];\n buttons: React.ReactNode[];\n errorMessage: React.ReactNode[];\n disclaimer: React.ReactNode;\n}\n\nexport interface IBusinessSignUpViewProps {\n className: string;\n businessSignUp: IModuleProps;\n ContainerWrapper: INodeProps;\n heading: React.ReactNode;\n businessSignUpForm: IBusinessSignUpLocalAccount;\n formItems: IFormItem[];\n}\n\nexport interface IFormItem {\n id: string;\n type: InputType;\n label: string;\n value: string;\n maxChars?: string;\n isRequired: boolean;\n pattern?: string;\n address?: Address;\n customClass?: string;\n fieldReference?: React.RefObject;\n}\n\nexport enum InputType {\n // eslint-disable-next-line @typescript-eslint/no-shadow -- Text enum doesn't override the imported Text\n Text = 'text',\n Address = 'address',\n Email = 'email',\n TextArea = 'textarea'\n}\n\nexport enum InputID {\n FirstName = 'FirstName',\n LastName = 'LastName',\n Email = 'CompanyEmail',\n CompanyName = 'CompanyName',\n Address = 'CompanyAddress',\n JobTitle = 'JobTitle',\n Size = 'CompanySize',\n Department = 'Department',\n Comment = 'Comment'\n}\n\nexport const renderInputSection = (\n inputs: IFormItem[],\n className: string,\n needToReset: boolean,\n onInputChange: (event: React.ChangeEvent) => void,\n showErrors: boolean,\n addressForm?: React.ReactNode,\n updateAddress?: (errors: boolean, currAddress?: Address) => void\n): IBusinessSignUpItem[] => {\n return inputs.map((element, index) => {\n const { id, type, label, maxChars, isRequired, pattern, customClass, value, fieldReference } = element;\n\n const baseSignUpItem: IBusinessSignUpItem = {\n wrapper: {\n className: classnames(className, `${className}-${id}`, customClass)\n },\n id,\n label: ,\n errorMessage: \n };\n\n if (type === InputType.Address) {\n if (addressForm) {\n baseSignUpItem.isAddressInput = true;\n baseSignUpItem.input = (\n <>\n {React.cloneElement(addressForm as React.ReactElement, {\n updateForm: updateAddress,\n hasError: showErrors,\n isRequired: isRequired === undefined ? false : isRequired,\n resetAddress: needToReset\n })}\n \n );\n } else {\n // If the address slot is not filled, remove this input from the form\n inputs.splice(index, 1);\n }\n } else {\n baseSignUpItem.input = (\n \n );\n }\n\n return baseSignUpItem;\n });\n};\n\n/**\n *\n * Business Request Form Modules\n * Form that a business can use to submit a request to become a partner with Microsoft.\n * @extends {React.Component>}\n */\nclass BusinessSignUp extends React.Component {\n // Used as default data\n public BusinessSignUpDefaultInputs: IFormItem[] = [\n {\n id: InputID.FirstName,\n type: InputType.Text,\n label: this.props.resources.firstNameLabel,\n value: '',\n isRequired: true,\n customClass: 'width-25'\n },\n {\n id: InputID.LastName,\n type: InputType.Text,\n label: this.props.resources.lastNameLabel,\n value: '',\n isRequired: true,\n customClass: 'width-25'\n },\n {\n id: InputID.Email,\n type: InputType.Email,\n label: this.props.resources.emailAddressLabel,\n value: '',\n isRequired: true,\n pattern: EmailRegex.defaultRegex.source,\n customClass: 'width-50'\n },\n {\n id: InputID.CompanyName,\n type: InputType.Text,\n label: this.props.resources.companyLabel,\n value: '',\n isRequired: true,\n customClass: 'width-50'\n },\n {\n id: InputID.Department,\n type: InputType.Text,\n label: this.props.resources.departmentLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.JobTitle,\n type: InputType.Text,\n label: this.props.resources.jobTitleLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.Size,\n type: InputType.Text,\n label: this.props.resources.companySizeLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.Address,\n type: InputType.Address,\n label: this.props.resources.companyAddressLabel,\n value: '',\n isRequired: false,\n customClass: 'width-100'\n },\n {\n id: InputID.Comment,\n type: InputType.TextArea,\n label: this.props.resources.commentLabel,\n value: '',\n isRequired: false,\n customClass: 'width-100'\n }\n ];\n\n private readonly formChildReference: React.RefObject = React.createRef();\n\n private readonly moduleClassName: string = 'ms-business-sign-up';\n\n private needsToReset: boolean = false;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IBusinessSignUpExtendedProps) {\n super(props);\n\n this.state = {\n isReady: false,\n formItems: this.props.formItems || this._addedReference(),\n addressHasErrors: false,\n showAddressErrors: false,\n hasSubmitErrors: 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 componentDidMount(): void {\n this.formChildReference.current?.focus();\n }\n\n public shouldComponentUpdate(nextProps: IBusinessSignUpExtendedProps, nextState: IBusinessState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { config } = this.props;\n const { formItems } = this.state;\n const { className, heading } = config;\n\n const viewProps = {\n ...this.props,\n businessSignUp: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, className)\n },\n ContainerWrapper: {\n className: `${this.moduleClassName}__container`\n },\n heading: (\n \n ),\n businessSignUpForm: this._renderForm(),\n formItems\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle the heading change event.\n * @param event - Content Editable Event.\n */\n public handleHeadingChange = (event: ContentEditableEvent): void => {\n this.props.config.heading.text = event.target.value;\n };\n\n private _renderForm(): IBusinessSignUpLocalAccount {\n const { config, resources, slots } = this.props;\n const { showAddressErrors, hasSubmitErrors, isReady, formItems } = this.state;\n const {\n signUpButtonArialabel,\n signUpButtonText,\n cancelButtonArialabel,\n cancelButtonText,\n errorMessage,\n partialAddressErrorMessage\n } = resources;\n const addressForm = (slots && slots.addressSlot && slots.addressSlot.length > 0 && slots.addressSlot[0]) || undefined;\n\n const form = {\n FormWrapper: {\n className: `${this.moduleClassName}__form `\n },\n items: renderInputSection(\n formItems,\n `${this.moduleClassName}__form-item`,\n this.needsToReset,\n this._onInputChange,\n showAddressErrors,\n addressForm,\n this._onAddressChange\n ),\n buttons: [\n ,\n \n ],\n errorMessage: [\n hasSubmitErrors && ,\n showAddressErrors && (\n \n )\n ],\n disclaimer: config.disclaimer && (\n \n )\n };\n\n if (this.needsToReset) {\n this.needsToReset = false;\n }\n\n return form;\n }\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n const newForm = this.state.formItems;\n newForm.forEach(item => {\n if (item.id === event.target.id) {\n item.value = event.target.value;\n }\n });\n\n // Check if form is ready, update state object with latest values, values have changed so reset hasSubmitErrros\n this.setState({\n isReady: this._isFormReady(),\n formItems: newForm,\n hasSubmitErrors: false\n });\n };\n\n private _addedReference(): IFormItem[] {\n const newFormFields = this.BusinessSignUpDefaultInputs;\n newFormFields[0].fieldReference = this.formChildReference;\n return newFormFields;\n }\n\n private readonly _onAddressChange = (errors: boolean, currentAddress?: Address): void => {\n // Find address item\n const newForm = this.state.formItems;\n const addressItem = newForm.find(item => {\n return item.type === InputType.Address;\n });\n\n // If found --> set to currentAddress\n if (addressItem) {\n addressItem.address = currentAddress;\n\n // Update state with new values and set errors to false if address is not required field\n this.setState(\n {\n formItems: newForm,\n addressHasErrors: errors,\n showAddressErrors: false\n },\n () => {\n this.setState({ isReady: this._isFormReady() });\n }\n );\n }\n };\n\n private readonly _isFormReady = (): boolean => {\n const { formItems } = this.state;\n\n for (const currentInput of formItems) {\n // Will return FALSE if:\n // - input field is required\n // IF is address AND addressHasErrors === true\n // ELSE value is undefined OR empty\n // OR\n // - pattern provided and value does not match pattern\n\n if (currentInput.isRequired) {\n if (currentInput.type === InputType.Address) {\n if (this.state.addressHasErrors) {\n return false;\n }\n } else if (currentInput.value === undefined || currentInput.value === '') {\n return false;\n }\n }\n if (currentInput.pattern !== undefined && currentInput.value.match(currentInput.pattern) === null) {\n return false;\n }\n }\n\n return true;\n };\n\n private readonly _onSubmit = (event: React.MouseEvent) => {\n if (this.state.addressHasErrors) {\n this.setState({\n showAddressErrors: true\n });\n\n event.preventDefault();\n return;\n }\n\n const { config, context } = this.props;\n\n // Check for matching id and if not empty\n const firstName = this._getItem(InputID.FirstName);\n const lastName = this._getItem(InputID.LastName);\n const companyName = this._getItem(InputID.CompanyName);\n const companyEmail = this._getItem(InputID.Email);\n const companyAddress = this._getItem(InputID.Address, true);\n const jobTitle = this._getItem(InputID.JobTitle);\n const department = this._getItem(InputID.Department);\n const companySize = this._getItem(InputID.Size);\n const comments = this._getItem(InputID.Comment);\n\n // API gets email as part of the address object, but I do not use the email input from the address component, thus we need to copy it over\n if (companyEmail && companyEmail.value && companyAddress && companyAddress.address) {\n companyAddress.address.Email = companyEmail.value;\n }\n\n const newPartner: BusinessPartnerProspect = {\n FirstName: firstName && firstName.value,\n LastName: lastName && lastName.value,\n CompanyName: companyName && companyName.value,\n Address: companyAddress && companyAddress.address && companyAddress.address,\n JobTitle: jobTitle && jobTitle.value,\n Department: department && department.value,\n CompanySize: (companySize && Number.parseInt(companySize.value, 10)) || 0,\n Comments: comments && comments.value\n };\n\n this.setState({\n isReady: false\n });\n\n // Create business partner request\n createProspectAsync({ callerContext: context.actionContext }, newPartner)\n .then(() => {\n const successPageURL =\n (config.confirmationLink && config.confirmationLink.linkUrl && config.confirmationLink.linkUrl.destinationUrl) ||\n getUrlSync('home', this.props.context.actionContext) ||\n '';\n window.location.href = successPageURL;\n })\n .catch(() => {\n this.setState({\n hasSubmitErrors: true\n });\n });\n };\n\n private readonly _onCancel = () => {\n // Reset values of the form\n const cleanForm = this.state.formItems;\n cleanForm.forEach(input => {\n input.value = '';\n });\n\n // Set reset flag so address input will get reset on next renderInputSection() call\n this.needsToReset = true;\n\n this.setState({\n isReady: false,\n formItems: cleanForm,\n addressHasErrors: true,\n showAddressErrors: false,\n hasSubmitErrors: false\n });\n };\n\n private readonly _getItem = (id: string, isAddress: boolean = false) => {\n if (isAddress) {\n return this.state.formItems.find(item => {\n return item.id === id && item.address;\n });\n }\n return this.state.formItems.find(item => {\n return item.id === id && item.value !== '';\n });\n };\n}\n\nexport default BusinessSignUp;\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 { IBusinessSignUpItem, IBusinessSignUpViewProps } from './business-sign-up';\n\nconst BusinessSignUpItem: React.FC = ({ wrapper, label, errorMessage, input, isAddressInput }) => {\n // Hide label and error message if rendering address section\n return (\n \n {!isAddressInput && label}\n {!isAddressInput && errorMessage}\n {input}\n \n );\n};\n\nconst BusinesSignUpView: React.FC = props => {\n const { businessSignUp, ContainerWrapper, heading, businessSignUpForm } = props;\n\n const { FormWrapper, buttons, items, errorMessage, disclaimer } = businessSignUpForm;\n\n return (\n \n \n {heading}\n \n {items &&\n items.map((item: IBusinessSignUpItem) => {\n return ;\n })}\n {errorMessage &&\n errorMessage.map((error: React.ReactNode, index: number) => {\n return {error};\n })}\n {buttons &&\n buttons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n {disclaimer}\n \n \n \n );\n};\n\nexport default BusinesSignUpView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICookieComplianceAcceptButton {\n acceptCookiesButtonText?: string;\n acceptCookiesButtonAriaLabel?: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const CookieComplianceAcceptButton: React.FC = ({\n acceptCookiesButtonText,\n acceptCookiesButtonAriaLabel,\n telemetryContent,\n onClose\n}) => {\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, 'accept cookies');\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n {acceptCookiesButtonText}\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 { IActionLinksData } from '../cookie-compliance.props.autogenerated';\n\nexport interface ICookieComplianceLinks {\n links: IActionLinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class CookieComplianceLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n }\n\n private readonly _mapEditableLinks = (linkdata: IActionLinksData[]): 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', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\n\nexport default CookieComplianceLinks;\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IAlertProps, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { CookieComplianceAcceptButton, CookieComplianceLinks } from './components';\nimport { ICookieComplianceConfig, ICookieComplianceProps } from './cookie-compliance.props.autogenerated';\n\n/**\n * Alert state interface.\n */\nexport interface IAlertState {\n visible: boolean;\n}\n\n/**\n * Cookie compliance view props interface.\n */\nexport interface ICookieComplianceViewProps extends ICookieComplianceProps<{}> {\n CookieComplianceBanner: IModuleProps;\n AlertProps: IAlertProps;\n Content: INodeProps;\n text?: React.ReactNode;\n links?: React.ReactNode;\n acceptButton?: React.ReactNode;\n className: string;\n onDismiss(): void;\n}\n\n/**\n *\n * CookieCompliance component.\n * @extends {React.PureComponent>}\n */\nclass CookieCompliance extends React.PureComponent, IAlertState> {\n private readonly cookieRef: React.RefObject;\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 constructor(props: ICookieComplianceProps) {\n super(props);\n this.state = { visible: false };\n this.cookieRef = React.createRef();\n this._onDismiss = this._onDismiss.bind(this);\n }\n\n public componentDidMount(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies && !context.request.cookies.isConsentGiven()) {\n this.setState({ visible: true });\n }\n }\n\n public render(): JSX.Element | null {\n const { config, context, resources, telemetry } = this.props;\n const { acceptCookiesButtonText, acceptCookiesAriaLabel } = resources;\n const { visible } = this.state;\n\n const isConsentGiven = context && context.request && context.request.cookies && context.request.cookies.isConsentGiven();\n let moduleConfig: ICookieComplianceConfig;\n\n try {\n moduleConfig = config;\n } catch (error) {\n telemetry.error(`Something went wrong while rendering the alert module ------${error}`);\n return
{error}
;\n }\n\n if (isConsentGiven && !visible) {\n this.props.context.telemetry.error('Cookie Compliance content is empty, module wont render.');\n return null;\n }\n\n if (!MsDyn365.msdyn365Commerce.isBrowser) {\n return <>;\n }\n\n const viewProps = {\n ...this.props,\n onDismiss: this._onDismiss,\n CookieComplianceBanner: {\n moduleProps: this.props,\n className: classnames('ms-cookie-compliance', moduleConfig.className),\n ref: this.cookieRef\n },\n AlertProps: {\n className: 'ms-cookie-compliance__container',\n color: 'white',\n fade: false\n },\n Content: {\n className: 'ms-cookie-compliance__content'\n },\n text: moduleConfig.content && (\n \n ),\n links: ArrayExtensions.hasElements(moduleConfig.actionLinks) && (\n \n ),\n acceptButton: (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles Link content change event.\n * @param linkIndex - Index of link in linkarray.\n * @returns Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.actionLinks?.[linkIndex]) {\n this.props.config.actionLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Handles content change event.\n * @param event - Event.\n */\n public handleContentChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.content = event.target.value;\n };\n\n private _onDismiss(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies) {\n context.request.cookies.setConsentCookie();\n location.reload();\n }\n this.setState({ visible: false });\n }\n}\n\nexport default CookieCompliance;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICookieComplianceViewProps } from './cookie-compliance';\n\nconst CookieComplianceView: React.FC = props => {\n const { CookieComplianceBanner, AlertProps, Content, acceptButton, text, links } = props;\n\n return (\n \n \n \n {text}\n {links}\n \n {acceptButton}\n \n \n );\n};\nexport default CookieComplianceView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { IHeaderViewProps } from '@msdyn365-commerce-modules/header';\nimport { Collapse, Drawer, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nconst headerView: React.FC = props => {\n const { HeaderTag, HeaderContainer, HeaderTopBarContainer, Divider } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {_renderAccountBlock(props, false)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n {_renderCollapseMenu(props)}\n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderCollapseMenu(props: IHeaderViewProps): JSX.Element | null {\n const { Divider, MobileMenuLinksContainer, mobileMenuCollapsed } = props;\n return (\n \n \n {_renderReactFragment(props.search)}\n {_renderMobileAccountBlock(props, true)}\n {props.wishListIconMobile}\n {props.siteOptions}\n \n \n {_renderReactFragment(props.menuBar)}\n \n );\n}\n\nconst renderCustomerName = (accountInformation: AsyncResult): React.ReactChild => {\n const customer = accountInformation && accountInformation.result;\n return <>{customer ? customer.FirstName || customer.Name : ''};\n};\n\nfunction _renderMobileAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\n const { AccountInfoDropdownParentContainer, signOutLink, signInLink, data, accountLinks } = props;\n\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames(\n 'ms-header__drawer',\n AccountInfoDropdownParentContainer.className,\n renderForMobile ? 'account-mobile' : 'account-desktop'\n );\n\n if (accountLinks) {\n return (\n \n
\n {accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false}\n {signOutLink}\n
\n \n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n return null;\n}\n\nfunction _renderAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames(\n AccountInfoDropdownParentContainer.className,\n renderForMobile ? 'account-mobile' : 'account-desktop'\n );\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, Customer, ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ProductComparisonItem, ProductComparisonState } from '../product-comparison-state';\nimport { IProductComparisonButtonProps } from './product-comparison-button.props.autogenerated';\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonButtonViewProps extends IProductComparisonButtonProps<{}> {\n moduleProps: IModuleProps;\n productComparisonButton?: React.ReactNode;\n productComparisonPreview?: React.ReactNode;\n}\n\n/**\n * Represents the data which is required for the product comparison button to be rendered.\n */\nexport interface IProductComparisonButtonData {\n accountInformation?: AsyncResult;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonFullProps extends IProductComparisonButtonProps {\n product: ProductSearchResult | SimpleProduct;\n catalogId: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonState {\n canProductBeAddedToProductComparison: boolean;\n currentProductsCount: number;\n comparisonItemId: string;\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonButton extends React.PureComponent {\n private static _productComparisonPreview?: React.ReactNode;\n\n private readonly _className: string;\n\n private readonly _instanceId: string;\n\n private readonly _shouldUsePreview: boolean;\n\n private static _renderProductComparisonPreview(props: IProductComparisonButtonFullProps): React.ReactNode {\n if (!ProductComparisonButton._productComparisonPreview && ArrayExtensions.hasElements(props.slots.productComparisonPreview)) {\n ProductComparisonButton._productComparisonPreview = props.slots.productComparisonPreview[0];\n }\n\n return ProductComparisonButton._productComparisonPreview;\n }\n\n private static _renderProductComparisonButton(\n className: string,\n buttonText: string | undefined,\n title: string,\n onClickHandler?: () => void\n ): React.ReactNode {\n const isDisabled = ObjectExtensions.isNullOrUndefined(onClickHandler);\n let content: React.ReactNode;\n if (buttonText) {\n content = (\n <>\n
\n
{buttonText}
\n \n );\n }\n return (\n \n );\n }\n\n public constructor(props: IProductComparisonButtonFullProps) {\n super(props);\n\n this._className = 'ms-product-comparison-button';\n this._instanceId = `${this._className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n\n this.state = this._getNewState();\n\n this._shouldUsePreview = !ProductComparisonButton._productComparisonPreview;\n ProductComparisonButton._renderProductComparisonPreview(this.props);\n }\n\n public componentDidMount(): void {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).listModifiedEvent.subscribe(\n {\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this.setState(this._getNewState());\n }\n }\n );\n }\n\n public getSnapshotBeforeUpdate(previousProps: Readonly): void {\n if (previousProps.product.RecordId !== this.props.product.RecordId || previousProps.catalogId !== this.props.catalogId) {\n this.setState(this._getNewState());\n }\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode | null {\n const isConsentGiven = this.props.context.request.cookies.isConsentGiven();\n if (!isConsentGiven) {\n return null;\n }\n\n const viewProps: IProductComparisonButtonViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: this._className\n }\n };\n\n if (this._shouldUsePreview) {\n viewProps.productComparisonPreview = ProductComparisonButton._productComparisonPreview;\n }\n\n const buttonClassName = this.props.config.shouldDisplayText ? `${this._className}__button` : `${this._className}__icon`;\n\n if (!this.state.canProductBeAddedToProductComparison) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.removeFromComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n classnames(`${buttonClassName}__removing`, buttonClassName),\n buttonText,\n this.props.resources.removeFromComparisonButtonText,\n this._removeFromProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit) && productsLimit <= this.state.currentProductsCount) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonLimitReachedButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonLimitReachedButtonText\n );\n return this.props.renderView(viewProps);\n }\n\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonButtonText,\n this._addToProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n private _getProductsLimit(): number | undefined | null {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Adds current product to a product comparison list.\n */\n private readonly _addToProductComparison: () => void = () => {\n const item = new ProductComparisonItem(this.props.product.RecordId, this.props.catalogId);\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).addItem(item);\n };\n\n /**\n * Removes current product from the product comparison list where it was added earlier.\n */\n private readonly _removeFromProductComparison: () => void = () => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).removeItemById(\n this.state.comparisonItemId\n );\n };\n\n private _getProdutComparisonDataByCatalogId(): ProductComparisonItem[] {\n const items = ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).items;\n const catalogId = getCatalogId(this.props.context.request);\n const productByCatalogId = items?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n\n /**\n * Retrieves the state of the component based on the comparison data.\n * @returns State object for the component.\n */\n private readonly _getNewState: () => IProductComparisonButtonState = () => {\n const comparisonItemId = ProductComparisonItem.getItemId(this.props.product.RecordId, this.props.catalogId);\n const products = this._getProdutComparisonDataByCatalogId();\n return {\n comparisonItemId,\n canProductBeAddedToProductComparison: !ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).hasItemById(comparisonItemId),\n currentProductsCount: products.length\n };\n };\n}\n\nexport default ProductComparisonButton;\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 { IProductComparisonButtonViewProps } from './product-comparison-button';\n\n/**\n * Represents product comparison button view.\n * @param props - View props for product comparison button.\n * @returns Functional component of product comparison button.\n */\nexport const ProductComparisonButtonViewFunctionalComponent: React.FC = props => {\n const { productComparisonButton, productComparisonPreview } = props;\n\n return (\n \n {productComparisonButton}\n {productComparisonPreview}\n \n );\n};\n\nexport default ProductComparisonButtonViewFunctionalComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Store Pickup option list interface.\n */\nexport interface IStorePickUpOptionListProps {\n productPickupListOptionMenuText?: string;\n productPickupModeList?: DeliveryOption[];\n defaultOptionText?: string;\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Store Pickup option state interface.\n */\nexport interface IStorePickOptionListState {\n isFilterExpanded: boolean;\n selectedPickupMode?: string;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class StorePickUpOptionList extends React.PureComponent {\n private readonly _storePickupListOptionMenu: React.RefObject;\n\n public constructor(props: IStorePickUpOptionListProps) {\n super(props);\n this._storePickupListOptionMenu = React.createRef();\n this.state = {\n isFilterExpanded: false,\n selectedPickupMode: ''\n };\n }\n\n public render(): JSX.Element {\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\n const selectedPickupModeDesc = defaultOptionText\n ? defaultOptionText\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\n const role = 'menu';\n return (\n
\n \n {this.state.isFilterExpanded ? (\n
    \n {productPickupModeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Method to call when drop dwon get selected.\n */\n private readonly _rendeDeliveryOptions = () => {\n const isExpandOptionsState = this.state.isFilterExpanded;\n this.setState({\n isFilterExpanded: !isExpandOptionsState\n });\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\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 { DeliveryOption, ItemAvailability, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources } from '../store-selector.props.autogenerated';\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './store-selector-location-line-item';\n\n/**\n * Store selector location lines props interface.\n */\nexport interface IStoreSelectorLocationLinesProps {\n locations?: IFullOrgUnitAvailability[];\n resources: IStoreSelectorResources;\n preferredDistanceUnit?: string;\n\n alreadySelectedLocation?: OrgUnitLocation;\n outOfStockThreshold: number;\n enableOutOfStockCheck: boolean;\n storeLocatorView?: boolean;\n selectedStoreLocationId?: string;\n isPreferredStoreEnabled?: boolean;\n displayList?: boolean;\n isLocationDisabled?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n onClick: (locationId: string | undefined) => void;\n preferredStoreLocationId: string | null;\n onSetAsPreferredStore: (locationId: string | undefined) => void;\n onRemovePreferredStore: () => void;\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onLocationSelected(location: OrgUnitLocation | undefined): void;\n}\n\n/**\n * Displays all the location line items, or null if none exists.\n */\n@observer\nexport class StoreSelectorLocationLines extends React.PureComponent {\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\n\n private readonly selectedLocationRef: React.RefObject;\n\n private storeCounter: number;\n\n public constructor(props: IStoreSelectorLocationLinesProps) {\n super(props);\n this.selectedLocationRef = React.createRef();\n this.storeCounter = 0;\n }\n\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\n this._scrollIntoView();\n }\n }\n\n public componentDidMount(): void {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n\n reaction(\n () => this.props.locations,\n () => {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n }\n );\n }\n\n public render(): JSX.Element | null {\n if (!ArrayExtensions.hasElements(this._stores)) {\n return null;\n }\n\n this.storeCounter = 0;\n\n return (\n
\n {this._stores.map((store, index) => {\n return this._renderStoreLocation(store, index);\n })}\n
\n );\n }\n\n /**\n * On click Handler function.\n * @param orgUnitLocation -OrgUnit location.\n * @returns Click action on orgUnit Location.\n */\n private readonly onClickHandler = (orgUnitLocation: OrgUnitLocation | undefined) => () => {\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\n };\n\n private _renderStoreLocation(store: IFullOrgUnitAvailability, index: number): JSX.Element | undefined {\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\n const deliveryOptions = store?.OrgUnitPickUpDeliveryModes;\n const defaultAriaSetsize = 0;\n if (orgUnitLocation) {\n ++this.storeCounter;\n return (\n \n \n
\n );\n }\n return undefined;\n }\n\n /**\n * Sort store.\n * @param stores - Array of stores data.\n * @returns Sorted stores array.\n */\n private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\n /**\n * IsPreferredStore.\n * @param value - Array of stores data.\n * @returns IsPreferred store boolean value.\n */\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n this.props.isPreferredStoreEnabled &&\n this.props.preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Scroll into view.\n */\n private readonly _scrollIntoView = () => {\n const selectedLocationDiv = this.selectedLocationRef.current;\n const parent = selectedLocationDiv?.parentElement;\n if (selectedLocationDiv && parent) {\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\n parent.scrollTop = selectedLocationDiv.offsetTop;\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\n }\n }\n };\n\n /**\n * Is current location.\n * @param location - Org unit location.\n * @returns The current location.\n */\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\n (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\n false;\n\n /**\n * Check the product is in stock or not.\n * @param itemAvailabilities - Item availabilities.\n * @returns If the product is in stock.\n */\n private readonly _isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\n if (!this.props.enableOutOfStockCheck) {\n return true;\n }\n\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > 0 : false;\n }\n\n return false;\n };\n\n /**\n * Get the stock inventory label.\n * @param availabilityWithHours - Full org unit availability.\n * @returns The stock label.\n */\n private readonly _stockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\n for (let i = 0; i < availabilityWithHours.ProductInventoryInformation.length; i++) {\n if (\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n availabilityWithHours.ProductInventoryInformation[i].InventLocationId\n ) {\n return availabilityWithHours.ProductInventoryInformation[i].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n /**\n * Map resources.\n * @param resources - Store resources.\n * @returns Resources.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n pickupDeliveryOptionErrorMessage: resources.pickupDeliveryOptionErrorMessage,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\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 * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n KeyCodes,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { StorePickUpOptionList } from './store-pickup-option-list';\n\n/**\n * Store Selector Search Form Props interface.\n */\nexport interface IStoreSelectorSearchFormProps {\n resources: {\n searchInputAriaLabel: string;\n searchButtonAriaLabel: string;\n searchPlaceholderText: string;\n seeAllStoresText: string;\n viewListText: string;\n viewMapText: string;\n pickupFilterByHeading?: string;\n pickupFilterMenuHeading?: string;\n };\n\n id: string;\n value: string;\n isMapDisabled?: boolean;\n showAllStores?: boolean;\n displayList?: boolean;\n locatorView?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n hasEnabledPickupFilterToShowStore?: boolean;\n filteredPickupMode?: string;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onShowAllStores(): void;\n onToggleListMapViewState(): void;\n performSearch(searchTerm: string): Promise;\n searchTermChanged(searchTerm: string): Promise;\n filterPickupModeSelected(pickupMode: string): void;\n}\n\n/**\n * Simple search form consisting of search text and a search button.\n */\nexport class StoreSelectorSearchForm extends React.PureComponent {\n private readonly searchBoxRef: React.RefObject = React.createRef();\n\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly showAllStoreAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\n\n private previousValue: string = '';\n\n private isSearchResultOpened: boolean = false;\n\n public constructor(props: IStoreSelectorSearchFormProps) {\n super(props);\n this.state = { value: '' };\n this._handleKeyPressPrev = this._handleKeyPressPrev.bind(this);\n const payLoad: IPayLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SearchStore);\n this.storeSearchAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ShowAllStore;\n this.showAllStoreAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ToggleMapView;\n this.toggleMapViewAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n const {\n resources: {\n searchButtonAriaLabel,\n searchPlaceholderText,\n seeAllStoresText,\n viewListText,\n viewMapText,\n pickupFilterByHeading,\n pickupFilterMenuHeading\n },\n id,\n value,\n isMapDisabled,\n showAllStores,\n displayList,\n locatorView,\n onShowAllStores,\n productPickUpDeliveryOptions,\n hasEnabledPickupFilterToShowStore\n } = this.props;\n\n const toggleButtonText = displayList ? viewMapText : viewListText;\n\n return (\n
\n \n
\n )}\n {this.renderPickupModesList(\n this.props,\n toggleButtonText,\n productPickUpDeliveryOptions,\n pickupFilterMenuHeading,\n locatorView,\n pickupFilterByHeading,\n hasEnabledPickupFilterToShowStore,\n displayList\n )}\n \n );\n }\n\n /**\n * Handles the key press on the input box.\n * @param event - Event object.\n */\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\n // In order to avoid that. Checking if the search result is open or not.\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\n if (activeDescedantValue) {\n if (this.previousValue === '') {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n return;\n }\n\n if (activeDescedantValue !== this.previousValue) {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n } else {\n this.isSearchResultOpened = false;\n }\n }\n }\n };\n\n /**\n * Calls method display result.\n * @param event - The first number.\n */\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\n this.props.onShowAllStores();\n }\n };\n\n /**\n * Method called on search text changed.\n * @param event - Input value.\n */\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\n const inputValue: string = event.target.value;\n\n await this.props.searchTermChanged(inputValue);\n };\n\n /**\n * Method called on search submit.\n * @param event - Input value.\n */\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\n event.preventDefault(); // Prevents form submission\n this.searchBoxRef.current?.blur();\n if (!this.isSearchResultOpened) {\n await this.props.performSearch(this.props.value);\n }\n this.isSearchResultOpened = false;\n };\n\n /**\n * Method called on product pickup option change.\n * @returns - Void.\n */\n private readonly _onChangeHandler = () => async (deliveryCode: string): Promise => {\n this.props.filterPickupModeSelected(deliveryCode);\n return Promise.resolve();\n };\n\n /**\n * Method to render pickup mode list.\n * @param props - Store selector search form props.\n * @param toggleButtonText - Locator view button text.\n * @param productPickUpDeliveryOptions - Product DeliveryOption List.\n * @param pickupFilterMenuHeading - Pickup store button text.\n * @param locatorView - Locator View is on\\off.\n * @param pickupFilterByHeading - Pickup list label text.\n * @param hasEnabledPickupFilterToShowStore - Flag to check header filter is enabled.\n * @param shouldDisplayList - Display List.\n * @returns Jsx component.\n */\n private readonly renderPickupModesList = (\n props: IStoreSelectorSearchFormProps,\n toggleButtonText: string,\n productPickUpDeliveryOptions: DeliveryOption[] | undefined,\n pickupFilterMenuHeading: string | undefined,\n locatorView: boolean | undefined,\n pickupFilterByHeading: string | undefined,\n hasEnabledPickupFilterToShowStore: boolean | undefined,\n shouldDisplayList?: boolean\n ): JSX.Element | null => {\n const toggleButtonClass = shouldDisplayList ? 'view-map' : 'list-view';\n if (hasEnabledPickupFilterToShowStore) {\n return (\n
\n {locatorView && (\n \n {toggleButtonText}\n \n )}\n \n
{pickupFilterByHeading}
\n
\n );\n }\n if (locatorView) {\n return (\n \n {toggleButtonText}\n \n );\n }\n return null;\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 { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources, ITermsOfServiceLinkData } from '../store-selector.props.autogenerated';\n\nexport interface IStoreSelectorEmptyMessageProps {\n resources: IStoreSelectorResources;\n}\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources }) => (\n
\n

{resources.emptyLocationsText}

\n
\n);\n\nexport const StoreSelectorWaiting: React.FC = () =>
;\n\nexport interface IStoreSelectorTermsOfServiceProps {\n link?: ITermsOfServiceLinkData;\n requestContext: Msdyn365.IRequestContext;\n onTextChange?(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const StoreSelectorTermsOfService: React.FC = ({ link, requestContext, onTextChange }) => {\n if (link) {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-store-select__terms-link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link'\n };\n\n return (\n
\n \n
\n );\n }\n return null;\n};\n\nexport interface IStoreSelectorFoundLocationsMessage {\n resources: IStoreSelectorResources;\n locations?: IFullOrgUnitAvailability[];\n searchRadius: number;\n preferredDistanceUnit: string;\n isSeeAllStore: boolean;\n}\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({\n locations,\n searchRadius,\n resources,\n isSeeAllStore,\n preferredDistanceUnit\n}) => {\n if (locations) {\n const storeCountMessage =\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n return (\n
\n {isSeeAllStore\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\n
\n );\n }\n\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Interface Pickup option list.\n */\nexport interface IPickUpOptionListProps {\n pickupListOptionMenuText: string;\n pickupmodeList?: DeliveryOption[];\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Interface pickup option list state.\n */\nexport interface IPickOptionListState {\n expandSiteOptions: boolean;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class PickUpOptionList extends React.PureComponent {\n private readonly _pickupListOptionMenu: React.RefObject;\n\n private readonly _pickupListOptionButton: React.RefObject;\n\n private readonly eventsToBeBind = ['click', 'touchstart'];\n\n public constructor(props: IPickUpOptionListProps) {\n super(props);\n this._renderDeliveryOptions = this._renderDeliveryOptions.bind(this);\n this._pickupListOptionMenu = React.createRef();\n this._pickupListOptionButton = React.createRef();\n this.state = {\n expandSiteOptions: false\n };\n }\n\n public componentDidMount(): void {\n for (const event of this.eventsToBeBind) {\n window.addEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public componentWillUnmount(): void {\n for (const event of this.eventsToBeBind) {\n window.removeEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public render(): JSX.Element {\n const { pickupListOptionMenuText, pickupmodeList } = this.props;\n\n return (\n
\n \n {pickupListOptionMenuText}\n \n \n {this.state.expandSiteOptions ? (\n
    \n {pickupmodeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Handle the document click.\n * @param event -- Event object.\n */\n private readonly handleDocumentClick = (event: Event): void => {\n const htmlElement = event.target as HTMLElement;\n if (\n !(\n (this._pickupListOptionButton.current !== null &&\n (event.target === this._pickupListOptionButton.current ||\n this._pickupListOptionButton.current.contains(htmlElement))) ||\n (this._pickupListOptionMenu.current !== null &&\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement)))\n )\n ) {\n this.setState({\n expandSiteOptions: false\n });\n }\n };\n\n private _renderDeliveryOptions(event: React.MouseEvent): void {\n event.stopPropagation();\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !isExpandSiteOptionsState\n });\n }\n\n /**\n * Select Delivery option.\n * @param event -- Event Object.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode && deliveryCode.length > 0) {\n await this.props.onChange(deliveryCode);\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 { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\n\nimport { IStoreSelectorLocationLineItemResources } from '.';\n\nexport interface IHoursDisplayInfo {\n startDayShort: string;\n startDayFull: string;\n endDayShort?: string;\n endDayFull?: string;\n timeRange: string;\n}\n\ninterface IHoursInfo {\n isClosed: boolean;\n openTime?: number;\n closeTime?: number;\n}\n\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\n\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\n if (seconds === undefined) {\n return undefined;\n }\n let hours = Math.floor(seconds / (60 * 60));\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours %= 12;\n hours = hours ? hours : 12;\n const divisorForMinutes = seconds % (60 * 60);\n const minutes = Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\n return `${hours}:${minutes} ${ampm}`;\n};\n\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.monday;\n case 'TUE':\n return resources.days.tuesday;\n case 'WED':\n return resources.days.wednesday;\n case 'THU':\n return resources.days.thursday;\n case 'FRI':\n return resources.days.friday;\n case 'SAT':\n return resources.days.saturday;\n default:\n // Case 'SUN':\n return resources.days.sunday;\n }\n};\n\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.mondayFull;\n case 'TUE':\n return resources.days.tuesdayFull;\n case 'WED':\n return resources.days.wednesdayFull;\n case 'THU':\n return resources.days.thursdayFull;\n case 'FRI':\n return resources.days.fridayFull;\n case 'SAT':\n return resources.days.saturdayFull;\n default:\n // Case 'SUN':\n return resources.days.sundayFull;\n }\n};\n\nconst buildHoursDisplayInfo = (\n startDay: DayType,\n endDay: DayType,\n hoursInfo: string,\n resources: IStoreSelectorLocationLineItemResources\n): IHoursDisplayInfo => {\n return {\n startDayShort: getShortTimeString(startDay, resources),\n startDayFull: getFullTimeString(startDay, resources),\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\n timeRange: hoursInfo\n };\n};\n\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\n if (firstLine.isClosed && secondLine.isClosed) {\n return true;\n }\n\n if (!firstLine.isClosed && !secondLine.isClosed) {\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\n }\n\n return false;\n};\n\nconst getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\n return {\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\n };\n};\n\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\n if (hoursInfo.isClosed) {\n return resources.closedText;\n }\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\n\n return `${openFrom}–${openTo}`;\n};\n\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\n const storeHoursList: IHoursDisplayInfo[] = [];\n\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\n\n let periodStart: DayType = 'MON';\n let periodEnd: DayType = 'MON';\n\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\n\n periodStart = 'TUE';\n }\n periodEnd = 'TUE';\n\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\n\n periodStart = 'WED';\n }\n periodEnd = 'WED';\n\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\n\n periodStart = 'THU';\n }\n periodEnd = 'THU';\n\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\n\n periodStart = 'FRI';\n }\n periodEnd = 'FRI';\n\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\n\n periodStart = 'SAT';\n }\n periodEnd = 'SAT';\n\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\n\n periodStart = 'SUN';\n }\n periodEnd = 'SUN';\n\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\n\n return storeHoursList;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n pickupDeliveryOptionErrorMessage?: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day houts\n if (storeHours?.RegularStoreHours) {\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\n\n return (\n
\n {storeHoursList.map(displayTime => (\n
\n {displayTime.endDayShort ? (\n
\n {displayTime.startDayShort}–\n {displayTime.endDayShort}\n
\n ) : (\n
\n {displayTime.startDayShort}\n
\n )}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\n\n return (\n
\n {storeOpenFrom}-{storeOpenTo}\n
\n );\n};\n\n/**\n * Function to return distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n isLocationDisabled?: boolean\n): string | undefined => {\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < 1) {\n return `(<1 ${preferredDistanceUnit})`;\n }\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\n};\n\n/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns DeliveryOptionList.\n */\nexport const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n const deliveryOption: DeliveryOption[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n });\n\n return deliveryOption;\n};\n\n/**\n * Renders store location line items.\n * @param props - Store location line items props.\n * @returns - HTML.\n */\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\n const {\n hideStockStatus,\n isCurrentLocation,\n isInStock,\n location,\n resources,\n storeHours,\n stockStatusLabel,\n storeLocatorView,\n index,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n shouldShowIndex\n } = props;\n\n const storeName: string | undefined = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = hideStockStatus || isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [isError, setError] = React.useState(false);\n\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n if (deliveryOptionList.length === 0) {\n setError(true);\n } else {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n }\n };\n\n /* eslint-disable prettier/prettier */\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && {index}}\n {storeName}\n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

{resources.contactInfoHeader}

\n {storeAddress && (\n
\n \n {storeAddress}\n
\n )}\n {phoneNumber && (\n
\n \n {phoneNumber}\n
\n )}\n
\n
\n

{resources.storeHoursHeader}

\n {renderStoreHours(storeHours, location, resources)}\n
\n {!storeLocatorView && (\n
\n

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

}\n {isCurrentLocation ? (\n

{resources.currentLocation}

\n ) : canSelectLocation ? (\n deliveryOptionList.length === 0 ? (\n \n {pickupInStoreButtonText}\n \n ) : (\n renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel)\n )\n ) : (\n false\n )}\n
\n )}\n {isPreferredStoreEnabled ? (\n isPreferredStore ? (\n \n {resources.preferredStoreText}\n \n ) : (\n \n {resources.setAsPreferredStoreText}\n \n )\n ) : null}\n
\n {isError ? (\n \n \n ) : ('')}\n
\n );\n};\n\n/**\n * Store location line item component.\n */\nexport const StoreSelectorLocationLineItemComponent = storeSelectorLocationLineItem as (\n props: IStoreSelectorLocationLineItemProps\n) => JSX.Element;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildDistanceString, matchDeliveryOptions } from '../store-selector-location-line-item';\n\n/**\n * Store Locator line item resources.\n */\nexport interface ISelectedStoreResources {\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreProps {\n className?: string;\n shouldHideStockStatus?: boolean;\n isCurrentLocation?: boolean;\n isInStock?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n resources: ISelectedStoreResources;\n stockStatusLabel?: string;\n preferredStoreLocationId: string | null;\n isPreferredStoreEnabled?: boolean;\n isLocationDisabled?: boolean;\n telemetryContent?: ITelemetryContent;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n preferredDistanceUnit: string;\n filteredPickupMode?: string;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreViewProps {\n isCurrentLocation?: boolean;\n canSelectLocation?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n deliveryOptions?: DeliveryOption[];\n isPreferredStore?: boolean;\n resources: ISelectedStoreResources;\n\n storeDetailsMain: INodeProps;\n storeHeader: INodeProps;\n storeName: React.ReactNode;\n storeDistance: React.ReactNode;\n storeDetailsAvailabilityContainer: INodeProps;\n productAvailability: React.ReactNode;\n stockStatus: React.ReactNode;\n currentLocation: React.ReactNode;\n pickUpDeliveryOptionButton: React.ReactNode;\n pickupModes?: React.ReactNode;\n preferredStoreButton?: React.ReactNode;\n removePreferredStoreButton?: React.ReactNode;\n storeDetailsCloseButton?: React.ReactNode;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: ISelectedStoreProps) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation);\n }\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onSetAsPreferredStore(props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: ISelectedStoreProps) => async (deliveryCode: string): Promise => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, deliveryCode);\n }\n return Promise.resolve();\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onRemovePreferredStore();\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: ISelectedStoreProps, pickupMode?: string) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, pickupMode);\n }\n};\n\n/**\n * On store details close functionality.\n * @param props -Store locator location items.\n * @returns Void promise.\n */\nconst storeDetailsModalHandler = (props: ISelectedStoreProps) => async (): Promise => {\n await props.handlers.closeStoreDetailsModal();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: ISelectedStoreProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Renders selected store details.\n * @param props - Store location details props.\n * @returns - Selected Store view props.\n */\nconst selectedStoreDetails = (props: ISelectedStoreProps): ISelectedStoreViewProps => {\n const {\n className,\n shouldHideStockStatus,\n isCurrentLocation,\n isInStock,\n selectedStore,\n resources,\n stockStatusLabel,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n preferredDistanceUnit\n } = props;\n\n const parentClassName = className ? className : 'ms-store-select__map__selected_store';\n const storeName: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const location = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const distanceAsString: string | undefined = buildDistanceString(location?.Distance, preferredDistanceUnit, isLocationDisabled);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n // eslint-disable-next-line no-nested-ternary -- Required to check stock Label\n const stockText: string | undefined = shouldHideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = !shouldHideStockStatus && isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const isPreferredStore = preferredStoreLocationId === location?.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n\n const viewProps: ISelectedStoreViewProps = {\n selectedStore,\n isCurrentLocation,\n canSelectLocation,\n isPreferredStore,\n resources,\n deliveryOptions: deliveryOptionList,\n storeDetailsMain: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__main`\n },\n storeHeader: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__header`\n },\n storeName: {storeName},\n storeDetailsCloseButton: \n ),\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\n preferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.preferredStoreText}\n \n ) : null,\n removePreferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.setAsPreferredStoreText}\n \n ) : null,\n handlers: {\n onSelected: props.handlers.onSelected,\n onSetAsPreferredStore: props.handlers.onSetAsPreferredStore,\n onRemovePreferredStore: props.handlers.onRemovePreferredStore,\n closeStoreDetailsModal: props.handlers.closeStoreDetailsModal\n }\n };\n\n return viewProps;\n};\n\n/**\n * Store location line item component.\n */\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo, IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n getOrgUnitLocationsByArea,\n GetOrgUnitLocationsByAreaInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n NodeTag,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n StoreSelectorEmptyMessage,\n StoreSelectorFoundLocationsMessage,\n StoreSelectorLocationLines,\n StoreSelectorSearchForm,\n StoreSelectorTermsOfService,\n StoreSelectorWaiting\n} from './components';\nimport { ISelectedStoreProps, ISelectedStoreViewProps, SelectedStoreComponent } from './components/selected-store/selected-store';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './components/store-selector-location-line-item/date-time-helpers';\nimport { IStoreSelectorData } from './store-selector.data';\nimport {\n IStoreSelectorProps,\n IStoreSelectorResources,\n mode as modeEnum,\n searchRadiusUnit as SearchRadiusUnit,\n style as styleEnum\n} from './store-selector.props.autogenerated';\n\n/**\n * StoreSelector State Interface.\n */\nexport interface IStoreSelectorState {\n isSearchInProgress: boolean;\n searchTerm?: string;\n isSeeAllStoreValue: boolean;\n isLocationDisabled?: boolean;\n filteredPickupMode?: string;\n}\n\n/**\n * StoreSelector View Props Interface.\n */\nexport interface IStoreSelectorViewProps extends IStoreSelectorProps {\n state: IStoreSelectorState;\n\n // Containers:\n ModuleProps: IModuleProps;\n BodyContainerProps: INodeProps;\n FooterContainerProps: INodeProps;\n HeaderContainerProps: INodeProps;\n HeaderProps?: React.ReactNode;\n\n // Components\n locationsMessage?: React.ReactNode;\n search?: React.ReactNode;\n spinner?: React.ReactNode;\n locationsList?: React.ReactNode;\n selectedLocation?: ISelectedStoreViewProps;\n noLocationsMessage?: React.ReactNode;\n terms?: React.ReactNode;\n headerText?: React.ReactNode;\n sortLocations?: IFullOrgUnitAvailability[];\n locationListProps?: IStoreSelectorLocationLineItemProps[];\n bodyWrapperProps?: INodeProps;\n storeResultContainerProps?: INodeProps;\n mapContainerProps?: INodeProps;\n maps?: React.ReactNode;\n isMobileView?: boolean;\n storeDetailsModal?: INodeProps;\n\n callbacks: {\n closeDialog(): Promise;\n searchTermChanged(searchTerm: string): Promise;\n performSearch(searchTerm: string): Promise;\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\n getAndUpdateUserLocation(): Promise;\n attachMapAutoSuggest(): Promise;\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): Promise;\n setPreferredStore(storeId: string | undefined): Promise;\n removePreferredStore(): Promise;\n setSelectedStore(storeId: string | undefined): Promise;\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\n };\n}\n\n/**\n * StoreSelectorLocation Line Resources Interface.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * ILocationHours Interface.\n */\nexport interface ILocationHours {\n openFrom?: string;\n openTo?: string;\n}\n\n/**\n * StoreSelectorLocation Line Item Props Interface.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n storeHoursList?: IHoursDisplayInfo[];\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n selectedStoreLocationId?: string;\n locationOpen?: ILocationHours;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n onClick: (locationId: string | undefined) => void;\n}\n\n/**\n *\n * Pick Up In Store module.\n * @extends React.Component>}\n */\n@observer\nclass StoreSelector extends React.Component, IStoreSelectorState> {\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private storeCounter: number;\n\n private isPreferredStoreEnabled?: boolean;\n\n public constructor(props: IStoreSelectorProps) {\n super(props);\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.state = { isSearchInProgress: true, searchTerm: '', isSeeAllStoreValue: false, filteredPickupMode: undefined };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.storeCounter = 0;\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\n } = this.props;\n\n // Adding Timeout to make sure it loads the data based upon the preferred store.\n setTimeout(() => {\n this._getAndUpdateStoreLocation();\n }, 0);\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isDialogOpen,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context?.id === this.props.id) {\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (!context || context.id === this.props.id) {\n await this._searchTermChanged('');\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\n });\n }\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\n () => {\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context.actionContext.requestContext.channel?.ChannelCountryRegionISOCode\n });\n }\n );\n\n reaction(\n () => this.props.data.availabilitiesWithHours.result,\n async () => {\n if (this.props.data.storeSelectorStateManager.result?.isDialogOpen) {\n const storeLocationList = this.props.data.availabilitiesWithHours.result;\n if (storeLocationList) {\n await this._setOrgUnitStoreInformation(storeLocationList);\n }\n }\n }\n );\n\n if (isAutoSuggestionEnabled) {\n when(\n () => {\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\n return isMapApiLoaded && isDialogOpen && isSameContext;\n },\n () => {\n setTimeout(async () => {\n await this._attachMapAutoSuggest();\n }, 0);\n }\n );\n }\n }\n\n public shouldComponentUpdate(): boolean {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n if (context && context.id === this.props.id) {\n return true;\n }\n return false;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element {\n const {\n config: {\n termsOfServiceLink,\n className,\n heading,\n mode,\n style,\n setAsPreferredStore: shouldSetAsPreferredStore,\n showAllStores: shouldShowAllStores,\n lookupRadius,\n enablePickupFilterToShowStore: hasEnablePickupFilterToShowStore,\n searchRadiusUnit\n },\n context: {\n telemetry,\n app: { config: appConfig },\n actionContext: {\n requestContext: { channel, cookies }\n }\n },\n slots: { maps: mapSlot },\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n this.storeCounter = 0;\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n const isMapDisabled = !(channel?.BingMapsApiKey && channel.BingMapsEnabled);\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const isDialogOpen: boolean = storeSelectorStateManager\n ? storeSelectorStateManager.isDialogOpen && context?.id === this.props.id\n : false;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const isInlineView = styleDefault === styleEnum.inline;\n const isLocatorView = modeDefault === modeEnum.findStores;\n const shouldHideInventory = isLocatorView;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\n this.isPreferredStoreEnabled = shouldSetAsPreferredStore && cookies?.isConsentGiven();\n const canShowLocationView =\n context && (context.showMapViewLink === undefined || context.showMapViewLink) && storeSelectorStateManager?.isMapModuleLoaded;\n\n const storeSelectorActions = {\n async toggleListMapViewState(): Promise {\n await storeSelectorStateManager?.toggleListMapViewState();\n }\n };\n\n if (!channel?.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n }\n\n const configHeading = heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\n const preferredDistanceUnit =\n searchRadiusUnit === SearchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = shouldHideInventory ? storeLocations : availabilitiesWithHours;\n let sortLocation = null;\n if (storeLocationList) {\n sortLocation = this._sortStores(storeLocationList, this.isPreferredStoreEnabled, preferredLocationId);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Reading value from app config.\n const isEnableOutofStock: boolean = appConfig?.enableStockCheck || false;\n const alreadySelectedLocation = context ? context.alreadySelectedLocation : undefined;\n const productPickUpOptionList = storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions;\n if (this.state.filteredPickupMode && storeLocationList) {\n storeLocationList = this.onFilterLocations(storeLocationList, this.state.filteredPickupMode);\n }\n const locationListProps = this._getStoreLocationListProps(\n isEnableOutofStock,\n isLocatorView,\n preferredLocationId,\n this.isPreferredStoreEnabled,\n selectedStoreLocationId,\n sortLocation ?? null,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n\n const hasMapSlot = ArrayExtensions.hasElements(mapSlot);\n const dialogClassName = hasMapSlot ? 'ms-store-select__map' : '';\n const viewProps: IStoreSelectorViewProps = {\n ...(this.props as IStoreSelectorProps),\n state: this.state,\n maps: hasMapSlot ? mapSlot[0] : undefined,\n\n ModuleProps: {\n tag: isInlineView ? ('div' as NodeTag) : Modal,\n moduleProps: this.props,\n className: classname(\n `ms-store-${isInlineView ? 'locate' : 'select'}`,\n className,\n dialogClassName,\n isInlineView ? '' : 'msc-modal-input-required'\n ),\n autoFocus: true,\n fade: true,\n isOpen: isDialogOpen,\n 'aria-label': configHeading,\n onClosed: this._closeDialog,\n horizontalPosition: 'center',\n verticalPosition: 'center',\n toggle: this._closeDialog\n },\n isMobileView: isMobileDevice,\n HeaderContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalHeader,\n className: `ms-store-select__${isInlineView ? 'header' : 'modal-header'}`,\n toggle: this._closeDialog\n },\n HeaderProps: configHeading && (\n \n ),\n FooterContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalFooter,\n className: `ms-store-select__${isInlineView ? 'footer' : 'modal-footer'} ${!shouldDisplayList ? 'map-only-view' : ''}`\n },\n BodyContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalBody,\n className: `ms-store-select__${isInlineView ? 'body' : 'modal-body'}`\n },\n bodyWrapperProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__body_wrapper'\n },\n storeResultContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__store_container'\n },\n mapContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__map_container'\n },\n storeDetailsModal: {\n tag: 'div' as NodeTag,\n className: `ms-store-select__map__selected_store__modal ${\n selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'\n }`\n },\n locationsMessage: !this.state.isLocationDisabled && (\n \n ),\n selectedLocation: this.renderSelectedStore(\n shouldHideInventory,\n preferredDistanceUnit,\n preferredStore,\n this.isPreferredStoreEnabled,\n isEnableOutofStock,\n productPickUpOptionList,\n shouldDisplayList\n ),\n search: (\n \n ),\n spinner: ,\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\n \n ) : (\n undefined\n ),\n noLocationsMessage: ,\n terms: (\n \n ),\n\n // Not being used in current context, we can use it here to pass more props.\n headerText: (\n {heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\n ),\n sortLocations: sortLocation,\n locationListProps,\n callbacks: {\n searchTermChanged: this._searchTermChanged,\n performSearch: this._performSearch,\n closeDialog: this._closeDialog,\n selectedLocation: this._onOrgUnitLocationSelected,\n getAndUpdateUserLocation: async () => {\n this._getAndUpdateStoreLocation();\n return Promise.resolve();\n },\n attachMapAutoSuggest: this._attachMapAutoSuggest,\n onSuggestionSelected: this._onOrgUnitLocationSelected,\n setPreferredStore: this._setPreferredStore,\n removePreferredStore: this._removePreferredStore,\n setSelectedStore: this._setSelectedStore,\n setOrgUnitStoreInformation: this._setOrgUnitStoreInformation\n }\n } as IStoreSelectorViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Render the selected store for the mobile devices.\n * @param shouldHideInventory -- Hide Inventory.\n * @param preferredDistanceUnit -- Preferred Distance Unit.\n * @param preferredStore -- Preferred Store.\n * @param isPreferredStoreEnabled -- Is Preferred Store Enabled.\n * @param hasEnabledOutOfStockCheck -- Stock check is enabled or not.\n * @param productPickUpOptionList -- Product pickup option list.\n * @param shouldDisplayList - Should Display list.\n * @returns -- Returns the view props.\n */\n public renderSelectedStore = (\n shouldHideInventory: boolean,\n preferredDistanceUnit: string,\n preferredStore: IStoreInfo | undefined,\n isPreferredStoreEnabled: boolean | undefined,\n hasEnabledOutOfStockCheck: boolean,\n productPickUpOptionList?: DeliveryOption[],\n shouldDisplayList?: boolean\n ): ISelectedStoreViewProps | undefined => {\n const {\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const selectedStore = (shouldHideInventory ? storeLocations : availabilitiesWithHours)?.find(\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === selectedStoreLocationId\n );\n const orgUnitLocation = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreResources = this._mapResources(resources);\n\n if (!shouldDisplayList && selectedStore) {\n const selectedProps: ISelectedStoreProps = {\n shouldHideStockStatus: shouldHideInventory,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, context?.alreadySelectedLocation),\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, selectedStore.OrgUnitAvailability?.ItemAvailabilities),\n selectedStore,\n resources: selectedStoreResources,\n stockStatusLabel: this._stockInventoryLabel(selectedStore),\n preferredStoreLocationId: preferredStore?.StoreId ? preferredStore.StoreId : '',\n isPreferredStoreEnabled,\n isLocationDisabled: this.state.isLocationDisabled,\n telemetryContent: this.telemetryContent,\n storePickUpOptionList: selectedStore.OrgUnitPickUpDeliveryModes?.DeliveryOptions,\n productPickUpOptionList,\n preferredDistanceUnit,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n\n return SelectedStoreComponent(selectedProps);\n }\n\n return undefined;\n };\n\n /**\n * Method to be called on link text change.\n * @param event -Content Edit Event.\n */\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.termsOfServiceLink) {\n this.props.config.termsOfServiceLink.linkText = event.target.value;\n }\n };\n\n /**\n * Method to be called on heading change.\n * @param event -Content Edit Event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading = event.target.value;\n };\n\n /**\n * Show all stores handler function.\n */\n private readonly onShowAllStoresHandler = () => {\n this._getAndUpdateStoreLocation(true);\n this.setState({ filteredPickupMode: undefined });\n };\n\n /**\n * Method to be called for filtered the store location based on the filter selected by the user.\n * @param stores -All the stores from the API.\n * @param filteredPickupMode -Filter selected by the user.\n * @returns -Filtered stores.\n */\n private readonly onFilterLocations = (stores: IFullOrgUnitAvailability[], filteredPickupMode: string) => {\n return stores.filter(location => {\n return location.OrgUnitPickUpDeliveryModes?.DeliveryOptions?.some(deliveryOption => {\n return deliveryOption.Code === filteredPickupMode;\n });\n });\n };\n\n /**\n * Filter Store by pickup mode.\n * @param deliveryCode -Delivery Code.\n */\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\n this.setState({ filteredPickupMode: deliveryCode });\n };\n\n /**\n * Method will sort all stores.\n * @param stores -Stores List.\n * @param isPreferredStoreEnabled -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @returns List of Stores.\n */\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\n private _sortStores(\n stores: IFullOrgUnitAvailability[],\n isPreferredStoreEnabled: boolean | undefined,\n preferredStoreLocationId: string\n ): IFullOrgUnitAvailability[] {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n isPreferredStoreEnabled &&\n preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Method will list of store selector location line.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param stores -Store Id.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns List of StoreSelectorLocation Line.\n */\n private _getStoreLocationListProps(\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n stores: IFullOrgUnitAvailability[] | null,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps[] {\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\n if (ArrayExtensions.hasElements(stores)) {\n stores.map((store, index: number) => {\n const storeLineProps = this._createStoreLocationList(\n store,\n index,\n hasEnabledOutOfStockCheck,\n isStoreLocatorView,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n selectedStoreLocationId,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n if (storeLineProps) {\n storeList.push(storeLineProps);\n }\n });\n }\n return storeList;\n }\n\n /**\n * Initialize Map AutoSuggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n config: { autoSuggestOptions },\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\n /**\n * Callback for the autosuggest API.\n */\n callback: () => {\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\n this.autoSuggestManager.attachAutosuggest(\n `#ms-store-select__search-box_${this.props.id}`,\n `#ms-store-select__search-box-container_${this.props.id}`,\n this._onSuggestionSelected\n );\n },\n\n /**\n * Error call back for autosuggest API.\n */\n errorCallback: () => {\n if (telemetry) {\n telemetry.debug('Unable to attach map auto suggest.');\n }\n },\n credentials: channel?.BingMapsApiKey\n });\n }\n };\n\n /**\n * On Selecting Location Suggestion.\n * @param result - Map Suggestions List.\n */\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context && context.id === this.props.id) {\n await this._searchTermChanged(result.formattedSuggestion);\n await this._performSearch(result.formattedSuggestion);\n }\n };\n\n /**\n * On Selecting Preferred Store.\n * @param storeId - Store Id.\n */\n private readonly _setPreferredStore = async (storeId: string | undefined): Promise => {\n if (!storeId) {\n return;\n }\n\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n config: { mode },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations },\n availabilitiesWithHours: { result: availabilitiesWithHours }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n\n let stores: IFullOrgUnitAvailability[];\n if (modeDefault === modeEnum.findStores && storeLocations) {\n stores = storeLocations;\n } else {\n stores = availabilitiesWithHours!;\n }\n\n const preferredStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\n\n await storeSelectorStateManager.setPreferredStoreLocation(\n storeId,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\n cookies.isConsentGiven(),\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\n );\n };\n\n /**\n * On Removing Preferred Store.\n */\n private readonly _removePreferredStore = async (): Promise => {\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.clearPreferredStore(cookies.isConsentGiven());\n };\n\n /**\n * Method called to close the store details modal that comes up on clicking the pushpin.\n * @returns Void promise.\n */\n private readonly _closeStoreDetailModal = async (): Promise => {\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\n };\n\n /**\n * On Selecting Store for pickup.\n * @param storeId - Store Id.\n */\n private readonly _setSelectedStore = async (storeId: string | undefined): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\n };\n\n /**\n * Method to be called on search.\n * @param searchTerm - Search string.\n */\n private readonly _performSearch = async (searchTerm: string): Promise => {\n const {\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!searchTerm || !storeSelectorStateManager) {\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\n\n if (location) {\n await this._updateLocations(location.latitude, location.longitude);\n } else {\n await this._updateLocations();\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n };\n\n /**\n * Method to be called on search term changed.\n * @param searchTerm - Search string.\n */\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\n this.setState({ searchTerm });\n };\n\n /**\n * Method to be called updating the store location.\n * @param shouldShowAllStores - Flag to show all stores.\n */\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\n const {\n config: { style },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n\n if (styleDefault !== styleEnum.inline && (!storeSelectorStateManager || !storeSelectorStateManager.isDialogOpen)) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n if (navigator?.geolocation) {\n navigator.geolocation.getCurrentPosition(\n async position => {\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\n this.setState({ isLocationDisabled: false, isSearchInProgress: true });\n if (shouldShowAllStores) {\n this.setState({ isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\n } else {\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n async error => {\n // If the location setting is turned off\n if (error.PERMISSION_DENIED) {\n this.setState({ isLocationDisabled: true, isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(0, 0, 0);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n { timeout: 5000 }\n );\n } else {\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n }\n };\n\n /**\n * Method to be called closing the store selector dialog.\n * @returns Void promise.\n */\n private readonly _closeDialog = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n this.setState({ searchTerm: '' });\n\n if (storeSelectorStateManager) {\n storeSelectorStateManager.context?.parentElementRef?.current?.focus();\n return storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method to set store info.\n * @param orgUnitStoreInformation - Store Info Object.\n * @returns Void promise.\n */\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n config: { style },\n telemetry\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n const context = storeSelectorStateManager.context;\n const moduleId: string = context?.id ? context.id : this.props.id;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n let input: IStoreSelectionStateContext = {\n /**\n * On Location selected.\n * @returns - Returns promise.\n */\n onLocationSelected: async () => {\n // TO-DO handle event for when location in selected\n return Promise.resolve();\n }\n };\n\n if (storeSelectorStateManager.context) {\n input = storeSelectorStateManager.context;\n }\n\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager.preferredStore;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n const storeLocationList = this._sortStores(orgUnitStoreInformation, this.isPreferredStoreEnabled, preferredLocationId);\n\n input = {\n ...input,\n id: moduleId,\n showMapViewLink: context?.showMapViewLink,\n parentElementRef: context?.parentElementRef,\n isDialog: styleDefault === styleEnum.dialog,\n orgUnitStoreInformation: storeLocationList,\n product: context?.product\n };\n\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\n if (telemetry) {\n telemetry.error(error.message);\n telemetry.debug('Unable to Update store location state');\n }\n });\n };\n\n /**\n * Method to update user location.\n * @param latitude - User location.\n * @param longitude - User location.\n * @param radius - Search Criteria Radius.\n * @returns Void promise.\n */\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\n const {\n config: { mode, lookupRadius, style, searchRadiusUnit },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.kilometers ? 1 : 0;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n let localLatitude = this.state.searchTerm || !preferredStore?.Latitude ? latitude : preferredStore.Latitude;\n let long = this.state.searchTerm || !preferredStore?.Longitude ? longitude : preferredStore.Longitude;\n if (styleDefault === styleEnum.inline) {\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\n if (lastInlineStoreLocation && !this.state.searchTerm) {\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\n }\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\n }\n\n if (modeDefault === modeEnum.findStores) {\n await this.getOrgUnitLocationByArea(calRadius, distanceUnitValue, localLatitude, long);\n return;\n }\n\n await this.getFullAvailableInventoryNearby(calRadius, distanceUnitValue, localLatitude, long);\n };\n\n /**\n * Get org unit location by area.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getOrgUnitLocationByArea = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n context: { actionContext }\n } = this.props;\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\n latitude,\n longitude,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\n if (orgUnitLocations) {\n await this._setOrgUnitStoreInformation(orgUnitLocations);\n await this._setSelectedStore(undefined);\n }\n };\n\n /**\n * Get full available inventory nearby.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getFullAvailableInventoryNearby = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n telemetry,\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager || !storeSelectorStateManager.context) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n if (!storeSelectorStateManager.context.product) {\n // TODO: Use alternative search method here to not make inventory check\n return;\n }\n\n const input = new GetFullAvailableInventoryNearbyInput(\n storeSelectorStateManager.context.product.RecordId,\n latitude ?? 0,\n longitude ?? 0,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n await getFullAvailableInventoryNearby(input, actionContext).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get full available inventory near by');\n });\n };\n\n /**\n * Method to called on store selected.\n * @param location - Store Info.\n * @param deliveryMode - Pickup mode.\n * @returns Void promise.\n */\n private readonly _onOrgUnitLocationSelected = async (location: OrgUnitLocation | undefined, deliveryMode?: string): Promise => {\n const {\n telemetry,\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager) {\n if (location && storeSelectorStateManager.context) {\n // Want to eat exceptions here so that the dialog still closes even if the onLocationSelected call goes wrong\n await storeSelectorStateManager.context.onLocationSelected(location, deliveryMode).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get on org unit location selected');\n });\n }\n\n await storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method will list of store selector location line.\n * @param store -Store Info.\n * @param index - List index.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns StoreSelectorLocation Line Prop.\n */\n private _createStoreLocationList(\n store: IFullOrgUnitAvailability,\n index: number,\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps | undefined {\n const orgUnitLocation = store.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocation = selectedStoreLocationId;\n const deliveryOptions = store.OrgUnitPickUpDeliveryModes;\n const lineResources = this._mapResources(this.props.resources);\n const storeOpenFrom: string | undefined = secondsToTime(orgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(orgUnitLocation?.OpenTo);\n const storeHours = store.StoreHours;\n\n if (orgUnitLocation) {\n ++this.storeCounter;\n return {\n location: orgUnitLocation,\n selectedStoreLocationId: selectedStoreLocation,\n storeHours,\n resources: lineResources,\n preferredDistanceUnit: preferredDistanceUnit!,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, alreadySelectedLocation),\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, store.OrgUnitAvailability?.ItemAvailabilities),\n stockStatusLabel: this._stockInventoryLabel(store),\n storeLocatorView: isStoreLocatorView,\n index: this.storeCounter.toString(),\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n telemetryContent: this.telemetryContent,\n isLocationDisabled: this.state.isLocationDisabled,\n storePickUpOptionList: deliveryOptions?.DeliveryOptions,\n productPickUpOptionList,\n locationOpen: { openFrom: storeOpenFrom, openTo: storeOpenTo },\n storeHoursList: storeHours?.RegularStoreHours ? buildStoreHours(storeHours.RegularStoreHours, lineResources) : [],\n onClick: this._setSelectedStore,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n }\n return undefined;\n }\n\n /**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined, selectedLocation?: OrgUnitLocation): boolean =>\n (selectedLocation && location && selectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\n\n /**\n * Method to get stock.\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\n * @param itemAvailabilities - Item quantity availability.\n * @returns Boolean value for item stock.\n */\n private readonly _isProductInStock = (\n hasEnableOutOfStockCheck: boolean,\n itemAvailabilities: ItemAvailability[] | undefined\n ): boolean => {\n if (!hasEnableOutOfStockCheck) {\n return true;\n }\n const quantityCount = 0;\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > quantityCount : false;\n }\n\n return false;\n };\n\n /**\n * Method to get stocklevel label.\n * @param isInStock - Stock available in store.\n * @returns Label for stock status.\n */\n private readonly _stockInventoryLabel = (isInStock: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (isInStock?.ProductInventoryInformation && ArrayExtensions.hasElements(isInStock.ProductInventoryInformation)) {\n for (let index = 0; index < isInStock.ProductInventoryInformation.length; index++) {\n if (\n isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n isInStock.ProductInventoryInformation[index].InventLocationId\n ) {\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n}\n\nexport default StoreSelector;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISelectedStoreViewProps } from './components/selected-store/selected-store';\nimport { IStoreSelectorViewProps } from './store-selector';\n\n/**\n * Renders the pickup Delivery options.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderDeliveryOptions: React.FC = props => {\n const { canSelectLocation, deliveryOptions, pickUpDeliveryOptionButton, pickupModes } = props;\n\n return (\n <>\n {/* eslint-disable-next-line no-nested-ternary -- Need this.*/}\n {canSelectLocation ? (ArrayExtensions.hasElements(deliveryOptions) ? pickupModes : pickUpDeliveryOptionButton) : false}\n \n );\n};\n\n/**\n * Render the selected store.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderSelectedStore: React.FC = props => {\n const {\n storeDetailsMain,\n storeHeader,\n storeName,\n storeDetailsCloseButton,\n storeDistance,\n storeDetailsAvailabilityContainer,\n productAvailability,\n stockStatus,\n isCurrentLocation,\n currentLocation,\n isPreferredStore,\n preferredStoreButton,\n removePreferredStoreButton\n } = props;\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n {productAvailability}\n {stockStatus}\n \n {isCurrentLocation ? currentLocation : renderDeliveryOptions(props)}\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n \n );\n};\n\n/**\n * Render the body of the popup.\n * @param props -- Store selector view props.\n * @returns -- Returns the html.\n */\nconst renderBody: React.FC = props => {\n const {\n BodyContainerProps,\n locationsMessage,\n search,\n state,\n spinner,\n locationsList,\n noLocationsMessage,\n maps,\n bodyWrapperProps,\n storeResultContainerProps,\n mapContainerProps,\n isMobileView,\n storeDetailsModal,\n selectedLocation\n } = props;\n\n if (isMobileView) {\n return (\n \n {locationsMessage}\n {search}\n \n \n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n {maps}\n {selectedLocation && renderSelectedStore(selectedLocation)}\n \n \n \n );\n }\n\n return (\n \n \n \n {locationsMessage}\n {search}\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n \n {maps}\n \n \n );\n};\n\n/**\n * Store selector view props.\n * @param props - Store selector view props.\n * @returns - HTML.\n */\nconst StoreSelectorView: React.FC = props => {\n const {\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n\n terms\n } = props;\n\n return (\n \n {HeaderProps}\n {renderBody(props)}\n {terms}\n \n );\n};\n\nexport default StoreSelectorView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICartLineItemViewProps,\n ICartlinesViewProps,\n ICartResources,\n ICartViewProps,\n IOrderSummaryErrors\n} from '@msdyn365-commerce-modules/cart';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartProps as ICartExtensionProps } from '../definition-extensions/cart.ext.props.autogenerated';\n\n/**\n * Toggle Bopis Function.\n * @param cartLine -CartLine.\n * @param isBopisSelected -Boolean.\n * @returns Toggle Bopis.\n */\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * Change Store Function.\n * @param cartLine -CartLine.\n * @returns Toggle Bopis.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
\n {isBopisSelected && (\n
\n {cartLine.pickUpInStore.orgUnitName}\n \n
\n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
\n );\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderGroupBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLine = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element => {\n if (cartLine.error === resources.outOfStockErrorMessage) {\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (isMultiplePickUp) {\n return (\n \n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (cartLine.addToOrderTemplate) {\n return (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlinesInternal = (\n cartLines: ICartlinesViewProps[],\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n return cartLines.map((cartLine, index) => {\n const itemIndex = index;\n return (\n
\n {cartLine.cartline}\n \n {isMultiplePickUp\n ? null\n : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {renderCartLine(cartLine, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n
\n );\n });\n};\n\n/**\n * Render Cart Lines.\n * @param props - The cart line props.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param waitingComponent - Waiting component element.\n * @param cartLoadingStatus - Cart loading status string.\n * @param isCartDataResult - Flag to check if there is cart data.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlines = (\n props: ICartViewProps & ICartExtensionProps<{}>,\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n isCartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\n if (cartLines) {\n return props.multiplePickUpEnabled ? (\n renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\n ) : (\n \n {renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n );\n }\n\n return isCartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const itemCountOne: number = 1;\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\n const countTitle = `(${count} ${suffix})`;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n

{countTitle}

\n
\n \n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\n/**\n * Returns count of products.\n * @param cartLine - The cart line view props.\n * @returns Number of products.\n */\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n const defaultItemCount = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\n }, defaultItemCount);\n return countItem;\n};\n\n/**\n * Render Cart Lines group.\n * @param props - The cart line view props.\n * @param resources - Module resource strings.\n * @returns JSX Element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n cartlines[0],\n resources,\n countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {renderCartlines(\n props,\n cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\n/**\n * Render error block.\n * @param errorData - Error component.\n * @returns JSX Element.\n */\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Render invoice summary.\n * @param invoiceSummaryLines - Invoice summary component.\n * @param orderSummaryItems - Order summary component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render order summary.\n * @param orderSummaryLines - Order summary component.\n * @param orderSummaryItems - Order summary items component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {orderSummaryLines.subtotal}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render error block.\n * @param promotions - The module view props.\n * @returns JSX Element.\n */\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Render order summary checkout.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.cart?.hasInvoiceLine ? null : props.promoCode}\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n \n {props.createTemplateFromCartButton}\n \n );\n};\n\n/**\n * Render order summary checkout button.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n \n );\n};\n\n/**\n * Render cart view.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\n const totalItemCountOne: number = 1;\n const updatedTitle = (\n

\n {props.resources.cartTitle}\n \n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\n \n

\n );\n return (\n
\n {props.checkoutBlockedDueToUnavailableFunds}\n {updatedTitle}\n
{props.orderSummaryLineitems?.orderTotal}
\n {renderOrderSummaryCheckoutButton(props)}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled\n ? renderCartLinesGroup(props, props.resources)\n : renderCartlines(\n props,\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n {props.orderSummaryHeading && (\n \n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {renderErrorBlock(props.OrderSummaryErrors)}\n \n {renderOrderSummaryCheckout(props)}\n \n )}\n {props.storeSelector}\n
\n );\n};\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IContentBlockAdditionalContentItemViewProps,\n IContentBlockAdditionalContentViewProps,\n IContentBlockViewProps\n} from '@msdyn365-commerce-modules/content-block';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\n return (\n \n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n \n {item.text}\n {item.links}\n \n \n );\n })}\n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nconst contentBlockView: React.FC = props => {\n const {\n contentBlockContainer,\n imageContainer,\n detailsContainer,\n title,\n text,\n links,\n image,\n contentBlockAnchorTag,\n imageLink,\n imageAriaLabel,\n additionalContent\n } = props;\n\n // @ts-expect-error HTML element need to be clear on run time.\n const hasImage: boolean = image.props.src;\n const imageClass: string = hasImage ? `${detailsContainer.className} withImage` : `${detailsContainer.className} withoutImage`;\n\n if (imageLink) {\n return (\n \n \n {image}\n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n }\n return (\n \n {image}\n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n};\n\nexport default contentBlockView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n *\n * FooterItemView component.\n * @extends {React.PureComponent}\n */\nexport class FooterItemView extends React.PureComponent {\n public render(): JSX.Element | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { FooterItem } = this.props;\n return {this._renderElement(this.props)};\n }\n\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\n if (heading) {\n return (\n \n {' '}\n \n );\n } else if (Link && image) {\n return (\n \n {linkText}\n {image}\n \n );\n } else if (Link) {\n return EditableLink;\n }\n return (\n <>\n {text}\n {image}\n \n );\n }\n}\n\nexport default FooterItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { RichTextComponent } from '@msdyn365-commerce/core';\nimport {\n ContactInformationType,\n DeliveryOption,\n IDictionary,\n OrgUnitContact,\n OrgUnitLocation,\n StoreHours\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n buildStoreHours,\n IHoursDisplayInfo,\n ILocationHours,\n IStoreSelectorFoundLocationsMessage,\n IStoreSelectorLocationLineItemProps,\n IStoreSelectorLocationLineItemResources,\n IStoreSelectorViewProps,\n secondsToTime\n} from '@msdyn365-commerce-modules/store-selector';\nimport { ISelectedStoreViewProps } from '@msdyn365-commerce-modules/store-selector/src/modules/store-selector/components/selected-store/selected-store';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n isMobile,\n Module,\n Node,\n TelemetryConstant,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IStoreSelectorProps, IStoreSelectorResources } from '../definition-extensions/store-selector.ext.props.autogenerated';\n\n/**\n * PickUpMethodComponent View Props Interface.\n */\nexport interface IPickupComponent extends IStoreSelectorLocationLineItemProps {\n pickUpStatesProps: IStoreSelectorViewProps;\n}\n\nexport interface IPickUpButtonComponent {\n attributes: IDictionary | undefined;\n onPickupInStoreClickHandler?(): void;\n}\n\n/**\n * Found Locations Message component in Store Selector.\n * @param props - The component props.\n * @returns The JSX Element.\n */\nconst StoreSelectorFoundLocationsMessageComponent: React.FC = props => {\n const { locations, searchRadius, resources, isSeeAllStore, preferredDistanceUnit } = props;\n if (locations) {\n const storeCountMessage =\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n\n return (\n ${locations.length.toString()}`\n )\n : storeCountMessage\n .replace(\n '{count}',\n `${locations.length.toString()}`\n )\n .replace(\n '{radius}',\n `${searchRadius.toString()}`\n )\n }\n />\n );\n }\n\n return null;\n};\n\n/**\n * Build distance string.\n * @param distance - The distance.\n * @param preferredDistanceUnit - The preferred distance unit.\n * @param resources - The module resources.\n * @param isLocationDisabled - True if location is disabled.\n * @returns The distance string.\n */\nconst buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n resources: IStoreSelectorResources & IStoreSelectorResources,\n isLocationDisabled?: boolean\n): string | undefined => {\n const closeDistance: number = 1;\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < closeDistance) {\n const closeDistanceString: string = resources.closeDistanceString;\n return closeDistanceString.replace('{preferredDistanceUnit}', preferredDistanceUnit);\n }\n const distanceAsString: string = resources.distanceString;\n return distanceAsString\n .replace('{preferredDistanceUnit}', preferredDistanceUnit)\n .replace('{distance}', Math.floor(distance).toString());\n};\n\n/**\n * Extract phone number.\n * @param contacts - Contacts array.\n * @returns Phone number.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === ContactInformationType.Phone && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * Render Store Hours Day.\n * @param displayTime - Store Hours Information.\n * @param storeHoursDayPeriodString - The string for store hours day period.\n * @param storeHoursDayString - The string for store hours day period.\n * @returns JSX element with store hours day.\n */\nconst buildStoreHoursDay = (displayTime: IHoursDisplayInfo, storeHoursDayPeriodString: string, storeHoursDayString: string) => {\n return (\n ${displayTime.startDayShort}`)\n .replace(\n '{endDay}',\n `${displayTime.endDayShort}`\n )\n : storeHoursDayString.replace(\n '{startDay}',\n `${displayTime.startDayShort}`\n )\n }\n />\n );\n};\n\n/**\n * Render Store Hours.\n * @param storeHours - Store hours.\n * @param storeHoursList - Store hours list.\n * @param locationOpen - Location open.\n * @param resources - The module resources.\n * @returns JSX element with store hours.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n storeHoursList: IHoursDisplayInfo[] | undefined,\n locationOpen: ILocationHours | undefined,\n resources: IStoreSelectorResources & IStoreSelectorResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day hours\n if (storeHours?.RegularStoreHours) {\n return (\n
\n {storeHoursList?.map(displayTime => (\n
\n {buildStoreHoursDay(displayTime, resources.storeHoursDayPeriod, resources.storeHoursDay)}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string = locationOpen?.openFrom ? locationOpen.openFrom : '';\n const storeOpenTo: string = locationOpen?.openTo ? locationOpen.openTo : '';\n return (\n
\n {resources.storeHoursDayPeriod.replace('{startDay}', storeOpenFrom).replace('{endDay}', storeOpenTo)}\n
\n );\n};\n\n/**\n * Match delivery options.\n * @param productDeliveryOptions - The list of product delivery options.\n * @param storePickUpOptionList - The list of store pick up options.\n * @returns Matched delivery option.\n */\nconst matchDeliveryOptions = (\n productDeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n if (!productDeliveryOptions) {\n return [] as DeliveryOption[];\n }\n return productDeliveryOptions\n .map(productDeliveryOption => storePickUpOptionList?.find(delivery => delivery.Code === productDeliveryOption.Code))\n .filter(productDeliveryOption => productDeliveryOption) as DeliveryOption[];\n};\n\n/**\n * PickUpMethod Resources Interface.\n */\nexport interface IPickUpButtonResources {\n pickupInStoreAriaLabel: string;\n pickupInStoreButtonText: string;\n pickupDeliveryOptionErrorMessage: string;\n}\n\n/**\n * PickUpMethod Resources Interface.\n */\nexport interface IPickUpMethodResources {\n selectStoreText: string;\n pickUpMethodLabel: string;\n pickUpOptionPlaceholder: string;\n pickupOptionDropdownError: string;\n pickupButtonAriaLabel: string;\n}\n\n/**\n * PickUp method dropdown component.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst PickUpMethodDropdownComponent = (props: IPickupComponent & IPickUpMethodResources) => {\n const {\n handlers,\n location,\n pickUpStatesProps,\n selectStoreText,\n pickUpMethodLabel,\n pickUpOptionPlaceholder,\n pickupOptionDropdownError,\n pickupButtonAriaLabel,\n productPickUpOptionList,\n storePickUpOptionList\n } = props;\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [selectedStorePickUpOption, selectStorePickUpOption] = React.useState('');\n const [currentStorePickUpOption, setCurrentStorePickUpOption] = React.useState(pickUpOptionPlaceholder);\n const [isDropdownOpen, toggleDropdown] = React.useState(false);\n const [isError, setError] = React.useState(false);\n\n /**\n * Method to handle the store pickup option change.\n * @param event - Change Event.\n */\n const onChangeHandler = React.useCallback((event: React.MouseEvent) => {\n event.preventDefault();\n selectStorePickUpOption(event.currentTarget.value);\n setCurrentStorePickUpOption(event.currentTarget.dataset.description ? event.currentTarget.dataset.description : '');\n toggleDropdown(false);\n setError(false);\n }, []);\n\n /**\n * Method to render store location line pick up button.\n * @param filteredDeliveryMode - Filtered Delivery Mode.\n * @returns JSX Element.\n */\n const renderLocationLinePickupButton = (filteredDeliveryMode: DeliveryOption | undefined) => {\n return filteredDeliveryMode !== undefined ? (\n
\n \n {filteredDeliveryMode.Description}\n \n
\n ) : null;\n };\n\n /**\n * Method to handle the store pickup option submit.\n */\n const onClickHandler = React.useCallback(() => {\n if (!StringExtensions.isNullOrEmpty(selectedStorePickUpOption)) {\n handlers.onSelected(location, selectedStorePickUpOption);\n } else if (pickUpStatesProps.state.filteredPickupMode !== undefined) {\n handlers.onSelected(location, pickUpStatesProps.state.filteredPickupMode);\n } else {\n toggleDropdown(false);\n setError(true);\n }\n }, [location, selectedStorePickUpOption, handlers, pickUpStatesProps.state.filteredPickupMode]);\n\n const handleDropdownToggle = React.useCallback(() => {\n toggleDropdown(!isDropdownOpen);\n setError(false);\n }, [isDropdownOpen]);\n\n const filterDeliveryOption = deliveryOptionList.find(\n (delivery: DeliveryOption) => delivery.Code === pickUpStatesProps.state.filteredPickupMode\n );\n\n const pickupInStoreButtonText: string = selectStoreText;\n const filteredDeliveryMode: DeliveryOption | undefined =\n pickUpStatesProps.state.filteredPickupMode !== undefined ? filterDeliveryOption : undefined;\n\n return (\n \n
{pickUpMethodLabel}
\n {pickUpStatesProps.state.filteredPickupMode === undefined ? (\n
\n \n {currentStorePickUpOption}\n \n
    \n {deliveryOptionList.map((delivery: DeliveryOption) => (\n \n \n {delivery.Description}\n \n \n ))}\n
\n
{pickupOptionDropdownError}
\n
\n ) : (\n renderLocationLinePickupButton(filteredDeliveryMode)\n )}\n \n
\n );\n};\n\n/**\n * PickUp button component.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst PickUpButtonComponent = (props: IPickUpButtonComponent & IPickUpButtonResources) => {\n const { pickupInStoreAriaLabel, pickupInStoreButtonText, pickupDeliveryOptionErrorMessage, attributes } = props;\n const [isError, setError] = React.useState(false);\n const onPickupButtonClickHandler = () => () => {\n setError(true);\n };\n\n return (\n <>\n \n {pickupInStoreButtonText}\n \n
\n {pickupDeliveryOptionErrorMessage}\n
\n \n );\n};\n\n/**\n * Method to render store location line item.\n * @param locationLineItem - The Location Line item view props.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst renderStoreLocationLineItem = (\n locationLineItem: IStoreSelectorLocationLineItemProps,\n props: IStoreSelectorViewProps & IStoreSelectorProps\n) => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n hideStockStatus,\n index,\n isInStock,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n location,\n resources,\n storeHours,\n storeHoursList,\n stockStatusLabel,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n storeLocatorView,\n telemetryContent\n } = locationLineItem;\n const storeName = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(\n location.Distance,\n locationLineItem.preferredDistanceUnit,\n props.resources,\n locationLineItem.isLocationDisabled\n );\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockStatus = stockStatusLabel ? stockStatusLabel : resourceLabel;\n const stockText: string | undefined = hideStockStatus ? undefined : stockStatus;\n\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n\n /**\n * Method to handle the change for preferred store.\n * @returns Void.\n */\n const onSetPreferredStoreClickHandler = () => {\n locationLineItem.handlers.onSetAsPreferredStore(locationLineItem.location.OrgUnitNumber);\n };\n\n /**\n * Method to handle the removal of the preferred store.\n * @returns Void.\n */\n const onRemovePreferredStoreClickHandler = async (event: React.MouseEvent) => {\n event.stopPropagation();\n locationLineItem.handlers.onRemovePreferredStore();\n await props.data.storeSelectorStateManager.result?.setSelectedStoreLocationId(undefined);\n };\n\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n
\n
\n {storeLocatorView && {index}}\n {storeName}\n {distanceAsString ? {distanceAsString} : false}\n
\n
\n
\n

{locationLineItem.resources.contactInfoHeader}

\n {storeAddress && (\n
\n
\n )}\n {phoneNumber && (\n
\n \n {phoneNumber}\n
\n )}\n
\n
\n

{locationLineItem.resources.storeHoursHeader}

\n {renderStoreHours(storeHours, storeHoursList, locationLineItem.locationOpen, props.resources)}\n
\n {!storeLocatorView && (\n
\n

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

}\n
\n )}\n {isPreferredStoreEnabled &&\n (isPreferredStore ? (\n \n {resources.preferredStoreText}\n \n ) : (\n \n {resources.setAsPreferredStoreText}\n \n ))}\n
\n
\n );\n};\n\n/**\n * Render Store Location.\n * @param location - The location props.\n * @param index - The location index.\n * @param props - The view props.\n * @param selectedLocationReference - The ref.\n * @returns The JSX Element.\n */\nconst renderStoreLocation = (\n location: IStoreSelectorLocationLineItemProps,\n index: number,\n props: IStoreSelectorViewProps & IStoreSelectorProps,\n selectedLocationReference: React.RefObject\n): JSX.Element | undefined => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n hideStockStatus,\n storeLocatorView,\n isCurrentLocation,\n isInStock,\n productPickUpOptionList,\n resources,\n storePickUpOptionList,\n telemetryContent\n } = location;\n\n const orgUnitLocation = location.location;\n const selectedStoreLocationId = location.selectedStoreLocationId;\n const defaultAriaSetsize = 0;\n const canSelectLocation = hideStockStatus ?? isInStock;\n const storeName = location.location.OrgUnitName;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickUpOptionDropdownPlaceholderText: string = props.resources.pickupOptionDropdownPlaceholderText;\n\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const selectStoreText = props.resources.selectStoreText;\n const pickUpMethodLabel = props.resources.pickUpMethodLabel;\n\n /**\n * Method to handle the pick up in store.\n * @returns Void.\n */\n const onPickupInStoreClickHandler = () => () => {\n location.handlers.onSelected(location.location);\n };\n\n /**\n * Render Store Locations.\n * @param unitLocation - The org unit location.\n * @returns Handler for onClick.\n */\n const onClickHandler = (unitLocation: OrgUnitLocation | undefined) => () => {\n location.onClick(unitLocation?.OrgUnitNumber);\n };\n\n const canSelectPickUpMethod = !ArrayExtensions.hasElements(deliveryOptionList) ? (\n \n ) : (\n \n );\n const pickUpMethodSelection = canSelectLocation ? canSelectPickUpMethod : false;\n\n return (\n \n \n {renderStoreLocationLineItem(location, props)}\n \n {!storeLocatorView &&\n (isCurrentLocation ? (\n

{resources.currentLocation}

\n ) : (\n pickUpMethodSelection\n ))}\n \n );\n};\n\n/**\n * Render Store Locations.\n * @param props - The view props.\n * @param selectedLocationReference - The ref.\n * @returns The JSX Element.\n */\nconst renderStoreLocations = (\n props: IStoreSelectorViewProps & IStoreSelectorProps,\n selectedLocationReference: React.RefObject\n) => {\n return (\n \n {props.locationListProps?.map((store, index) => {\n return renderStoreLocation(store, index, props, selectedLocationReference);\n })}\n \n );\n};\n\n/**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\nconst mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n};\n\n/**\n * Render the selected store.\n * @param selectedLocationProps -- Selected store view props.\n * @param storeSelectorViewProps -- Store selector view props.\n * @returns -- HTML.\n */\nexport const renderSelectedStore = (\n selectedLocationProps: ISelectedStoreViewProps,\n storeSelectorViewProps: IStoreSelectorViewProps & IStoreSelectorProps\n): JSX.Element => {\n const {\n storeDetailsMain,\n storeHeader,\n storeName,\n storeDetailsCloseButton,\n storeDistance,\n storeDetailsAvailabilityContainer,\n productAvailability,\n stockStatus,\n isPreferredStore,\n preferredStoreButton,\n removePreferredStoreButton,\n selectedStore\n } = selectedLocationProps;\n\n const storeAddress: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.Contacts);\n const storeHoursList = selectedStore?.StoreHours?.RegularStoreHours\n ? buildStoreHours(selectedStore.StoreHours.RegularStoreHours, mapResources(storeSelectorViewProps.resources))\n : [];\n const storeOpenFrom: string | undefined = secondsToTime(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OpenTo);\n const locationOpen = { openFrom: storeOpenFrom, openTo: storeOpenTo };\n const storeNameValue = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const pickupInStoreAriaLabel: string = selectedLocationProps.resources.selectLocationAriaLabelFormat.replace(\n '{StoreName}',\n storeNameValue ?? ''\n );\n const telemetryContent = getTelemetryObject(\n storeSelectorViewProps.context.request.telemetryPageName!,\n storeSelectorViewProps.friendlyName,\n storeSelectorViewProps.telemetry\n );\n const payLoad = getPayloadObject('click', telemetryContent, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n const pickupInStoreButtonText: string = selectedLocationProps.resources.selectLocation;\n const selectStoreText = storeSelectorViewProps.resources.selectStoreText;\n const pickUpMethodLabel = storeSelectorViewProps.resources.pickUpMethodLabel;\n const pickUpOptionDropdownPlaceholderText: string = storeSelectorViewProps.resources.pickupOptionDropdownPlaceholderText;\n const orgUnitNumber = selectedStore?.OrgUnitAvailability?.OrgUnitLocation!.OrgUnitNumber;\n const productPickUpOptionList = storeSelectorViewProps.data.storeSelectorStateManager.result?.context?.deliveryOptions?.DeliveryOptions;\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, selectedLocationProps.deliveryOptions);\n const selectedLocation = storeSelectorViewProps.locationListProps?.find(location => location.location.OrgUnitNumber === orgUnitNumber);\n\n /**\n * Method to handle the pick up in store.\n * @returns Void.\n */\n const onPickupInStoreClickHandler = () => () => {\n selectedLocationProps.handlers.onSelected(selectedStore!.OrgUnitAvailability!.OrgUnitLocation!);\n };\n const canSelectPickUpMethod = !ArrayExtensions.hasElements(deliveryOptionList) ? (\n \n ) : (\n selectedLocation && (\n \n )\n );\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n
\n

{storeSelectorViewProps.resources.contactText}

\n {storeAddress && (\n
\n
\n )}\n {phoneNumber && (\n
\n \n {phoneNumber}\n
\n )}\n
\n
\n

{storeSelectorViewProps.resources.timeText}

\n {renderStoreHours(selectedStore?.StoreHours, storeHoursList, locationOpen, storeSelectorViewProps.resources)}\n
\n {productAvailability && (\n
\n

{productAvailability}

\n {stockStatus &&

{stockStatus}

}\n
\n )}\n
\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n {canSelectPickUpMethod}\n
\n );\n};\n\n/**\n * Store Selector View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst StoreSelectorViewComponent: React.FC> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Store-Selector.tsx file\n const {\n BodyContainerProps,\n storeResultContainerProps,\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n locationsMessage,\n search,\n state,\n spinner,\n maps,\n locationsList,\n noLocationsMessage,\n terms,\n storeDetailsModal,\n selectedLocation,\n bodyWrapperProps,\n data,\n context\n } = props;\n const selectedLocationReference = React.useRef(null);\n const [isDesktopPort, setIsDesktopPort] = React.useState(false);\n\n const isDesktopViewport = React.useCallback(() => {\n const portView = isMobile({ variant: VariantType.Browser, context: context.request });\n const isDesktopPorts = portView === 'md' || portView === 'xl' || portView === 'lg';\n setIsDesktopPort(isDesktopPorts);\n }, [context]);\n\n React.useEffect(() => {\n if (props.locationsList) {\n /**\n * Method to handle scrolling.\n */\n const scrollIntoView = () => {\n const selectedLocationDiv = (selectedLocationReference as React.RefObject).current;\n if (selectedLocationDiv !== null) {\n const offset = selectedLocationDiv.getBoundingClientRect();\n const parent = selectedLocationDiv.parentElement?.parentElement;\n if (parent && offset) {\n const totalHeight = parent.scrollTop + offset.top;\n parent.scrollTop = totalHeight - parent.clientHeight;\n }\n }\n };\n scrollIntoView();\n }\n }, [props.locationsList]);\n\n React.useEffect(() => {\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', isDesktopViewport);\n }\n isDesktopViewport();\n }, [isDesktopViewport]);\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\n\n const isDesktopView = viewport === 'md' || viewport === 'lg' || viewport === 'xl';\n\n if (!isDesktopView || !isDesktopPort) {\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n \n \n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n {maps}\n \n {selectedLocation && renderSelectedStore(selectedLocation, props)}\n \n \n \n \n {terms}\n \n );\n }\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n \n {maps}\n \n \n {terms}\n \n );\n};\n\nexport default StoreSelectorViewComponent;\n"],"names":["NavigationMenuView","React","constructor","props","super","currentLevel","escapeKey","_updateCategoryImage","categoryImageSrc","option","linkText","promotionalImage","src","altText","ArrayExtensions","hasElements","promotionalContent","map","item","image","imageSrc","push","text","additionalProperties","linkUrl","destinationUrl","this","setState","categoryImage","length","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","activeMenu","id","mobileViewLabelText","parentMenu","state","undefined","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","_escFunction","keyCode","_closeSubmenu","_getCategoryImage","alttext","categoryImageUrl","generateImageUrl","context","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","md","lg","lazyload","ImageData","Image","Object","assign","className","gridSettings","request","imageSettings","config","categoryImageSettings","loadFailureBehavior","role","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","document","body","addEventListener","componentWillUnmount","removeEventListener","render","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","Module","classnames","menuItem","_renderDrawerMenu","MenuList","Node","ref","tabIndex","_renderDisplay","subMenu","_renderDrawer","_renderLinkMenuItem","toggleButtonText","categoriesToExclude","some","cate","toLowerCase","trim","Drawer","key","openGlyph","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","index","cateIndex","findIndex","menu","_menu$linkText","splice","i","_getFromSubMenu","_createMenuItemList","forEach","subMenus","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","error","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","Button","onClick","onFocus","hoverEffect","arguments","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","OrganizationUsersTile","heading","description","links","user","isB2b","SignUpButton","_ref","ariaLabel","disabled","link","SignUpError","type","message","errorClassName","GetMaxLength","maxLength","parsedMaxLength","Number","parseInt","isNaN","SignUpInput","value","pattern","isRequired","onChange","fieldReference","InputType","TextArea","name","SignUpLabel","forId","htmlFor","InputID","renderInputSection","inputs","needToReset","onInputChange","showErrors","addressForm","updateAddress","element","label","maxChars","customClass","baseSignUpItem","wrapper","errorMessage","Address","isAddressInput","input","updateForm","hasError","resetAddress","BusinessSignUp","_this","BusinessSignUpDefaultInputs","FirstName","Text","resources","firstNameLabel","LastName","lastNameLabel","Email","emailAddressLabel","EmailRegex","defaultRegex","source","CompanyName","companyLabel","Department","departmentLabel","JobTitle","jobTitleLabel","Size","companySizeLabel","companyAddressLabel","Comment","commentLabel","formChildReference","moduleClassName","needsToReset","handleHeadingChange","_onInputChange","newForm","formItems","isReady","_isFormReady","hasSubmitErrors","_onAddressChange","errors","currentAddress","addressItem","find","address","addressHasErrors","showAddressErrors","currentInput","match","_onSubmit","preventDefault","firstName","_getItem","lastName","companyName","companyEmail","companyAddress","jobTitle","department","companySize","comments","newPartner","CompanySize","Comments","createProspectAsync","callerContext","then","successPageURL","confirmationLink","getUrlSync","window","location","catch","_onCancel","cleanForm","isAddress","_addedReference","_this$formChildRefere","shouldComponentUpdate","nextProps","nextState","viewProps","_objectSpread","businessSignUp","moduleProps","ContainerWrapper","editProps","onEdit","businessSignUpForm","_renderForm","renderView","slots","signUpButtonArialabel","signUpButtonText","cancelButtonArialabel","cancelButtonText","partialAddressErrorMessage","addressSlot","form","FormWrapper","items","buttons","disclaimer","RichTextComponent","newFormFields","BusinessSignUpItem","button","CookieComplianceAcceptButton","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","onClose","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","editableLink","openInNewTab","Msdyn365","onTextChange","CookieCompliance","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","handleContentChange","content","visible","cookieRef","_onDismiss","cookies","isConsentGiven","acceptCookiesAriaLabel","moduleConfig","MsDyn365","isBrowser","onDismiss","CookieComplianceBanner","AlertProps","color","fade","Content","acceptButton","setConsentCookie","reload","Alert","renderCustomerName","accountInformation","customer","result","Name","_renderReactFragment","slot","HeaderTag","HeaderContainer","HeaderTopBarContainer","Divider","navIcon","logo","search","preferredStore","renderForMobile","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","accountInfoDropdownButton","signOutLink","signInLink","accountLinks","accountClassName","_renderAccountBlock","wishListIconDesktop","cartIcon","siteOptions","MobileMenuLinksContainer","mobileMenuCollapsed","Collapse","isOpen","_renderMobileAccountBlock","wishListIconMobile","menuBar","_renderCollapseMenu","_positionInSetOffset","promotionalItemImageSettings","_handleFocusOutside","relatedTarget","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_categoryImage$imageS","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","posinset","setSize","keyValue","keys","isDrawerOpen","colProps","toggleButtonProps","onToggle","collapseProps","currentPos","_menuItem$subMenu2","_menuItem$subMenu","menuItemDatum","isParent","shouldOpenNewTab","ProductComparisonButton","_addToProductComparison","_this$props$data$acco","ProductComparisonItem","product","RecordId","catalogId","ProductComparisonState","instance","addItem","_removeFromProductComparison","_this$props$data$acco2","removeItemById","comparisonItemId","_getNewState","_this$props$data$acco3","getItemId","products","_getProdutComparisonDataByCatalogId","canProductBeAddedToProductComparison","hasItemById","currentProductsCount","_className","_instanceId","Random","Guid","generateGuid","_shouldUsePreview","_productComparisonPreview","_renderProductComparisonPreview","productComparisonPreview","title","onClickHandler","isDisabled","ObjectExtensions","isNullOrUndefined","_this$props$data$acco4","listModifiedEvent","subscribe","instanceId","handler","getSnapshotBeforeUpdate","previousProps","_this$props$data$acco5","unsubscribe","buttonClassName","shouldDisplayText","removeFromComparisonButtonText","productComparisonButton","_renderProductComparisonButton","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","viewport","isMobile","variant","VariantType","Browser","app","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","getCatalogId","filter","ProductComparisonButtonViewFunctionalComponent","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","async","deliveryCode","currentTarget","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","delivery","Code","Description","onKeyDown","StoreSelectorLocationLines","orgUnitLocation","OrgUnitNumber","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","itemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","_availabilityWithHour","OrgUnitAvailability","OrgUnitLocation","InventoryLocationId","InventLocationId","StockLevelLabel","_mapResources","contactInfoHeader","contactText","storeHoursHeader","timeText","availabilityInfoHeader","availabilityText","closedText","storeHoursClosedText","outOfStock","outOfStockText","inStock","inStockText","currentLocation","selectedStoreLocationText","selectLocation","selectStoreText","selectLocationAriaLabelFormat","selectStoreAriaFormatText","setAsPreferredStoreText","setAsPreferredStoreTextAriaLabel","preferredStoreText","preferredStoreAriaLabel","pickupDeliveryOptionErrorMessage","days","monday","storeHoursMondayText","tuesday","storeHoursTuesdayText","wednesday","storeHoursWednesdayText","thursday","storeHoursThursdayText","friday","storeHoursFridayText","saturday","storeHoursSaturdayText","sunday","storeHoursSundayText","mondayFull","storeHoursMondayFullText","tuesdayFull","storeHoursTuesdayFullText","wednesdayFull","storeHoursWednesdayFullText","thursdayFull","storeHoursThursdayFullText","fridayFull","storeHoursFridayFullText","saturdayFull","storeHoursSaturdayFullText","sundayFull","storeHoursSundayFullText","storeCounter","componentDidUpdate","selectedStoreLocationId","locations","_stores","_sortStores","reaction","show","displayList","store","_renderStoreLocation","_store$OrgUnitAvailab","deliveryOptions","OrgUnitPickUpDeliveryModes","_store$OrgUnitAvailab2","selected","StoreSelectorLocationLineItemComponent","storeHours","StoreHours","preferredDistanceUnit","isCurrentLocation","isInStock","ItemAvailabilities","handlers","onSelected","onLocationSelected","onSetAsPreferredStore","onRemovePreferredStore","stockStatusLabel","storeLocatorView","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","storePickUpOptionList","DeliveryOptions","productPickUpOptionList","productPickUpDeliveryOptions","filteredPickupMode","shouldShowIndex","stores","isPreferredStore","_value$OrgUnitAvailab","__decorate","observable","observer","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","Promise","resolve","renderPickupModesList","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","TelemetryConstant","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","autoComplete","onSubmit","searchInputAriaLabel","placeholder","onKeyUp","StoreSelectorEmptyMessage","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","_ref2","StoreSelectorFoundLocationsMessage","_ref3","searchRadius","isSeeAllStore","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","replace","PickUpOptionList","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","pickupListOptionMenuText","pickupmodeList","stopPropagation","isExpandSiteOptionsState","secondsToTime","seconds","hours","floor","ampm","divisorForMinutes","getShortTimeString","day","getFullTimeString","buildHoursDisplayInfo","startDay","endDay","hoursInfo","startDayShort","startDayFull","endDayShort","endDayFull","timeRange","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","dateForLookup","get","buildStoreHoursString","buildStoreHours","storeHoursList","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","storeSelectorLocationLineItemComponentActions","deliveryMode","buildDistanceString","distance","onPickupModeSelectHandler","pickupMode","onSetPreferredStoreClickHandler","removePreferredStoreHandler","onChangeHandler","matchDeliveryOptions","productdeliveryOptions","deliveryOption","pickup","_delivery","hideStockStatus","storeName","OrgUnitName","distanceAsString","Distance","storeAddress","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","resourceLabel","stockLabel","stockText","canSelectLocation","pickupInStoreButtonText","pickupInStoreAriaLabel","PickupInStore","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","deliveryOptionList","isError","setError","renderStoreHours","RegularStoreHours","displayTime","JSON","stringify","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","pickUpButtonClickHandler","renderPickupModes","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","_props$selectedStore2","_props$selectedStore3","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","parentClassName","storeDetailsMain","tag","storeHeader","storeDetailsCloseButton","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","pickUpDeliveryOptionButton","pickupModes","preferredStoreButton","removePreferredStoreButton","StoreSelector","renderSelectedStore","shouldHideInventory","hasEnabledOutOfStockCheck","availabilitiesWithHours","storeSelectorStateManager","storeLocations","selectedStoreResources","_selectedStore$OrgUni3","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","termsOfServiceLink","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","mode","setPreferredStoreLocation","Latitude","Longitude","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSearchInProgress","isSeeAllStoreValue","geoLocate","_updateLocations","latitude","longitude","shouldShowAllStores","_navigator","style","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","PERMISSION_DENIED","timeout","_closeDialog","_storeSelectorStateMa","parentElementRef","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","setOrgUnitStoreInformation","radius","lookupRadius","searchRadiusUnit","calRadius","distanceUnitValue","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","warning","selectedLocation","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","_this$props$data$stor6","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","_this$props$data$stor5","loadMapApi","BingMapsEnabled","lang","locale","market","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","_storeSelectorStateMa2","_storeSelectorStateMa3","_sortLocation","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","appConfig","maps","mapSlot","isMobileDevice","Viewport","isInlineView","isLocatorView","listMapViewState","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","sortLocation","isEnableOutofStock","enableStockCheck","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","ModuleProps","Modal","classname","autoFocus","onClosed","horizontalPosition","verticalPosition","toggle","HeaderContainerProps","ModalHeader","HeaderProps","FooterContainerProps","ModalFooter","BodyContainerProps","ModalBody","bodyWrapperProps","storeResultContainerProps","mapContainerProps","storeDetailsModal","locationsMessage","spinner","locationsList","outOfStockThreshold","noLocationsMessage","terms","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","_store$OrgUnitAvailab3","selectedStoreLocation","lineResources","_store$OrgUnitAvailab4","locationOpen","openFrom","openTo","renderDeliveryOptions","renderBody","toggleBopisHandler","cartLine","isBopisSelected","_cartLine$pickUpInSto","pickUpInStore","toggleBopis","onChangeStoreHandler","_cartLine$pickUpInSto2","renderCartLine","storeSelector","isMultiplePickUp","emailDeliveryModeCode","outOfStockErrorMessage","addToWishlist","remove","renderGroupBopisBlock","_cartLine$data2","cartline","DeliveryMode","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","puckUpinStoreAttribute","addToOrderTemplate","renderCartlinesInternal","cartLines","itemIndex","renderBopisBlock","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","ContainerProps","orgUnitName","renderCartlines","waitingComponent","cartLoadingStatus","isCartDataResult","multiplePickUpEnabled","CartlinesWrapper","emptyCart","renderCartLinesGroupHeader","count","_cartLine$pickUpInSto6","pickUpText","shippingText","emailshippingText","payInvoicesDisplayText","groupTitle","IsInvoiceLine","StringExtensions","isNullOrEmpty","renderCartLinesGroupTitle","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","_cartLine$pickUpInSto5","itemLabel","itemsLabel","countTitle","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","_props$cart6","updatedTitle","cartTitle","cart","totalItemsInCart","renderModuleAttributes","checkoutBlockedDueToUnavailableFunds","orderSummaryLineitems","orderTotal","checkoutAsSignInUserButton","checkoutAsGuestButton","renderOrderSummaryCheckoutButton","hasInvoiceLine","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","renderCartLinesGroup","cartLinesGroup","cartlines","_props$context$action","_props$context$action2","cartlineId","countItem","reduce","_item$data$cartline$Q","_item$data","Quantity","countItems","EmailDeliveryModeCode","cartDataResult","orderSummaryHeading","OrderSummaryWrapper","renderInvoiceSummarylines","invoiceSummaryLines","orderSummaryItems","invoices","giftCard","loyalty","invoiceSummaryLineitems","OrderSummaryItems","renderOrderSummarylines","orderSummaryLines","subtotal","totalDiscounts","shipping","otherCharge","tax","errorData","OrderSummaryErrors","Wrapper","header","_props$cart","promoCode","expressCheckoutButton","ExpressCheckoutSectionWrapper","createTemplateFromCartButton","renderOrderSummaryCheckout","renderAdditionalContent","additionalContent","_additionalContent$ad","additionalContentNode","additionalContentItems","additionalContentItemContainer","additionalContentItemLinks","contentBlockContainer","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","imageAriaLabel","imageClass","FooterItemView","FooterItem","_renderElement","HeadingContainer","EditableLink","StoreSelectorFoundLocationsMessageComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","dataset","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","PickUpButtonComponent","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","_props$data$storeSele","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","orgUnitNumber","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","_data$storeSelectorSt","displayMap"],"sourceRoot":""}