{"version":3,"file":"static/js/28.878874b61c740fee5c36.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/absolute-nav-item/absolute-nav-item.tsx?d010","webpack://Msdyn365.Commerce.Online/./src/modules/absolute-nav-item/absolute-nav-item.view.tsx?28d4","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-nav-item/freedom-nav-item.tsx?6602","webpack://Msdyn365.Commerce.Online/./src/modules/freedom-nav-item/freedom-nav-item.view.tsx?e523","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-nav-item/obrien-nav-item.tsx?7706","webpack://Msdyn365.Commerce.Online/./src/modules/obrien-nav-item/obrien-nav-item.view.tsx?4762","webpack://Msdyn365.Commerce.Online/./src/themes/absoluteoutdoors/views/cart.view.tsx?8a04","webpack://Msdyn365.Commerce.Online/./src/themes/arborbb/views/cart.view.tsx?e3fe","webpack://Msdyn365.Commerce.Online/./src/themes/freedom23/views/cart.view.tsx?039f","webpack://Msdyn365.Commerce.Online/./src/themes/liquid23/views/cart.view.tsx?f72f","webpack://Msdyn365.Commerce.Online/./src/themes/obrien23/views/cart.view.tsx?654c","webpack://Msdyn365.Commerce.Online/./src/themes/watersportdiscounts/views/cart.view.tsx?7c3d","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-sign-up/components/loyalty-sign-up-small-components.tsx?7106","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-sign-up/loyalty-sign-up.tsx?fd89","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-sign-up/loyalty-sign-up.view.tsx?45ec","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-terms/components/loyalty-terms-modal.tsx?1b8b","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-terms/loyalty-terms.tsx?babd","webpack://Msdyn365.Commerce.Online/./src/modules/loyalty-terms/loyalty-terms.view.tsx?b3e6","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/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/store-selector.view.tsx?ccdd","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/write-review.view.tsx?c67c"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, IPayLoad, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IAbsoluteNavItemConfig, IAbsoluteNavItemProps, IHeadingData, ILinkData } from './absolute-nav-item.props.autogenerated';\r\n\r\nexport interface IAbsoluteNavViewProps extends IAbsoluteNavItemProps {\r\n heading: React.ReactNode;\r\n image: React.ReactNode;\r\n text: React.ReactNode;\r\n linkText: React.ReactNode;\r\n className?: string;\r\n AbsoluteNavItem: IModuleProps;\r\n HeadingContainer: INodeProps;\r\n ItemContainer: INodeProps;\r\n Link: INodeProps;\r\n EditableLink: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * AbsoluteNavItem component.\r\n * @extends {React.PureComponent>}\r\n */\r\nexport class AbsoluteNavItem extends React.PureComponent> {\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private attributes: Msdyn365.IDictionary | undefined;\r\n\r\n constructor(props: IAbsoluteNavItemProps) {\r\n super(props);\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n\r\n // Construct telemetry attribute to render\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { heading, image, link, text } = this.props.config;\r\n const AbsoluteNavItemClassName = classnames('absolute-nav__item', this.props.config.className);\r\n const linkText = link && link.linkText ? link.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n const viewProps: IAbsoluteNavViewProps = {\r\n ...this.props,\r\n heading: this._createHeading(heading!),\r\n image: this._createImageMarkup(image!),\r\n text: this._createText(text!),\r\n linkText: this._createLinkText(link!),\r\n EditableLink: this._createLink(link!),\r\n\r\n AbsoluteNavItem: {\r\n moduleProps: this.props,\r\n className: AbsoluteNavItemClassName\r\n },\r\n\r\n HeadingContainer: {\r\n className: 'absolute-nav__heading'\r\n },\r\n\r\n ItemContainer: {\r\n className: 'absolute-nav__link__container'\r\n },\r\n\r\n // @ts-expect-error\r\n Link: link && link.linkUrl && link.linkUrl.destinationUrl && {\r\n tag: 'a',\r\n role: 'link',\r\n className: 'absolute-nav__link',\r\n href: link.linkUrl.destinationUrl,\r\n title: linkText,\r\n 'aria-label': link.ariaLabel,\r\n target: link.openInNewTab ? '_blank' : undefined,\r\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText),\r\n ...this.attributes\r\n },\r\n className: AbsoluteNavItemClassName\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\r\n\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.text = event.target.value;\r\n\r\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.link!.linkText = event.target.value;\r\n\r\n private _createLink(link: ILinkData): React.ReactNode | null {\r\n if (link) {\r\n const linkText = link.linkText ? link.linkText : '';\r\n\r\n // TODO: Update the inner tag in the anchor link to span\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'absolute-nav__link',\r\n linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button',\r\n additionalProperties: this.attributes!,\r\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText)\r\n };\r\n return (\r\n \r\n );\r\n\r\n }\r\n return null;\r\n }\r\n\r\n private _createLinkText(link: ILinkData): React.ReactNode | null {\r\n if (!link || !link.linkText) {\r\n return null;\r\n }\r\n\r\n return (\r\n {link.linkText}\r\n );\r\n }\r\n\r\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\r\n if (!heading || !heading.text || heading.text.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _createText(text: string): React.ReactNode | null {\r\n if (!text) {\r\n return null;\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _createImageMarkup(item: Msdyn365.IImageData, ariaHiddenAttr?: boolean): React.ReactNode | null {\r\n if (!item || !item.src || item.src.length === 0) {\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=24&h=24&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=24&h=24&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default AbsoluteNavItem;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IAbsoluteNavViewProps } from './absolute-nav-item';\r\n\r\n/**\r\n *\r\n * AbsoluteNavItemView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class AbsoluteNavItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n const { AbsoluteNavItem } = this.props;\r\n return (\r\n \r\n {this._renderElement(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderElement(props: IAbsoluteNavViewProps): React.ReactNode | null {\r\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\r\n if (heading) {\r\n return (\r\n {' '}\r\n {heading}\r\n {' '}\r\n );\r\n } else if (Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n \r\n );\r\n } else if (Link) {\r\n return (EditableLink);\r\n }\r\n return (\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default AbsoluteNavItemView;\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, IPayLoad, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IFreedomNavItemConfig, IFreedomNavItemProps, IHeadingData, ILinkData } from './freedom-nav-item.props.autogenerated';\r\n\r\nexport interface IFreedomNavViewProps extends IFreedomNavItemProps {\r\n heading: React.ReactNode;\r\n image: React.ReactNode;\r\n text: React.ReactNode;\r\n linkText: React.ReactNode;\r\n className?: string;\r\n FreedomNavItem: IModuleProps;\r\n HeadingContainer: INodeProps;\r\n ItemContainer: INodeProps;\r\n Link: INodeProps;\r\n EditableLink: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * FreedomNavItem component.\r\n * @extends {React.PureComponent>}\r\n */\r\nexport class FreedomNavItem extends React.PureComponent> {\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private attributes: Msdyn365.IDictionary | undefined;\r\n\r\n constructor(props: IFreedomNavItemProps) {\r\n super(props);\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n\r\n // Construct telemetry attribute to render\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { heading, image, link, text } = this.props.config;\r\n const FreedomNavItemClassName = classnames('freedom-nav__item', this.props.config.className);\r\n const linkText = link && link.linkText ? link.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n const viewProps: IFreedomNavViewProps = {\r\n ...this.props,\r\n heading: this._createHeading(heading!),\r\n image: this._createImageMarkup(image!),\r\n text: this._createText(text!),\r\n linkText: this._createLinkText(link!),\r\n EditableLink: this._createLink(link!),\r\n\r\n FreedomNavItem: {\r\n moduleProps: this.props,\r\n className: FreedomNavItemClassName\r\n },\r\n\r\n HeadingContainer: {\r\n className: 'freedom-nav__heading'\r\n },\r\n\r\n ItemContainer: {\r\n className: 'freedom-nav__link__container'\r\n },\r\n\r\n // @ts-expect-error\r\n Link: link && link.linkUrl && link.linkUrl.destinationUrl && {\r\n tag: 'a',\r\n role: 'link',\r\n className: 'freedom-nav__link',\r\n href: link.linkUrl.destinationUrl,\r\n title: linkText,\r\n 'aria-label': link.ariaLabel,\r\n target: link.openInNewTab ? '_blank' : undefined,\r\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText),\r\n ...this.attributes\r\n },\r\n className: FreedomNavItemClassName\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\r\n\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.text = event.target.value;\r\n\r\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.link!.linkText = event.target.value;\r\n\r\n private _createLink(link: ILinkData): React.ReactNode | null {\r\n if (link) {\r\n const linkText = link.linkText ? link.linkText : '';\r\n\r\n // TODO: Update the inner tag in the anchor link to span\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'freedom-nav__link',\r\n linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button',\r\n additionalProperties: this.attributes!,\r\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText)\r\n };\r\n return (\r\n \r\n );\r\n\r\n }\r\n return null;\r\n }\r\n\r\n private _createLinkText(link: ILinkData): React.ReactNode | null {\r\n if (!link || !link.linkText) {\r\n return null;\r\n }\r\n\r\n return (\r\n {link.linkText}\r\n );\r\n }\r\n\r\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\r\n if (!heading || !heading.text || heading.text.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _createText(text: string): React.ReactNode | null {\r\n if (!text) {\r\n return null;\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _createImageMarkup(item: Msdyn365.IImageData, ariaHiddenAttr?: boolean): React.ReactNode | null {\r\n if (!item || !item.src || item.src.length === 0) {\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=24&h=24&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=24&h=24&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FreedomNavItem;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IFreedomNavViewProps } from './freedom-nav-item';\r\n\r\n/**\r\n *\r\n * FreedomNavItemView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class FreedomNavItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n const { FreedomNavItem } = this.props;\r\n return (\r\n \r\n {this._renderElement(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderElement(props: IFreedomNavViewProps): React.ReactNode | null {\r\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\r\n if (heading) {\r\n return (\r\n {' '}\r\n {heading}\r\n {' '}\r\n );\r\n } else if (Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n \r\n );\r\n } else if (Link) {\r\n return (EditableLink);\r\n }\r\n return (\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FreedomNavItemView;\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, IPayLoad, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IObrienNavItemConfig, IObrienNavItemProps, IHeadingData, ILinkData } from './obrien-nav-item.props.autogenerated';\r\n\r\nexport interface IObrienNavViewProps extends IObrienNavItemProps {\r\n heading: React.ReactNode;\r\n image: React.ReactNode;\r\n text: React.ReactNode;\r\n linkText: React.ReactNode;\r\n className?: string;\r\n ObrienNavItem: IModuleProps;\r\n HeadingContainer: INodeProps;\r\n ItemContainer: INodeProps;\r\n Link: INodeProps;\r\n EditableLink: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * ObrienNavItem component.\r\n * @extends {React.PureComponent>}\r\n */\r\nexport class ObrienNavItem extends React.PureComponent> {\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private attributes: Msdyn365.IDictionary | undefined;\r\n\r\n constructor(props: IObrienNavItemProps) {\r\n super(props);\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n\r\n // Construct telemetry attribute to render\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { heading, image, link, text } = this.props.config;\r\n const ObrienNavItemClassName = classnames('obrien-nav__item', this.props.config.className);\r\n const linkText = link && link.linkText ? link.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n const viewProps: IObrienNavViewProps = {\r\n ...this.props,\r\n heading: this._createHeading(heading!),\r\n image: this._createImageMarkup(image!),\r\n text: this._createText(text!),\r\n linkText: this._createLinkText(link!),\r\n EditableLink: this._createLink(link!),\r\n\r\n ObrienNavItem: {\r\n moduleProps: this.props,\r\n className: ObrienNavItemClassName\r\n },\r\n\r\n HeadingContainer: {\r\n className: 'obrien-nav__heading'\r\n },\r\n\r\n ItemContainer: {\r\n className: 'obrien-nav__link__container'\r\n },\r\n\r\n // @ts-expect-error\r\n Link: link && link.linkUrl && link.linkUrl.destinationUrl && {\r\n tag: 'a',\r\n role: 'link',\r\n className: 'obrien-nav__link',\r\n href: link.linkUrl.destinationUrl,\r\n title: linkText,\r\n 'aria-label': link.ariaLabel,\r\n target: link.openInNewTab ? '_blank' : undefined,\r\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText),\r\n ...this.attributes\r\n },\r\n className: ObrienNavItemClassName\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\r\n\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.text = event.target.value;\r\n\r\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.link!.linkText = event.target.value;\r\n\r\n private _createLink(link: ILinkData): React.ReactNode | null {\r\n if (link) {\r\n const linkText = link.linkText ? link.linkText : '';\r\n\r\n // TODO: Update the inner tag in the anchor link to span\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'obrien-nav__link',\r\n linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button',\r\n additionalProperties: this.attributes!,\r\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText)\r\n };\r\n return (\r\n \r\n );\r\n\r\n }\r\n return null;\r\n }\r\n\r\n private _createLinkText(link: ILinkData): React.ReactNode | null {\r\n if (!link || !link.linkText) {\r\n return null;\r\n }\r\n\r\n return (\r\n {link.linkText}\r\n );\r\n }\r\n\r\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\r\n if (!heading || !heading.text || heading.text.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _createText(text: string): React.ReactNode | null {\r\n if (!text) {\r\n return null;\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _createImageMarkup(item: Msdyn365.IImageData, ariaHiddenAttr?: boolean): React.ReactNode | null {\r\n if (!item || !item.src || item.src.length === 0) {\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=24&h=24&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=24&h=24&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ObrienNavItem;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IObrienNavViewProps } from './obrien-nav-item';\r\n\r\n/**\r\n *\r\n * ObrienNavItemView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class ObrienNavItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n const { ObrienNavItem } = this.props;\r\n return (\r\n \r\n {this._renderElement(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderElement(props: IObrienNavViewProps): React.ReactNode | null {\r\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\r\n if (heading) {\r\n return (\r\n {' '}\r\n {heading}\r\n {' '}\r\n );\r\n } else if (Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n \r\n );\r\n } else if (Link) {\r\n return (EditableLink);\r\n }\r\n return (\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ObrienNavItemView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart/src/modules/cart/./cart';\r\nimport { ICartlinesViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items-promotion';\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean\r\n): JSX.Element[] | JSX.Element => {\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map(cartLine => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {storeSelector && cartLine.pickUpInStore ? (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n ) : null}\r\n {cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n {cartLine.addToOrderTemplate}\r\n \r\n ) : (\r\n <>\r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n \r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

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

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

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

\r\n

{groupTitle}

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

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n renderCartLinesGroup(props)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources.emptyCartText,\r\n props.CartlinesWrapper,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n Guest Checkout\r\n {props.checkoutAsGuestButton}\r\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\r\n {props.expressCheckoutButton}\r\n ) : null}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart/src/modules/cart/./cart';\r\nimport { ICartlinesViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items-promotion';\r\n\r\nconst _renderCartlines = (cartLines: ICartlinesViewProps[] | undefined, cartEmptyText: string, CartlinesWrapper: INodeProps, storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode, waitingComponent: React.ReactNode, cartLoadingStatus: string, cartDataResult: boolean): JSX.Element[] | JSX.Element => {\r\n\r\n if (cartLoadingStatus) {\r\n return (<>\r\n {cartLoadingStatus}\r\n );\r\n }\r\n if (cartLines) {\r\n return cartLines.map((cartLine) => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {\r\n storeSelector && cartLine.pickUpInStore ? \r\n {cartLine.pickUpInStore.defaultComponent}\r\n : null\r\n }\r\n {\r\n cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n {cartLine.addToOrderTemplate}\r\n \r\n ) : (\r\n <>\r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n \r\n )\r\n }\r\n
\r\n );\r\n });\r\n }\r\n return (cartDataResult ? (\r\n
\r\n

\r\n {cartEmptyText}\r\n

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

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

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

\r\n

\r\n {groupTitle}\r\n

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

\r\n {props.resources.emptyCartText}\r\n

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : <>\r\n {props.waitingComponent}\r\n \r\n );\r\n\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? renderCartLinesGroup(props) : \r\n {_renderCartlines(props.cartlines, props.resources.emptyCartText, props.CartlinesWrapper, props.storeSelector,\r\n props.backToShoppingButton, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult)}\r\n }\r\n {props.orderSummaryHeading &&\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props) : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n }\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart/src/modules/cart/./cart';\r\nimport { ICartlinesViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items-promotion';\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean\r\n): JSX.Element[] | JSX.Element => {\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map(cartLine => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {storeSelector && cartLine.pickUpInStore ? (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n ) : null}\r\n {cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n {cartLine.addToOrderTemplate}\r\n \r\n ) : (\r\n <>\r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n \r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

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

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

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

\r\n

{groupTitle}

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

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n renderCartLinesGroup(props)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources.emptyCartText,\r\n props.CartlinesWrapper,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n Guest Checkout\r\n {props.checkoutAsGuestButton}\r\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\r\n {props.expressCheckoutButton}\r\n ) : null}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart/src/modules/cart/./cart';\r\nimport { ICartlinesViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items-promotion';\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean\r\n): JSX.Element[] | JSX.Element => {\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map(cartLine => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {storeSelector && cartLine.pickUpInStore ? (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n ) : null}\r\n {cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n {cartLine.addToOrderTemplate}\r\n \r\n ) : (\r\n <>\r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n \r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

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

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

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

\r\n

{groupTitle}

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

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n renderCartLinesGroup(props)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources.emptyCartText,\r\n props.CartlinesWrapper,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n Guest Checkout\r\n {props.checkoutAsGuestButton}\r\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\r\n {props.expressCheckoutButton}\r\n ) : null}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart/src/modules/cart/./cart';\r\nimport { ICartlinesViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items-promotion';\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean\r\n): JSX.Element[] | JSX.Element => {\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map(cartLine => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {storeSelector && cartLine.pickUpInStore ? (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n ) : null}\r\n {cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n {cartLine.addToOrderTemplate}\r\n \r\n ) : (\r\n <>\r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n \r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

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

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

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

\r\n

{groupTitle}

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

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n renderCartLinesGroup(props)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources.emptyCartText,\r\n props.CartlinesWrapper,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n Guest Checkout\r\n {props.checkoutAsGuestButton}\r\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\r\n {props.expressCheckoutButton}\r\n ) : null}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart/src/modules/cart/./cart';\r\nimport { ICartlinesViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/./components/cart-line-items-promotion';\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean\r\n): JSX.Element[] | JSX.Element => {\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map(cartLine => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {storeSelector && cartLine.pickUpInStore ? (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n ) : null}\r\n {cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n {cartLine.addToOrderTemplate}\r\n \r\n ) : (\r\n <>\r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n \r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

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

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

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

\r\n

{groupTitle}

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

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n renderCartLinesGroup(props)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources.emptyCartText,\r\n props.CartlinesWrapper,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {/*props.checkoutAsSignInUserButton*/}\r\n Checkout\r\n {/*props.checkoutAsGuestButton*/}\r\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\r\n {props.expressCheckoutButton}\r\n ) : null}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\n\nexport const SignUpText: React.FC<{ text: string }> = (props: { text: string }) => {\n return

{props.text}

;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpText } from './components/loyalty-sign-up-small-components';\nimport { ILoyaltySignUpData } from './loyalty-sign-up.data';\nimport { ILoyaltySignUpProps } from './loyalty-sign-up.props.autogenerated';\n\nexport interface IAccountLoyaltyJoinState {\n clicked: boolean;\n}\nexport interface ILoyaltySignUpViewProps extends ILoyaltySignUpProps {\n LoyaltySignUp: IModuleProps;\n heading: React.ReactNode;\n memberHeading: React.ReactNode;\n signInLink: React.ReactElement;\n signUpText: React.ReactElement;\n signUpButton: React.ReactElement;\n detailsLink: React.ReactElement;\n termsLink: React.ReactElement;\n loading: boolean;\n infoMessageBar?: React.ReactNode;\n}\n\n/**\n *\n * LoyaltySignUp component.\n * @extends {React.Component>}\n */\n@observer\nclass LoyaltySignUp extends React.Component, IAccountLoyaltyJoinState> {\n private readonly telemetryContent?: ITelemetryContent;\n private readonly loyaltySignInAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltySignUpAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltyDetailsLinkAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltyTermsLinkAttributes: Msdyn365.IDictionary | undefined;\n\n constructor(props: ILoyaltySignUpProps) {\n super(props);\n this.state = { clicked: false };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n this.loyaltySignInAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.SignUp;\n this.loyaltySignUpAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyDetailLink;\n this.loyaltyDetailsLinkAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsLink;\n this.loyaltyTermsLinkAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n }\n\n public shouldComponentUpdate(nextProps: ILoyaltySignUpProps, nextState: IAccountLoyaltyJoinState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, heading, memberHeading },\n resources,\n context: {\n actionContext,\n request: {\n user: { signInUrl, isAuthenticated }\n }\n },\n data\n } = this.props;\n\n const termsUrl = Msdyn365.getUrlSync('loyaltyTerms', actionContext);\n let loyaltyJoinUrl = `${Msdyn365.getUrlSync('loyaltyJoin', actionContext)}?joiningLoyalty=true`;\n if (MsDyn365.isBrowser) {\n loyaltyJoinUrl = `${window.location.origin}${loyaltyJoinUrl}`;\n }\n const signInurl = `${signInUrl}?ru=${loyaltyJoinUrl}`;\n const completeClass = classname('ms-loyalty-signup', className);\n const loyaltyCard = data.loyaltyCard;\n const hasLoyaltyAccount = loyaltyCard.result && loyaltyCard.result.CardTenderTypeValue !== undefined;\n const customerInformation = data.customerInformation?.result;\n\n const invalidAsyncCustomerState: boolean =\n (this.props.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\n (customerInformation?.IsAsyncCustomer || false);\n const viewProps = {\n ...this.props,\n className: completeClass,\n LoyaltySignUp: {\n moduleProps: this.props,\n className: completeClass\n },\n infoMessageBar: invalidAsyncCustomerState && (\n \n ),\n loading: loyaltyCard.status === 'LOADING',\n heading: !hasLoyaltyAccount && heading && heading.text && (\n \n ),\n memberHeading: hasLoyaltyAccount && memberHeading && memberHeading.text && (\n \n ),\n signInLink: !isAuthenticated && (\n \n ),\n signUpText: !hasLoyaltyAccount && ,\n signUpButton: !hasLoyaltyAccount && isAuthenticated && (\n \n {this.props.resources.joinLoyaltyButtonText}\n \n ),\n detailsLink: hasLoyaltyAccount && (\n \n {this.props.resources.viewLoyaltyPageText}\n \n ),\n termsLink: !hasLoyaltyAccount && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public handleMemberHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.memberHeading!.text = event.target.value);\n\n private readonly _issueLoyalty = () => {\n if (this.props.context.request.user.isAuthenticated && !this.state.clicked) {\n this.setState({ clicked: true });\n const input = new IssueLoyaltyInput(this.props.context.request.apiSettings);\n\n issueLoyalty(input, this.props.context.actionContext)\n .then(() => {\n if (MsDyn365.isBrowser) {\n window.location.assign(Msdyn365.getUrlSync('loyalty', this.props.context.actionContext) || '');\n }\n })\n .catch((error: Error) => {\n this.setState({ clicked: false });\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to issue loyalty card');\n });\n }\n };\n}\n\nexport default LoyaltySignUp;\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 { ILoyaltySignUpViewProps } from './loyalty-sign-up';\n\nconst LoyaltySignUpView: React.FC = props => {\n const {\n LoyaltySignUp,\n heading,\n memberHeading,\n signInLink,\n signUpText,\n signUpButton,\n detailsLink,\n termsLink,\n loading,\n infoMessageBar\n } = props;\n\n if (loading) {\n props.context.telemetry.error('LoyaltySignUp data is empty, module wont render');\n return null;\n }\n\n return (\n \n {infoMessageBar}\n {memberHeading}\n {heading}\n {detailsLink}\n {signUpText}\n {termsLink}\n {signUpButton}\n {signInLink}\n \n );\n};\n\nexport default LoyaltySignUpView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ILoyaltyTermsModalProps {\n resources: ILoyaltyTermsModalResources;\n returnRef: React.RefObject | undefined;\n checked: boolean;\n isOpen: boolean;\n terms: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n onToggle(): void;\n onSubmit(): void;\n onCheck(): void;\n}\n\nexport interface ILoyaltyTermsModalResources {\n loyaltyTermsHeading: string;\n loyaltyAgreeToTerms: string;\n joinLoyaltyTermsText: string;\n cancelLoyaltyTermsText: string;\n}\n\nexport interface ILoyaltyTermsModalViewProps {\n modal: INodeProps;\n modalHeader: INodeProps;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n heading: React.ReactElement;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n terms: React.ReactNode;\n checkbox: React.ReactElement;\n agreeText: React.ReactElement;\n agreeSection: INodeProps;\n}\n\nexport const LoyaltyTermsModal = (props: ILoyaltyTermsModalProps): ILoyaltyTermsModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.LoyaltyTermsCancel);\n const loyaltyTermCancelAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsSubmit;\n const loyaltyTermSubmitAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsAgree;\n const loyaltyTermCheckboxAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return {\n modal: {\n tag: Modal,\n className: 'ms-loyalty-terms__modal',\n toggle: props.onToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: { tag: ModalHeader, className: 'ms-loyalty-terms__modal-header', toggle: props.onToggle },\n modalFooter: { tag: ModalFooter, className: 'ms-loyalty-terms__modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-loyalty-terms__modal-body' },\n cancelButton: (\n \n ),\n submitButton: (\n \n {props.resources.joinLoyaltyTermsText}\n \n ),\n heading:

{props.resources.loyaltyTermsHeading}

,\n terms: props.terms,\n agreeSection: { className: 'ms-loyalty-terms__agree-section' },\n checkbox: (\n \n ),\n agreeText:

{props.resources.loyaltyAgreeToTerms}

\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport { getLoyaltyCardAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { GetLoyaltyCardInput, issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { ILoyaltyTermsModalViewProps, LoyaltyTermsModal } from './components/loyalty-terms-modal';\nimport { ILoyaltyTermsData } from './loyalty-terms.data';\nimport { ILoyaltyTermsProps } from './loyalty-terms.props.autogenerated';\n\nexport interface ILoyaltyTermsState {\n checked: boolean;\n clicked: boolean;\n isModalOpen: boolean;\n}\nexport interface ILoyaltyTermsViewProps extends ILoyaltyTermsProps {\n LoyaltyTerms: IModuleProps;\n modalToggle: React.ReactElement;\n modal: ILoyaltyTermsModalViewProps;\n loading: boolean;\n}\n\n/**\n *\n * LoyaltyTerms component.\n * @extends {React.Component>}\n */\nclass LoyaltyTerms extends React.Component, ILoyaltyTermsState> {\n private readonly toggleRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n public constructor(props: ILoyaltyTermsProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this._submit = this._submit.bind(this);\n this._checkboxChecked = this._checkboxChecked.bind(this);\n this.toggleRef = React.createRef();\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n let search = this.props.context.request.url.requestUrl.search;\n let isJoining = false;\n if (search) {\n search = search.substring(1);\n const qsps = search.split('&');\n for (const qsp of qsps) {\n const splitQsp = qsp.split('=');\n isJoining = splitQsp[0] === 'joiningLoyalty' && splitQsp[1] === 'true';\n if (isJoining) {\n break;\n }\n }\n }\n\n this.state = {\n isModalOpen: isJoining,\n checked: false,\n clicked: false\n };\n }\n\n public shouldComponentUpdate(nextProps: ILoyaltyTermsProps, nextState: ILoyaltyTermsState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, hideToggle },\n resources,\n slots: { serviceTerms },\n data: { loyaltyCard },\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const completeClass = classname('ms-loyalty-terms', className);\n\n const viewProps = {\n ...this.props,\n className: completeClass,\n LoyaltyTerms: {\n moduleProps: this.props,\n className: completeClass\n },\n loading: loyaltyCard.status === 'LOADING',\n modalToggle: hideToggle !== true && (\n \n ),\n modal:\n isAuthenticated &&\n loyaltyCard.result &&\n loyaltyCard.result.CardNumber === undefined &&\n LoyaltyTermsModal({\n resources: { ...resources },\n returnRef: this.toggleRef,\n checked: this.state.checked,\n isOpen: this.state.isModalOpen,\n terms: serviceTerms,\n telemetryContent: this.telemetryContent,\n onToggle: this._toggle,\n onSubmit: this._submit,\n onCheck: this._checkboxChecked\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _toggle(): void {\n this.setState({ isModalOpen: !this.state.isModalOpen, checked: false });\n }\n\n private _submit(): void {\n if (this.props.context.request.user.isAuthenticated && !this.state.clicked) {\n this.setState({ clicked: true });\n const input = new IssueLoyaltyInput(this.props.context.request.apiSettings);\n\n issueLoyalty(input, this.props.context.actionContext)\n .then(card => {\n if (this.props.config.redirectToLoyalty) {\n window.location.assign(getUrlSync('loyalty', this.props.context.actionContext) || '');\n } else {\n getLoyaltyCardAsync({ callerContext: this.props.context.actionContext }, card.CardNumber || '')\n .then(fullCard => {\n this.props.context.actionContext.update(\n new GetLoyaltyCardInput(this.props.context.request.apiSettings),\n fullCard\n );\n })\n .catch((error: Error) => {\n this.props.context.actionContext.update(\n new GetLoyaltyCardInput(this.props.context.request.apiSettings),\n card\n );\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to fetch loyalty card');\n });\n }\n })\n .catch((error: Error) => {\n this.setState({ clicked: false });\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to issue loyalty card');\n });\n }\n }\n\n private _checkboxChecked(): void {\n this.setState({ checked: !this.state.checked });\n }\n}\n\nexport default LoyaltyTerms;\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 { ILoyaltyTermsViewProps } from './loyalty-terms';\n\nconst LoyaltyTermsView: React.FC = props => {\n const { LoyaltyTerms, modalToggle, modal, loading } = props;\n\n return !loading && modal ? (\n \n {modalToggle}\n \n {modal.heading}\n \n {modal.terms}\n \n {modal.checkbox}\n {modal.agreeText}\n \n \n \n {modal.submitButton}\n {modal.cancelButton}\n \n \n \n ) : null;\n};\n\nexport default LoyaltyTermsView;\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 { 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\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\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 retrun 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 * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\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 /* 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
\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 MsDyn365, { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ContactInformationType, DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } 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\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 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 * 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 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 {pickupInStoreButtonText}\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 {pickupInStoreButtonText}\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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageSettings, Image, RichTextComponent } from '@msdyn365-commerce/core';\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
{renderProductImage(props)}
\n
\n
{product?.Name}
\n
{product?.Name}
\n
{product?.ItemId}
\n
\n
\n );\n};\n\n/**\n * Create Write Review Modal.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
{resources.selectRatingLabel}
\n {reviewModal.rating}\n
\n
\n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
\n
\n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
\n );\n};\n\n/**\n * WriteReview view.\n * @param props - WriteReview ViewProps.\n * @returns WriteReview view module.\n */\nconst WriteReviewView: React.FC> = props => {\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\n const { paragraph } = config;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n const text = paragraph && ;\n\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {text}\n {modalToggle}\n {createReviewModal(props)}\n \n )}\n \n );\n};\n\nexport default WriteReviewView;\n"],"names":["AbsoluteNavItem","React","constructor","props","super","handleHeadingChange","event","this","config","heading","text","target","value","handleTextChange","handleLinkTextChange","link","linkText","telemetryContent","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","render","image","AbsoluteNavItemClassName","classnames","className","contentAction","etext","attributes","getTelemetryAttributes","viewProps","_objectSpread","_createHeading","_createImageMarkup","_createText","_createLinkText","EditableLink","_createLink","moduleProps","HeadingContainer","ItemContainer","Link","linkUrl","destinationUrl","tag","role","href","title","ariaLabel","openInNewTab","undefined","onClick","onTelemetryClick","renderView","editableLink","additionalProperties","Msdyn365","editProps","onTextChange","requestContext","length","onEdit","item","ariaHiddenAttr","src","Object","assign","gridSettings","imageSettings","viewports","xs","q","w","h","lg","lazyload","loadFailureBehavior","key","shouldSkipToMainImage","AbsoluteNavItemView","Module","_renderElement","Node","FreedomNavItem","FreedomNavItemClassName","FreedomNavItemView","ObrienNavItem","ObrienNavItemClassName","ObrienNavItemView","_renderCartlines","cartLines","cartEmptyText","CartlinesWrapper","storeSelector","backToShoppingButton","waitingComponent","cartLoadingStatus","cartDataResult","map","cartLine","_cartLine$cartlineId","cartlineId","MsDyn365","isBrowser","toString","cartline","pickUpInStore","ContainerProps","defaultComponent","addToOrderTemplate","remove","addToWishlist","renderCartLinesGroupHeader","pickUpText","shippingText","emailShippingText","titleSeparate","emailDeliveryModeCode","_cartLine$pickUpInSto4","groupTitle","isBopisSelected","data","DeliveryMode","toLowerCase","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","deliveryOption","orgUnitName","_props$cart","_props$cart2","errorData","promotions","id","renderModuleAttributes","cart","hasInvoiceLine","promotionOptions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","multiplePickUpEnabled","cartLinesGroup","ArrayExtensions","hasElements","cartlines","_props$context$action","resources","emailshippingText","actionContext","channel","EmailDeliveryModeCode","emptyCartText","renderCartLinesGroup","orderSummaryHeading","OrderSummaryWrapper","_renderInvoiceSummarylines","invoiceSummaryLines","OrderSummaryItems","invoices","giftCard","loyalty","orderTotal","error","invoiceSummaryLineitems","_renderOrderSummarylines","orderSummaryLines","promoCode","subtotal","shipping","otherCharge","tax","totalDiscounts","orderSummaryLineitems","OrderSummaryErrors","errors","Wrapper","header","checkoutAsSignInUserButton","checkoutAsGuestButton","expressCheckoutButton","ExpressCheckoutSectionWrapper","createTemplateFromCartButton","SignUpText","LoyaltySignUp","handleMemberHeadingChange","memberHeading","_issueLoyalty","user","isAuthenticated","state","clicked","setState","input","IssueLoyaltyInput","apiSettings","issueLoyalty","then","window","location","catch","message","debug","TelemetryConstant","SignIn","loyaltySignInAttributes","SignUp","loyaltySignUpAttributes","LoyaltyDetailLink","loyaltyDetailsLinkAttributes","LoyaltyTermsLink","loyaltyTermsLinkAttributes","shouldComponentUpdate","nextProps","nextState","_data$customerInforma","_this$props$context$a","_this$props$context$a2","signInUrl","termsUrl","loyaltyJoinUrl","origin","signInurl","completeClass","classname","loyaltyCard","hasLoyaltyAccount","result","CardTenderTypeValue","customerInformation","invalidAsyncCustomerState","app","canRenderAsyncCustomerDataAsUnmodifiable","IsAsyncCustomer","infoMessageBar","accountProcessingPendingInfoMessage","loading","status","signInLink","Button","joinLoyaltyButtonText","signUpText","loyaltyProgramText","signUpButton","disabled","detailsLink","viewLoyaltyPageText","termsLink","loyaltyTermsLinkText","__decorate","observer","LoyaltyTermsModal","LoyaltyTermsCancel","loyaltyTermCancelAttributes","LoyaltyTermsSubmit","loyaltyTermSubmitAttributes","LoyaltyTermsAgree","loyaltyTermCheckboxAttributes","modal","Modal","toggle","onToggle","applicationNode","isOpen","returnFocusRef","returnRef","modalHeader","ModalHeader","modalFooter","ModalFooter","modalBody","ModalBody","cancelButton","cancelLoyaltyTermsText","submitButton","onSubmit","checked","joinLoyaltyTermsText","loyaltyTermsHeading","terms","agreeSection","checkbox","type","onChange","onCheck","agreeText","loyaltyAgreeToTerms","LoyaltyTerms","_toggle","bind","_submit","_checkboxChecked","toggleRef","search","url","requestUrl","isJoining","substring","qsps","split","qsp","splitQsp","isModalOpen","hideToggle","slots","serviceTerms","modalToggle","innerRef","joinLoyaltytermsToggleText","CardNumber","card","redirectToLoyalty","getUrlSync","getLoyaltyCardAsync","callerContext","fullCard","update","GetLoyaltyCardInput","renderCustomerName","accountInformation","customer","FirstName","Name","_renderReactFragment","items","slot","index","HeaderTag","HeaderContainer","HeaderTopBarContainer","Divider","navIcon","logo","preferredStore","renderForMobile","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","accountInfoDropdownButton","signOutLink","accountLinks","accountClassName","_renderAccountBlock","wishListIconDesktop","cartIcon","siteOptions","MobileMenuLinksContainer","mobileMenuCollapsed","Collapse","Drawer","openGlyph","closeGlyph","glyphPlacement","toggleButtonText","_renderMobileAccountBlock","wishListIconMobile","menuBar","_renderCollapseMenu","NavigationMenuView","currentLevel","_positionInSetOffset","escapeKey","_updateCategoryImage","categoryImageSrc","option","promotionalImage","altText","promotionalContent","imageSrc","promotionalItemImageSettings","push","categoryImage","categoryImageAltText","_handleDropdownToggle","parentId","isMobileView","activeMenu","parentMenu","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","contains","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_getCategoryImage","categoryImageUrl","generateImageUrl","defaultImageSettings","sm","md","_ref","_categoryImage$imageS","ImageData","Image","categoryImageSettings","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","componentDidMount","document","body","addEventListener","componentWillUnmount","removeEventListener","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","menuItem","posinset","_renderDrawerMenu","MenuList","ref","tabIndex","_renderDisplay","setSize","subMenu","_renderDrawer","_renderLinkMenuItem","keyValue","keys","isDrawerOpen","colProps","toggleButtonProps","collapseProps","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","forEach","subMenus","i","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","_renderMenu","onFocus","hoverEffect","arguments","isParent","imagesource","shouldOpenNewTab","onMouseOver","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","async","preventDefault","deliveryCode","currentTarget","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","find","delivery","Code","Description","onKeyDown","StoreSelectorLocationLines","onClickHandler","orgUnitLocation","OrgUnitNumber","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","itemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","_availabilityWithHour","_availabilityWithHour2","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","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","previousProps","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","_value$OrgUnitAvailab2","filter","observable","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","Promise","resolve","renderPickupModesList","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","name","autoComplete","searchInputAriaLabel","placeholder","onKeyUp","color","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","onPickupInStoreClickHandler","onPickupModeSelectHandler","pickupMode","onSetPreferredStoreClickHandler","removePreferredStoreHandler","onChangeHandler","matchDeliveryOptions","productdeliveryOptions","pickup","_delivery","hideStockStatus","storeName","OrgUnitName","distanceAsString","Distance","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","resourceLabel","stockLabel","stockText","canSelectLocation","pickupInStoreButtonText","pickupInStoreAriaLabel","PickupInStore","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","deliveryOptionList","renderStoreHours","RegularStoreHours","displayTime","JSON","stringify","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","renderPickupModes","_props$selectedStore","_props$selectedStore$","selectedStore","_props$selectedStore2","_props$selectedStore3","_props$selectedStore4","_props$selectedStore5","_props$selectedStore6","_props$selectedStore7","_props$selectedStore8","storeDetailsModalHandler","closeStoreDetailsModal","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","_selectedStore$OrgUni3","shouldHideStockStatus","parentClassName","storeDetailsMain","storeHeader","storeDetailsCloseButton","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","pickUpDeliveryOptionButton","pickupModes","preferredStoreButton","removePreferredStoreButton","StoreSelector","renderSelectedStore","shouldHideInventory","hasEnabledOutOfStockCheck","availabilitiesWithHours","storeSelectorStateManager","storeLocations","selectedStoreResources","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","termsOfServiceLink","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","_location$OrgUnitPick2","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","_preferredStore$OrgUn4","_preferredStore$OrgUn5","_preferredStore$OrgUn6","storeId","cookies","mode","_store$OrgUnitAvailab3","_store$OrgUnitAvailab4","setPreferredStoreLocation","isConsentGiven","Latitude","Longitude","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSearchInProgress","isSeeAllStoreValue","geoLocate","trim","_updateLocations","latitude","longitude","shouldShowAllStores","_navigator","style","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","PERMISSION_DENIED","timeout","_closeDialog","_storeSelectorStateMa","_storeSelectorStateMa2","_storeSelectorStateMa3","parentElementRef","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","product","setOrgUnitStoreInformation","radius","lookupRadius","searchRadiusUnit","calRadius","distanceUnitValue","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","selectedLocation","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","_isInStock$OrgUnitAva2","_this$props$data$stor7","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","_this$props$context$a3","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","_this$props$data$stor5","_this$props$data$stor6","loadMapApi","BingMapsEnabled","lang","locale","market","_this$props$data$stor8","_this$props$data$stor9","_this$props$context$a4","_this$props$data$stor10","when","_this$props$data$stor11","_this$props$data$stor12","_this$props$data$stor13","_this$props$data$stor14","isSameContext","_storeSelectorStateMa4","_storeSelectorStateMa5","_storeSelectorStateMa6","_sortLocation","_storeSelectorStateMa7","_storeSelectorStateMa8","_storeSelectorStateMa9","_storeSelectorStateMa10","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","appConfig","maps","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isInlineView","isLocatorView","listMapViewState","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","sortLocation","isEnableOutofStock","enableStockCheck","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","ModuleProps","autoFocus","fade","onClosed","horizontalPosition","verticalPosition","HeaderContainerProps","HeaderProps","FooterContainerProps","BodyContainerProps","bodyWrapperProps","storeResultContainerProps","mapContainerProps","storeDetailsModal","locationsMessage","spinner","locationsList","outOfStockThreshold","noLocationsMessage","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","_store$OrgUnitAvailab5","selectedStoreLocation","lineResources","_store$OrgUnitAvailab6","locationOpen","openFrom","openTo","renderDeliveryOptions","renderBody","StoreSelectorFoundLocationsMessageComponent","RichTextComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","isError","setError","dataset","description","StringExtensions","isNullOrEmpty","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","renderStoreLocations","selectedLocationReference","_props$data$storeSele","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","Number","parseInt","selectedLocationProps","storeSelectorViewProps","_selectedStore$OrgUni4","_selectedStore$StoreH","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_selectedStore$OrgUni7","_selectedStore$OrgUni8","_selectedStore$OrgUni9","_selectedStore$OrgUni10","_selectedStore$OrgUni11","_storeSelectorViewPro","_storeSelectorViewPro2","_storeSelectorViewPro3","_storeSelectorViewPro4","storeNameValue","orgUnitNumber","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","viewport","_data$storeSelectorSt","displayMap","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","fallBackSrc","xl","cropFocalRegion","renderProductImage","ItemId","signInMessage","signInButton","paragraph","reviewModal","form","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","createReviewModal"],"sourceRoot":""}