{"version":3,"file":"static/js/12.48dee96d37c36307a0b3.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/koelliker/views/account-profile.view.tsx?c56f","webpack://Msdyn365.Commerce.Online/./src/themes/koelliker/views/ratings-histogram.view.tsx?9c47","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/account-profile-edit.tsx?a0b5","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/account-profile-edit.view.tsx?530d","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-button.tsx?e669","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-error.tsx?eadf","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-input.tsx?5c72","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-label.tsx?4793","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-loading-icon.tsx?fba0","webpack://Msdyn365.Commerce.Online/./src/modules/account-profile-edit/components/account-profile-edit-loading-message.tsx?7cf0","webpack://Msdyn365.Commerce.Online/./src/modules/check-in-for-pickup/check-in-confirmation.tsx?406f","webpack://Msdyn365.Commerce.Online/./src/modules/check-in-for-pickup/check-in-error.tsx?e789","webpack://Msdyn365.Commerce.Online/./src/modules/check-in-for-pickup/check-in-for-pickup.tsx?8686","webpack://Msdyn365.Commerce.Online/./src/modules/check-in-for-pickup/check-in-for-pickup.view.tsx?bd7a","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/ratings-histogram.view.tsx?6e01","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/reviews-list.view.tsx?cd2e","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/tile-list/tile-list.tsx?78cb","webpack://Msdyn365.Commerce.Online/./src/modules/tile-list/tile-list.view.tsx?1b00"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport {\r\n IAccountPreference, IAccountPreferences, IAccountProfileItem, IAccountProfileViewProps\r\n} from '@msdyn365-commerce-modules/account-management/src/modules/account-profile/./account-profile';\r\n\r\nconst AccountPreferencesSection: React.FC = ({\r\n accountPreferences,\r\n heading,\r\n personalization,\r\n extraPreferences\r\n}) => {\r\n\r\n return (\r\n \r\n {heading}\r\n \r\n {\r\n extraPreferences && extraPreferences.map((preferenceSecton, index) => {\r\n return ;\r\n })\r\n }\r\n \r\n );\r\n};\r\n\r\nconst AccountPreferenceSection: React.FC = ({\r\n accountPreference,\r\n heading,\r\n description,\r\n buttonWrapper,\r\n buttonYesText,\r\n button,\r\n buttonNoText,\r\n}) => {\r\n\r\n return (\r\n \r\n {heading}\r\n {description}\r\n \r\n {buttonNoText}\r\n {button}\r\n {buttonYesText}\r\n \r\n \r\n );\r\n};\r\n\r\nconst AccountProfileSection: React.FC = ({\r\n AccountProfileItem,\r\n heading,\r\n links,\r\n description\r\n}) => {\r\n\r\n return (\r\n \r\n {heading}\r\n {description}\r\n {links}\r\n \r\n );\r\n};\r\n\r\nconst AccountProfileView: React.FC = props => {\r\n const { AccountProfile, accountProfileWrapper, heading, emailSection, nameSection, preferenceSection, customerAttributesWrapper, customerAttributesSection } = props;\r\n React.useEffect(() => {\r\n if(document.getElementsByClassName('ms-account-profile__attributes-Marketing').length) {\r\n // @ts-ignore\r\n // tslint:disable-next-line:no-inner-html\r\n document.getElementsByClassName('ms-account-profile__attributes-Marketing')[0].innerHTML = props.config.textMarketing;\r\n }\r\n if(document.getElementsByClassName('ms-account-profile__attributes-Profilazione').length) {\r\n // @ts-ignore\r\n // tslint:disable-next-line:no-inner-html\r\n document.getElementsByClassName('ms-account-profile__attributes-Profilazione')[0].innerHTML = props.config.textProfilazione;\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n {accountProfileWrapper && (\r\n {heading}\r\n \r\n \r\n \r\n \r\n )}\r\n {customerAttributesWrapper && (\r\n {customerAttributesSection}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default AccountProfileView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* tslint:disable: no-duplicate-imports */\r\nimport { IHistogramItemViewProps, IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nconst RatingsHistogramView: React.FC = props => {\r\n const { heading, histogramItems, histogramProps, moduleProps } = props;\r\n return (\r\n \r\n {heading}\r\n \r\n {histogramItems.map(item => {\r\n return histogramItem(item);\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst histogramItem = (props: IHistogramItemViewProps) => {\r\n return (\r\n \r\n {props.starLabel}\r\n {props.bar}\r\n {props.percentage}\r\n \r\n );\r\n};\r\n\r\nexport default RatingsHistogramView;","/*!\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 { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Modal, ModalBody } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IAccountProfileEditConfig, IAccountProfileEditProps } from './account-profile-edit.props.autogenerated';\nimport AccountProfileEditButtonComponent from './components/account-profile-edit-button';\nimport AccountProfileEditErrorComponent from './components/account-profile-edit-error';\nimport AccountProfileEditInputComponent from './components/account-profile-edit-input';\nimport AccountProfileEditLabelComponent from './components/account-profile-edit-label';\nimport AccountProfileEditLoadingIconComponent from './components/account-profile-edit-loading-icon';\nimport AccountProfileEditLoadingMessageComponent from './components/account-profile-edit-loading-message';\n\nexport interface IAccountProfileEditViewState {\n isShowLoading: boolean;\n}\n\nexport interface IAccountProfileEditItem {\n wrapper: INodeProps;\n key: string;\n label: React.ReactNode;\n errorMessage: React.ReactNode;\n input: React.ReactNode;\n}\n\nexport interface IAccountProfileEditLocalAccount {\n localAccount: INodeProps;\n items: IAccountProfileEditItem[];\n errorMessage: React.ReactNode[];\n buttonsWrapper: INodeProps;\n buttons: React.ReactNode[];\n verificationSuccessModal: INodeProps;\n verificationSuccessModalMessage: INodeProps;\n}\n\nexport interface IAccountProfileEditLoading {\n modal: INodeProps;\n modalBody: INodeProps;\n icon: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface IAccountProfileEditViewProps {\n className: string;\n viewState: IAccountProfileEditViewState;\n loading: IAccountProfileEditLoading;\n accountProfileEdit: IModuleProps;\n defaultAADConainer: INodeProps;\n aadConainer: INodeProps;\n heading: React.ReactNode;\n accountProfileEditLocalAccount: IAccountProfileEditLocalAccount;\n}\n\n/**\n *\n * AccountProfileEdit component\n * All AAD related module is rendered on AAD page and we need to respect HTML contract provide by AAD.\n * Please ensure any change in module don't break contract with AAD.\n * @extends {React.Component>}\n */\n@observer\nclass AccountProfileEdit extends React.Component> {\n private readonly moduleClassName: string = 'ms-account-profile-edit';\n\n private readonly telemetryContent: ITelemetryContent;\n\n @observable private givenName: string;\n\n @observable private surname: string;\n\n @observable private email: string;\n\n @observable private emailRegex: string;\n\n @observable private isInitialized: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private initializationTimer: any;\n\n constructor(props: IAccountProfileEditProps) {\n super(props);\n this.givenName = '';\n this.surname = '';\n this.email = '';\n this.emailRegex = EmailRegex.defaultRegex.source;\n this.isInitialized = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n this._onInit();\n }\n\n // After successful AAD initialization, call initialize method provided by AAD to attach events.\n public componentDidUpdate(): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (this.isInitialized && window && window['$element'] && window['$element']['initialize']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['$element']['initialize']();\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IAccountProfileEditProps,\n nextState: IAccountProfileEditViewState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { config, resources } = this.props;\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoading: !this.isInitialized\n },\n accountProfileEdit: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, config.className)\n },\n loading: {\n modal: {\n tag: Modal,\n isOpen: true\n },\n modalBody: {\n tag: ModalBody\n },\n icon: ,\n message: \n },\n defaultAADConainer: {\n id: 'api',\n style: { display: 'none' }\n },\n aadConainer: {\n id: this.isInitialized ? 'api' : null,\n className: `${this.moduleClassName}__container`\n },\n heading: config.heading && config.heading.text && (\n \n ),\n accountProfileEditLocalAccount: this._renderLocalAccount()\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 onTextBoxChange = (event: React.ChangeEvent) => {\n const id = event.target.id;\n const value = event.target.value;\n\n switch (id.toLowerCase()) {\n case 'givenname': {\n this.givenName = value;\n break;\n }\n case 'surname': {\n this.surname = value;\n break;\n }\n case 'email': {\n this.emailRegex = value;\n break;\n }\n default:\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _onInit = () => {\n this._prePopulateData();\n this._updateErrorMessage();\n\n // Check if AAD initialization is complete. AAD do not provide any event to subscribe so we need to check variable set by AAD to check initialization status.\n this.initializationTimer = setInterval(() => {\n this._isInitializationSuccessful();\n }, 100);\n setTimeout(() => {\n clearInterval(this.initializationTimer);\n }, 10_000);\n };\n\n // After successful AAD initialization, remove waiting and preload any data, if needed.\n private readonly _isInitializationSuccessful = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window && window['$diags'] && window['$diags']['initializationSuccessful']) {\n clearInterval(this.initializationTimer);\n this.isInitialized = true;\n }\n };\n\n private readonly _prePopulateData = () => {\n const { resources } = this.props;\n const invalidEmailAddressError = resources.invalidEmailAddressError || 'Please enter a valid email address.';\n\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window['SA_FIELDS'] && window['SA_FIELDS']['AttributeFields']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['SA_FIELDS']['AttributeFields'].map(\n (obj: { ID: string; PRE: string; PAT: string; UX_INPUT_TYPE: string; PAT_DESC: string }) => {\n const value = obj.PRE ? this._htmlDecode(obj.PRE) : '';\n switch (obj.ID.toLowerCase()) {\n case 'givenname': {\n this.givenName = value;\n break;\n }\n case 'surname': {\n this.surname = value;\n break;\n }\n case 'email': {\n this.email = value;\n this.emailRegex = obj.PAT;\n obj.PAT_DESC = invalidEmailAddressError;\n break;\n }\n default:\n }\n }\n );\n }\n };\n\n private _htmlDecode(str: string): string {\n const e = document.createElement('div');\n\n e.innerHTML = str;\n return e.childNodes.length === 0 ? '' : e.childNodes[0].nodeValue || '';\n }\n\n private readonly _updateErrorMessage = () => {\n const { resources } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n if (window && window['CONTENT']) {\n const message = {\n required_field: resources.requiredFieldMissingError,\n verifying_blurb: resources.loadingMessage\n };\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n Object.assign(window['CONTENT'], message);\n }\n };\n\n private _renderLocalAccount(): IAccountProfileEditLocalAccount {\n const { config, resources } = this.props;\n const localAccount = {\n localAccount: {\n id: 'attributeList',\n className: `${this.moduleClassName}__account-items attr`\n },\n items: [\n this._renderInput('givenName', 'text', this.givenName, resources.firstNameLabelText, resources.firstNameMaxLength),\n this._renderInput('surname', 'text', this.surname, resources.lastNameLabelText, resources.lastNameMaxLength)\n ],\n errorMessage: [\n ,\n ,\n \n ],\n buttonsWrapper: {\n className: `${this.moduleClassName}__buttons`\n },\n buttons: [\n ,\n \n ],\n verificationSuccessModal: {\n className: `${this.moduleClassName}__verifying-modal verifying-modal`\n },\n verificationSuccessModalMessage: {\n id: 'verifying_blurb',\n className: `${this.moduleClassName}__verifying-modal-message`\n }\n };\n\n if (config.showEmail && this.email !== '') {\n localAccount.items.push(\n this._renderInput('email', 'email', this.email, resources.emailAddressLabelText, undefined, this.emailRegex)\n );\n }\n\n return localAccount;\n }\n\n private _renderInput(\n id: string,\n type: string,\n value: string,\n labelText: string,\n maxLength?: string,\n pattern?: string\n ): IAccountProfileEditItem {\n const className = `${this.moduleClassName}__account-item`;\n return {\n wrapper: {\n className: classnames(className, `${className}-${id}`, 'entry-item', 'attrEntry')\n },\n key: id,\n label: (\n \n ),\n errorMessage: (\n \n ),\n input: (\n \n )\n };\n }\n}\n\nexport default AccountProfileEdit;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IAccountProfileEditItem,\n IAccountProfileEditLoading,\n IAccountProfileEditLocalAccount,\n IAccountProfileEditViewProps\n} from './account-profile-edit';\n\nconst AccountProfileEditItem: React.FC = ({ wrapper, label, errorMessage, input }) => {\n return (\n \n {label}\n {errorMessage}\n {input}\n \n );\n};\n\nconst LocalAccount: React.FC = ({\n localAccount,\n items,\n errorMessage,\n buttonsWrapper,\n buttons,\n verificationSuccessModal,\n verificationSuccessModalMessage\n}) => {\n return (\n \n {items &&\n items.map((item: IAccountProfileEditItem) => {\n // eslint-disable-next-line react/jsx-key\n return ;\n })}\n {errorMessage &&\n errorMessage.map((error: React.ReactNode, index: number) => {\n return {error};\n })}\n \n {buttons &&\n buttons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n \n\n \n \n \n \n );\n};\n\nconst AccountProfileEditLoading: React.FC = ({ modal, modalBody, icon, message }) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\n\nconst AccountProfileEditView: React.FC = props => {\n const { accountProfileEdit, viewState, loading, defaultAADConainer, aadConainer, heading, accountProfileEditLocalAccount } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n {heading}\n {LocalAccount(accountProfileEditLocalAccount)}\n \n \n );\n};\n\nexport default AccountProfileEditView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditButton {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n telemetryContent?: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nconst AccountProfileEditButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n disabled,\n telemetryContent,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default AccountProfileEditButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nconst AccountProfileEditError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n );\n};\n\nexport default AccountProfileEditError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAccountProfileEditInputProps {\n id?: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: any;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface IAccountProfileEditInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nconst AccountProfileEditInput: React.FC = ({ id, type, value, pattern, className, maxLength, onChange }) => (\n \n);\n\nexport default AccountProfileEditInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLabel {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nconst AccountProfileEditLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default AccountProfileEditLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLoadingIcon {\n className: string;\n}\n\nconst AccountProfileEditLoadingIcon: React.FC = ({ className }) => (\n
\n);\n\nexport default AccountProfileEditLoadingIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountProfileEditLoadingMessage {\n className: string;\n message: string;\n}\n\nconst AccountProfileEditLoadingMessage: React.FC = ({ className, message }) => (\n
{message}
\n);\n\nexport default AccountProfileEditLoadingMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport QRCode from 'qrcode.react';\nimport * as React from 'react';\n\n/**\n * CheckInConfirmation component Properties.\n */\nexport interface ICheckInConfirmationProps {\n /**\n * The confirmation text to show.\n */\n confirmationText: string;\n\n /**\n * Should the order confirmation number shown as QR code or not.\n * If false, the order confirmation number (channel reference ID) will be shown as text.\n */\n shouldShowQrCode: boolean;\n\n /**\n * The label shows for channel reference ID.\n */\n channelReferenceIdLabel: string;\n\n /**\n * The channel reference ID to show. When shouldShowQrCode is true, the ID is shown as QR code, otherwise it is shown as text.\n */\n channelReferenceId?: string;\n}\n\n/**\n * CheckInConfirmation component for showing confirmation information after check-in succeed.\n * @param confirmationProps - The confirmation properties.\n * @param confirmationProps.confirmationText - The confirmation text.\n * @param confirmationProps.shouldShowQrCode - Should the order confirmation number shown as QR code or not.\n * If false, the order confirmation number (channel reference ID) will be shown as text.\n * @param confirmationProps.channelReferenceIdLabel - The label shows for channel reference ID.\n * @param confirmationProps.channelReferenceId - The channel reference ID to show.\n * When shouldShowQrCode is true, the ID is shown as QR code, otherwise it is shown as text.\n * @returns The check-in confirmation component.\n */\nexport const CheckInConfirmationComponent: React.FC = ({\n confirmationText,\n shouldShowQrCode,\n channelReferenceIdLabel,\n channelReferenceId\n}) => {\n return (\n
\n

{confirmationText}

\n {channelReferenceId && (\n

\n {`${channelReferenceIdLabel} ${channelReferenceId}`}\n

\n )}\n {channelReferenceId && shouldShowQrCode && (\n \n \n \n )}\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\n/**\n * Check-in error properties.\n */\nexport interface ICheckInErrorProps {\n errorMessage?: string;\n}\n\n/**\n * Check-in error.\n * @param errorProps - The error properties.\n * @param errorProps.errorMessage - The error message to show.\n * @returns The alert element showing check-in errors.\n */\nexport const CheckInErrorComponent: React.FC = ({ errorMessage }) => {\n if (!errorMessage) {\n return null;\n }\n\n return (\n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IDictionary } from '@msdyn365-commerce/core';\nimport { CommerceProperty, SalesOrdersDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { CheckInConfirmationComponent } from './check-in-confirmation';\nimport { CheckInErrorComponent } from './check-in-error';\nimport { IAdditionalInformationKeysData, ICheckInForPickupConfig, ICheckInForPickupProps } from './check-in-for-pickup.props.autogenerated';\n\n/**\n * The interface representing a piece of additional information data.\n */\ninterface IAdditionalInformation {\n formKey: IAdditionalInformationKeysData;\n value: string;\n}\n\n/**\n * The state for check-in view.\n */\nexport interface ICheckInViewState {\n /**\n * If the module has header error to show.\n */\n isHeaderError: boolean;\n\n /**\n * If the customer has checked in.\n */\n isCheckedIn: boolean;\n\n /**\n * Additional information to capture.\n */\n additionalInformation: IDictionary[];\n}\n\n/**\n * The properties for check-in view.\n */\nexport interface ICheckInViewProps extends ICheckInForPickupProps {\n headerError: React.ReactNode;\n confirmationComponent: React.ReactNode;\n viewState: ICheckInViewState;\n additionalInformationValues: string[];\n checkInForOrderPickup(additionalInformation?: IAdditionalInformation[]): Promise;\n}\n\n/**\n * The state of the CheckInForPickup module.\n */\nexport interface ICheckInForPickupState {\n /**\n * The header error message.\n */\n headerErrorMessage: string;\n\n /**\n * If the customer has checked in successfully.\n */\n isCheckedIn: boolean;\n}\n\n/**\n *\n * CheckIn component.\n * @extends {React.Component, ICheckInForPickupState>}\n */\nclass CheckInForPickup extends React.Component, ICheckInForPickupState> {\n public constructor(props: ICheckInForPickupProps) {\n super(props);\n this.state = {\n headerErrorMessage: '',\n isCheckedIn: false\n };\n }\n\n public render(): JSX.Element | null {\n const isHeaderError: boolean = this.state.headerErrorMessage !== '';\n\n const viewProps = {\n ...this.props,\n headerError: ,\n confirmationComponent: (\n \n ),\n checkInForOrderPickup: this.checkInForOrderPickup,\n additionalInformationValues: this.props.config.additionalInformationKeys\n ? this.props.config.additionalInformationKeys.map(() => {\n return {};\n })\n : undefined,\n viewState: {\n isHeaderError,\n isCheckedIn: this.state.isCheckedIn\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public shouldComponentUpdate(nextProps: ICheckInForPickupProps, nextState: ICheckInForPickupState): boolean {\n if (\n this.props.config.additionalInformationHeading !== nextProps.config.additionalInformationHeading ||\n this.props.config.confirmationText !== nextProps.config.confirmationText\n ) {\n return true;\n }\n if (this.state.headerErrorMessage !== nextState.headerErrorMessage || this.state.isCheckedIn !== nextState.isCheckedIn) {\n return true;\n }\n return false;\n }\n\n public async componentDidMount(): Promise {\n await this._onInit();\n }\n\n /**\n * The async callback for submitting check-in.\n * @param additionalInformationList - The optional additional information captured.\n * @returns The async result.\n */\n public checkInForOrderPickup = async (additionalInformationList?: IAdditionalInformation[]): Promise => {\n const channelId: number = Number.parseInt(this.props.context.request.query!.channelId, 10);\n const channelReferenceId: string = this.props.context.request.query!.channelReferenceId;\n const packingSlipId: string = this.props.context.request.query!.packingSlipId;\n\n const additionalInformationToSubmit: { formKey: string; value: string }[] | undefined = additionalInformationList?.map(\n additionalInformationKeyValuePair => {\n return {\n formKey: additionalInformationKeyValuePair.formKey.resourceId ?? '',\n value: additionalInformationKeyValuePair.value\n };\n }\n );\n const extensionPropertyList: CommerceProperty[] = [];\n if (!ObjectExtensions.isNullOrUndefined(additionalInformationToSubmit)) {\n for (const additionalInformation of additionalInformationToSubmit) {\n extensionPropertyList.push({\n Key: additionalInformation.formKey,\n Value: {\n StringValue: additionalInformation.value\n }\n });\n }\n }\n try {\n await SalesOrdersDataActions.checkInForOrderPickupAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\n channelId,\n packingSlipId,\n channelReferenceId,\n extensionPropertyList\n );\n } catch (error) {\n this.state = { headerErrorMessage: this.props.resources.genericErrorMessage, isCheckedIn: false };\n this.props.telemetry.error(error);\n return Promise.resolve();\n }\n this.setState({ headerErrorMessage: '', isCheckedIn: true });\n return Promise.resolve();\n };\n\n /**\n * The action performed on module initialization.\n * @returns The async result.\n */\n private readonly _onInit = async (): Promise => {\n const channelId: number = Number.parseInt(this.props.context.request.query?.channelId ?? '', 10);\n const channelReferenceId: string | undefined = this.props.context.request.query?.channelReferenceId;\n const packingSlipId: string | undefined = this.props.context.request.query?.packingSlipId;\n if (Number.isNaN(channelId) || !channelReferenceId || !packingSlipId) {\n // No error message shown in editor mode.\n if (this.props.context.request.params.isEditor) {\n return Promise.resolve();\n } else if (this.props.context.request.params.isPreview) {\n this.setState({ headerErrorMessage: this.props.resources.requiredParameterMissingErrorMessage });\n } else {\n this.setState({ headerErrorMessage: this.props.resources.genericErrorMessage });\n }\n this.props.context.telemetry.error(\n 'One or more required URL parameters are missing. ' +\n 'Please make sure you have pass in channelId, channelReferenceId and packingSlipId through URL parameter.'\n );\n return Promise.resolve();\n }\n\n const { additionalInformationKeys } = this.props.config;\n\n const hasAdditionalInformation: boolean = ArrayExtensions.hasElements(additionalInformationKeys);\n\n // Call check-in-for-pickup directly if no additional information to capture.\n if (!hasAdditionalInformation) {\n try {\n await SalesOrdersDataActions.checkInForOrderPickupAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\n channelId,\n packingSlipId,\n channelReferenceId\n );\n } catch (error) {\n this.setState({ headerErrorMessage: this.props.resources.genericErrorMessage, isCheckedIn: false });\n this.props.telemetry.error(error);\n return Promise.resolve();\n }\n this.setState({ headerErrorMessage: '', isCheckedIn: true });\n }\n return Promise.resolve();\n };\n}\n\nexport default CheckInForPickup;\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 { FormBuilder } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckInViewProps } from './check-in-for-pickup';\n\n/**\n * The check-in view for submitting check-in, capturing additional information, and showing check-in confirmation.\n * @param props - The check-in view properties.\n * @returns The check-in view as a react component.\n */\nconst CheckInViewComponent: React.FC = (props: ICheckInViewProps) => {\n const { headerError, checkInForOrderPickup, confirmationComponent, viewState } = props;\n return (\n <>\n {viewState.isHeaderError && headerError}\n {!viewState.isHeaderError && ArrayExtensions.hasElements(props.config.additionalInformationKeys) && (\n \n )}\n {!viewState.isHeaderError &&\n !ArrayExtensions.hasElements(props.config.additionalInformationKeys) &&\n viewState.isCheckedIn &&\n confirmationComponent}\n \n );\n};\n\nexport default CheckInViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IHistogramItemViewProps, IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport {\n IReportReviewModalViewProps,\n IReviewCardViewProps,\n IReviewsListState,\n IReviewsListViewProps\n} from '@msdyn365-commerce-modules/ratings-reviews/src/modules/reviews-list';\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst ReviewsListview: React.FC = props => {\n const {\n averageRating,\n filterByDropdown,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n reviewCount,\n reviewModal,\n sortByDropdown,\n state,\n userReview\n } = props;\n\n if (!userReview && reviewCards.length === 0 && !state.isFilterApplied) {\n return {noReviewsMessage};\n }\n\n return (\n \n {averageRating}\n {reviewCount}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview)}\n {reviewCards.map(review => {\n return buildReviewCard(review);\n })}\n \n {reviewCards.length === 0 && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(reviewModal, moduleProps)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nconst buildReviewCard = (props: IReviewCardViewProps) => {\n return (\n \n \n {props.rating}\n {props.name}\n {props.date}\n \n \n \n {props.reviewTitle}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {props.ratingHelpfulLabel}\n {props.like}\n {props.dislike}\n {props.edit}\n {props.report}\n \n \n \n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n \n {props.modalHeader}\n \n \n \n {props.rating}\n {props.ratingLabel}\n \n \n {props.titleLabel}\n {props.titleInput}\n \n \n {props.textLabel}\n {props.textInput}\n \n {props.privacyPolicyUrl}\n {props.error}\n \n \n \n {props.submitButton}\n {props.cancelButton}\n \n \n );\n};\n\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n {state.reported ? props.headerSubmitted : props.header}\n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n );\n};\n\nexport default ReviewsListview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IComponentNodeProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ITileListProps, ITitleData } from './tile-list.props.autogenerated';\n\n/**\n * Tile-list view props.\n */\nexport interface ITileListViewProps extends ITileListProps<{}> {\n title?: React.ReactNode;\n tiles: React.ReactNode[];\n tileItemContainer: INodeProps;\n tileListContainer: INodeProps;\n tileListHeading: INodeProps;\n singleSlideCarouselComponentProps: INodeProps;\n}\n\n/**\n *\n * TileList component.\n * @extends {React.PureComponent>}\n */\nexport class TileList extends React.PureComponent> {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n private static _createHeading(heading?: ITitleData): React.ReactNode | null {\n if (!heading || !heading.text || StringExtensions.isNullOrWhitespace(heading.text)) {\n return null;\n }\n return ;\n }\n public constructor(props: ITileListProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { title, className } = this.props.config;\n const propsCarousel: IComponentNodeProps = {\n tag: SingleSlideCarousel,\n className: this.props.config.className ?? '',\n flipperPrevLabel: resources.flipperPrevious,\n flipperNextLabel: resources.flipperNext,\n parentId: this.props.id,\n telemetryContent: this._telemetryContent,\n vertical: false\n };\n\n const viewProps = {\n ...this.props,\n title: TileList._createHeading(title),\n singleSlideCarouselComponentProps: propsCarousel,\n tileItemContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-tile__item',\n role: 'listitem'\n },\n tileListContainer: { className: classnames('ms-tile-list', className) },\n tileListHeading: { className: 'ms-tile-list__heading' },\n tiles: this.props.slots.content\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default TileList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { ITileListViewProps } from './tile-list';\n\n/**\n * View component.\n * @param props - The view properties.\n * @returns Returns props.\n */\nexport const tileListView: React.FC = props => {\n const { title, tiles, tileListContainer, tileListHeading, tileItemContainer, singleSlideCarouselComponentProps } = props;\n return (\n \n {title}\n \n {tiles.map((tileItem: ReactNode, index: number) => {\n const keyIndex = `tile-list-item__${index}`;\n return (\n \n {tileItem}\n \n );\n })}\n \n \n );\n};\n\nexport default tileListView;\n"],"names":["AccountPreferencesSection","accountPreferences","heading","personalization","extraPreferences","React","Node","AccountPreferenceSection","map","preferenceSecton","index","key","accountPreference","description","buttonWrapper","buttonYesText","button","buttonNoText","AccountProfileSection","AccountProfileItem","links","props","AccountProfile","accountProfileWrapper","emailSection","nameSection","preferenceSection","customerAttributesWrapper","customerAttributesSection","document","getElementsByClassName","length","innerHTML","config","textMarketing","textProfilazione","Module","histogramItem","buttonProps","starLabel","bar","percentage","histogramItems","histogramProps","moduleProps","item","AccountProfileEdit","constructor","super","moduleClassName","handleHeadingChange","event","this","text","target","value","onTextBoxChange","id","toLowerCase","givenName","surname","emailRegex","_onInit","_prePopulateData","_updateErrorMessage","initializationTimer","setInterval","_isInitializationSuccessful","setTimeout","clearInterval","window","isInitialized","resources","invalidEmailAddressError","obj","PRE","_htmlDecode","ID","email","PAT","PAT_DESC","message","required_field","requiredFieldMissingError","verifying_blurb","loadingMessage","Object","assign","EmailRegex","telemetryContent","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","componentDidMount","componentDidUpdate","shouldComponentUpdate","nextProps","nextState","state","data","render","viewProps","viewState","isShowLoading","accountProfileEdit","className","classnames","loading","modal","tag","Modal","isOpen","modalBody","ModalBody","icon","AccountProfileEditLoadingIconComponent","AccountProfileEditLoadingMessageComponent","defaultAADConainer","style","display","aadConainer","Msdyn365","editProps","onEdit","requestContext","accountProfileEditLocalAccount","_renderLocalAccount","renderView","str","e","createElement","childNodes","nodeValue","localAccount","items","_renderInput","firstNameLabelText","firstNameMaxLength","lastNameLabelText","lastNameMaxLength","errorMessage","AccountProfileEditErrorComponent","requiredFieldMissingSummaryError","fieldIncorrectError","buttonsWrapper","buttons","AccountProfileEditButtonComponent","ariaLabel","saveButtonAriaLabel","saveButtonText","cancelButtonText","verificationSuccessModal","verificationSuccessModalMessage","showEmail","push","emailAddressLabelText","undefined","type","labelText","maxLength","pattern","wrapper","label","AccountProfileEditLabelComponent","forId","input","AccountProfileEditInputComponent","onChange","__decorate","observable","observer","AccountProfileEditItem","AccountProfileEditLoading","error","LocalAccount","disabled","onClick","payLoad","getPayloadObject","attributes","getTelemetryAttributes","Button","errorClassName","role","GetMaxLength","parsedMaxLength","Number","parseInt","isNaN","htmlFor","CheckInConfirmationComponent","confirmationText","shouldShowQrCode","channelReferenceIdLabel","channelReferenceId","QRCode","size","CheckInErrorComponent","CheckInForPickup","checkInForOrderPickup","async","channelId","query","packingSlipId","additionalInformationToSubmit","additionalInformationList","additionalInformationKeyValuePair","formKey","resourceId","extensionPropertyList","ObjectExtensions","additionalInformation","Key","Value","StringValue","SalesOrdersDataActions","callerContext","actionContext","queryResultSettings","headerErrorMessage","genericErrorMessage","isCheckedIn","Promise","resolve","setState","params","isEditor","isPreview","requiredParameterMissingErrorMessage","additionalInformationKeys","ArrayExtensions","isHeaderError","headerError","confirmationComponent","defaultConfirmationText","confirmationIdLabel","additionalInformationValues","additionalInformationHeading","FormBuilder","additionalInformationDefaultHeading","submitButtonText","additionalInformationSubmitButtonText","keys","requiredValueMissingErrorMessage","onSubmit","buildReviewCard","cardProps","headerProps","rating","name","date","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","ratingHelpfulLabel","like","dislike","edit","report","createReviewModal","modalHeader","form","inputRow","ratingLabel","titleLabel","titleInput","textLabel","textInput","privacyPolicyUrl","modalFooter","submitButton","cancelButton","createReportModal","reported","headerSubmitted","header","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","averageRating","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","reviewCount","reviewModal","sortByDropdown","userReview","isFilterApplied","review","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","_onSelect","preventDefault","deliveryCode","currentTarget","getAttribute","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","find","delivery","Code","Description","ref","tabIndex","onKeyDown","StoreSelectorLocationLines","onClickHandler","orgUnitLocation","OrgUnitNumber","_scrollIntoView","selectedLocationDiv","selectedLocationRef","current","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","location","alreadySelectedLocation","_isProductInStock","itemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","i","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","previousProps","selectedStoreLocationId","locations","_stores","_sortStores","reaction","show","displayList","store","_renderStoreLocation","deliveryOptions","OrgUnitPickUpDeliveryModes","selected","StoreSelectorLocationLineItemComponent","storeHours","StoreHours","preferredDistanceUnit","isCurrentLocation","isInStock","ItemAvailabilities","handlers","onSelected","onLocationSelected","onSetAsPreferredStore","onRemovePreferredStore","stockStatusLabel","storeLocatorView","toString","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","storePickUpOptionList","DeliveryOptions","productPickUpOptionList","productPickUpDeliveryOptions","filteredPickupMode","shouldShowIndex","stores","isPreferredStore","filter","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","keyCode","KeyCodes","activeDescedantValue","_handleKeyPressPrev","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","blur","performSearch","_onChangeHandler","filterPickupModeSelected","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","bind","TelemetryConstant","storeSearchAttributes","contentAction","etext","showAllStoreAttributes","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","autoComplete","searchInputAriaLabel","placeholder","onKeyUp","color","StoreSelectorEmptyMessage","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","link","onTextChange","editableLink","linkText","linkUrl","destinationUrl","openInNewTab","StoreSelectorFoundLocationsMessage","searchRadius","isSeeAllStore","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","replace","PickUpOptionList","eventsToBeBind","handleDocumentClick","htmlElement","_pickupListOptionButton","contains","_pickupListOptionMenu","expandSiteOptions","_renderDeliveryOptions","addEventListener","componentWillUnmount","removeEventListener","pickupListOptionMenuText","pickupmodeList","stopPropagation","isExpandSiteOptionsState","secondsToTime","seconds","hours","Math","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","deliveryOption","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","preferredStoreAttributes","removePreferredStoreAttributes","deliveryOptionList","RegularStoreHours","displayTime","JSON","stringify","title","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","renderStoreHours","renderPickupModes","selectedStore","storeDetailsModalHandler","closeStoreDetailsModal","SelectedStoreComponent","shouldHideStockStatus","parentClassName","storeDetailsMain","storeHeader","storeDetailsCloseButton","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","pickUpDeliveryOptionButton","pickupModes","preferredStoreButton","removePreferredStoreButton","StoreSelector","renderSelectedStore","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","availabilitiesWithHours","result","storeSelectorStateManager","storeLocations","selectedStoreResources","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","handleLinkTextChange","termsOfServiceLink","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","credentials","BingMapsApiKey","_searchTermChanged","formattedSuggestion","_performSearch","storeId","cookies","mode","setPreferredStoreLocation","isConsentGiven","Latitude","Longitude","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSearchInProgress","isSeeAllStoreValue","geoLocate","trim","_updateLocations","latitude","longitude","shouldShowAllStores","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","PERMISSION_DENIED","timeout","_closeDialog","parentElementRef","focus","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","product","setOrgUnitStoreInformation","catch","radius","lookupRadius","searchRadiusUnit","calRadius","distanceUnitValue","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","GetFullAvailableInventoryNearbyInput","RecordId","warning","selectedLocation","hasEnableOutOfStockCheck","autoSuggestionEnabled","isAutoSuggestionEnabled","loadMapApi","BingMapsEnabled","lang","locale","market","when","isSameContext","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","app","appConfig","slots","maps","mapSlot","isMobileDevice","isMobile","variant","VariantType","isInlineView","isLocatorView","listMapViewState","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","sortLocation","isEnableOutofStock","enableStockCheck","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","ModuleProps","classname","autoFocus","fade","onClosed","horizontalPosition","verticalPosition","toggle","isMobileView","HeaderContainerProps","ModalHeader","HeaderProps","FooterContainerProps","ModalFooter","BodyContainerProps","bodyWrapperProps","storeResultContainerProps","mapContainerProps","storeDetailsModal","locationsMessage","search","spinner","locationsList","outOfStockThreshold","noLocationsMessage","terms","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","selectedStoreLocation","lineResources","locationOpen","openFrom","openTo","renderDeliveryOptions","renderBody","TileList","_telemetryContent","StringExtensions","Heading","headingTag","propsCarousel","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","vertical","_createHeading","singleSlideCarouselComponentProps","tileItemContainer","tileListContainer","tileListHeading","tiles","content","tileListView","tileItem","keyIndex"],"sourceRoot":""}