{"version":3,"file":"static/js/981dc7a661408c818e75.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/get-zipcode.ts?4f03","webpack://mattressfirm/./src/actions/get-soci-data.action.ts?ce73","webpack://mattressfirm/./src/actions/product-compare-buybox-state-sharing.ts?5126","webpack://mattressfirm/./src/data-actions/get-franchise-data.action.ts?7044","webpack://mattressfirm/./src/data-actions/store-selector-state-data-action.ts?6df6","webpack://mattressfirm/./src/modules/mfrm-store-selector/components/store-selector-location-line-item/date-time-helpers.ts?8535","webpack://mattressfirm/./src/modules/mfrm-store-selector/components/store-selector-location-line-item/mfrm-store-selector-location-line-item.components.tsx?9f8c","webpack://mattressfirm/./src/modules/mfrm-store-selector/components/mfrm-store-selector-location-lines.tsx?0018","webpack://mattressfirm/./src/modules/mfrm-store-selector/components/mfrm-store-selector-search-form.tsx?7326","webpack://mattressfirm/./src/modules/mfrm-store-selector/components/mfrm-store-selector-small-components.tsx?0c2a","webpack://mattressfirm/./src/modules/mfrm-store-selector/components/mfrm-store-selector-see-all-stores.tsx?1440","webpack://mattressfirm/./src/modules/mfrm-store-selector/components/soci-locations-lines.tsx?33fc","webpack://mattressfirm/./src/modules/mfrm-store-selector/mfrm-store-selector.props.autogenerated.ts?e984","webpack://mattressfirm/./src/modules/mfrm-store-selector/mfrm-store-selector.tsx?dac3","webpack://mattressfirm/./src/modules/mfrm-store-selector/mfrm-store-selector.view.tsx?b225","webpack://mattressfirm/./lib/mfrm-store-selector/module-registration.js?4195","webpack://mattressfirm/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://mattressfirm/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://mattressfirm/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import { IActionContext } from '@msdyn365-commerce/core';\r\nimport Cookies from 'universal-cookie';\r\nexport const getZipCode = (ctx: IActionContext): string | undefined => {\r\n //@ts-ignore\r\n const geolocationZipCode = ctx.requestContext.geoLocation?.zipCode ? ctx.requestContext.geoLocation.zipCode : ctx.requestContext.geoLocation?.res?.zipCode;\r\n const cookie = new Cookies();\r\n const zipcode = cookie.get('zip_code') ? cookie.get('zip_code') : geolocationZipCode;\r\n return zipcode ?? undefined;\r\n};\r\nexport const getGeoLocationZipCode = (ctx: IActionContext): string | undefined => {\r\n //@ts-ignore\r\n const zipCode = ctx.requestContext.geoLocation?.zipCode ? ctx.requestContext.geoLocation.zipCode : ctx.requestContext.geoLocation?.res?.zipCode;\r\n return zipCode ?? null;\r\n};\r\n","import { IGeneric, IAny } from '@msdyn365-commerce/core';\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport axios from 'axios';\r\nimport { getZipCode } from '../Utilities/get-zipcode';\r\n\r\n/**\r\n * GetSociData Input Action\r\n */\r\nexport class GetSociDataInput implements Msdyn365.IActionInput {\r\n public searchradius?: number | undefined;\r\n public searchLimit?: number | undefined;\r\n public zipCode?: string | undefined;\r\n constructor(searchradius?: number | undefined, searchLimit?: number | undefined, zipCode?: string | undefined) {\r\n this.searchradius = searchradius;\r\n this.searchLimit = searchLimit;\r\n this.zipCode = zipCode;\r\n }\r\n\r\n public getCacheKey = () => `SociLocations-${this.zipCode}`;\r\n public getCacheObjectType = () => 'SociLocations';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext>): Msdyn365.IActionInput => {\r\n return new GetSociDataInput(args?.config?.lookupRadius, args?.config?.maxNoOfFranchise ?? 4);\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function getSociData(input: GetSociDataInput, ctx: Msdyn365.IActionContext): Promise {\r\n try {\r\n const zipCode = input?.zipCode ? input.zipCode : getZipCode(ctx);\r\n if (!zipCode) {\r\n return null;\r\n }\r\n let geoLoc = [];\r\n if(/^[0-9]+$/.test(zipCode)){\r\n geoLoc = [\r\n {\r\n \"postalcode\": zipCode\r\n }\r\n ];\r\n } else{\r\n geoLoc = [\r\n {\r\n \"state\": zipCode,\r\n \"city\": zipCode\r\n }\r\n ];\r\n }\r\n const response = await axios.post(`https://api.slippymap.com/rest/locatorsearch`, {\r\n \"request\": {\r\n \"appkey\": \"F147ADC0-8099-11EC-AC1B-273DC403F339\",\r\n \"formdata\": {\r\n \"dataview\": \"store_default\",\r\n \"limit\": input.searchLimit ?? 4,\r\n \"geolocs\": {\r\n \"geoloc\": geoLoc\r\n },\r\n \"searchradius\": input.searchradius?.toString() ?? \"50\"\r\n }\r\n }\r\n }\r\n , {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n if (response.data) {\r\n return response.data;\r\n }\r\n else { return null; }\r\n } catch (e) {\r\n // will be removed after unit test and deployment on lower environment\r\n console.log('error for soci api', e);\r\n return null;\r\n }\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >getSociData,\r\n id: 'GetSociData',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { observable } from 'mobx';\r\n/**\r\n * SelectYourFoundation Input Action\r\n */\r\nexport class ProductCompareBuyboxStateSharing implements Msdyn365.IActionInput {\r\n @observable public zipCode?: string | undefined;\r\n // Construct the input needed to run the action\r\n constructor(zipCode: string | undefined) {\r\n this.zipCode = zipCode;\r\n }\r\n\r\n // Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `ProductCompareBuyboxStateSharing`;\r\n public getCacheObjectType = () => 'ProductCompareBuyboxStateSharing';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface ISelectYourFoundationData {\r\n zipCode: string | undefined;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n return new ProductCompareBuyboxStateSharing(args?.config?.zipCode);\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: ProductCompareBuyboxStateSharing, ctx: Msdyn365.IActionContext): Promise {\r\n // const apiSettings = Msdyn365.msdyn365Commerce.apiSettings;\r\n\r\n // Uncomment the below line to get the value from a service\r\n // const response = await Msdyn365.sendRequest('/get/example/id/1', 'get');\r\n return { zipCode: input.zipCode };\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n // Give your data action a unique id\r\n id: 'ProductCompareBuyboxStateSharing',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nexport class GetFranchiseData extends Msdyn365.CommerceEntityInput implements Msdyn365.IActionInput {\r\n public Latitude?: number;\r\n public Longitude?: number;\r\n public Radius?: number;\r\n\r\n constructor(_Latitude?: number, _Longitude?: number, _Radius?: number) {\r\n super({\r\n shouldCacheOutput: true,\r\n cacheObjectType: 'FranchiseDataCache',\r\n cacheKey: 'FranchiseDataCache'\r\n });\r\n this.Latitude = _Latitude;\r\n this.Longitude = _Longitude;\r\n this.Radius = _Radius;\r\n }\r\n public getCacheKey = () => `FranchiseDataCache`;\r\n public getCacheObjectType = () => 'FranchiseDataCache';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\n\r\nexport interface IFranchise {\r\n \"id\": string;\r\n \"name\": string;\r\n \"address_line_1\": string;\r\n \"address_line_2\": string;\r\n \"city\": string;\r\n \"state_province\": string;\r\n \"postal_code\": string;\r\n \"country\": string;\r\n \"lat\": string;\r\n \"long\": string;\r\n \"distance\": number;\r\n \"website_url\": string;\r\n \"miles\"?: number;\r\n}\r\n\r\nconst _calculateDistance = (latitude1: any, longitude1: any, latitude2: any, longitude2: any) => {\r\n\r\n // The math module contains a function\r\n // named toRadians which converts from\r\n // degrees to radians.\r\n const long1 = longitude1 * Math.PI / 180;\r\n const long2 = longitude2 * Math.PI / 180;\r\n const lat1 = latitude1 * Math.PI / 180;\r\n const lat2 = latitude2 * Math.PI / 180;\r\n\r\n // Haversine formula\r\n const dlon = long2 - long1;\r\n const dlat = lat2 - lat1;\r\n const a = Math.pow(Math.sin(dlat / 2), 2)\r\n + Math.cos(lat1) * Math.cos(lat2)\r\n * Math.pow(Math.sin(dlon / 2), 2);\r\n const c = 2 * Math.asin(Math.sqrt(a));\r\n\r\n // Radius of earth\r\n // for kilometers=6371\r\n // for miles = 3956\r\n const r = 3956;\r\n\r\n // calculate the result\r\n return (c * r);\r\n};\r\n\r\nexport const getFranchiseInput = (inputData: Msdyn365.ICreateActionContext>): Msdyn365.IActionInput => {\r\n return new GetFranchiseData();\r\n};\r\n\r\n\r\nexport async function getFranchise(input: GetFranchiseData, ctx: Msdyn365.IActionContext): Promise {\r\n const jsonUrl = ctx.requestContext.app.config.sociFranchiseDataUrl || 'https://files-us-prod.cms.commerce.dynamics.com/cms/api/fknscsckgq/binary/MAcq1X!!';\r\n const franchiseDataJson = await Msdyn365.sendRequest(jsonUrl, 'get');\r\n const franchiseStores: IFranchise[] = [];\r\n franchiseDataJson.data.map((franchise: IFranchise) => {\r\n const miles = _calculateDistance(input.Latitude, input.Longitude, franchise.lat, franchise.long);\r\n if (miles <= (input.Radius || 50)) {\r\n franchise.miles = miles;\r\n franchiseStores.push(franchise);\r\n }\r\n });\r\n\r\n return franchiseStores;\r\n}\r\nexport default Msdyn365.createObservableDataAction({\r\n id: 'FranchiseData',\r\n action: >getFranchise,\r\n input: getFranchiseInput\r\n});","import MsDyn365, {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { IStoreSelectorState } from './store-selector-state';\r\n/**\r\n * storeSelectorState - action input\r\n */\r\nexport class StoreSelectorStateInput implements IActionInput {\r\n public getCacheKey = () => `storeSelectorState`;\r\n public getCacheObjectType = () => 'storeSelectorState';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * StoreSelectorStateInput - action\r\n */\r\nexport async function storeSelectorStateAction(input: StoreSelectorStateInput, ctx: IActionContext): Promise {\r\n const prefferedStore: OrgUnitLocation =\r\n MsDyn365.isBrowser && localStorage.getItem('_mfrm__prefferedStore_')\r\n ? JSON.parse(localStorage.getItem('_mfrm__prefferedStore_') || '')\r\n : {};\r\n return { isModalOpen: false, prefferedStore: prefferedStore };\r\n}\r\n\r\n/**\r\n * StoreSelectorStateInput - create new input for create action\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new StoreSelectorStateInput();\r\n};\r\n\r\n/**\r\n * StoreSelectorStateInput - create action\r\n */\r\nexport default createObservableDataAction({\r\n id: 'StoreSelectorState',\r\n action: >storeSelectorStateAction,\r\n input: createInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\nimport { IStoreSelectorLocationLineItemResources } from '.';\r\n\r\nexport interface IHoursDisplayInfo {\r\n startDayShort: string;\r\n startDayFull: string;\r\n endDayShort?: string;\r\n endDayFull?: string;\r\n timeRange: string;\r\n}\r\n\r\nexport interface IHoursInfo {\r\n isClosed: boolean;\r\n openTime?: number;\r\n closeTime?: number;\r\n}\r\n\r\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\r\n\r\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\r\n if (seconds === undefined) {\r\n return undefined;\r\n } else {\r\n let hours = Math.floor(seconds / (60 * 60));\r\n const ampm = hours >= 12 ? 'pm' : 'am';\r\n hours = hours % 12;\r\n hours = hours ? hours : 12;\r\n const divisorForMinutes = seconds % (60 * 60);\r\n const minutes =\r\n Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\r\n return `${hours}:${minutes} ${ampm}`;\r\n }\r\n};\r\n\r\nexport const getTimeZoneAbbr = (timeZone: string | undefined): string | undefined => {\r\n switch (timeZone) {\r\n case 'EASTERN STANDARD TIME':\r\n return 'EST';\r\n case 'EASTERN DAYLIGHT TIME':\r\n return 'EDT';\r\n case 'CENTRAL STANDARD TIME':\r\n return 'CST';\r\n case 'CENTRAL DAYLIGHT TIME':\r\n return 'CDT';\r\n case 'MOUNTAIN STANDARD TIME':\r\n return 'MST';\r\n case 'MOUNTAIN DAYLIGHT TIME':\r\n return 'MDT';\r\n case 'PACIFIC STANDARD TIME':\r\n return 'PST';\r\n case 'PACIFIC DAYLIGHT TIME':\r\n return 'PDT';\r\n default: // any other than USA TimeZone:\r\n return timeZone;\r\n }\r\n};\r\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\r\n switch (day) {\r\n case 'MON':\r\n return resources.days.monday;\r\n case 'TUE':\r\n return resources.days.tuesday;\r\n case 'WED':\r\n return resources.days.wednesday;\r\n case 'THU':\r\n return resources.days.thursday;\r\n case 'FRI':\r\n return resources.days.friday;\r\n case 'SAT':\r\n return resources.days.saturday;\r\n default: // case 'SUN':\r\n return resources.days.sunday;\r\n }\r\n};\r\n\r\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\r\n switch (day) {\r\n case 'MON':\r\n return resources.days.mondayFull;\r\n case 'TUE':\r\n return resources.days.tuesdayFull;\r\n case 'WED':\r\n return resources.days.wednesdayFull;\r\n case 'THU':\r\n return resources.days.thursdayFull;\r\n case 'FRI':\r\n return resources.days.fridayFull;\r\n case 'SAT':\r\n return resources.days.saturdayFull;\r\n default: // case 'SUN':\r\n return resources.days.sundayFull;\r\n }\r\n};\r\n\r\nconst buildHoursDisplayInfo = (startDay: DayType, endDay: DayType, hoursInfo: string, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo => {\r\n return {\r\n startDayShort: getShortTimeString(startDay, resources),\r\n startDayFull: getFullTimeString(startDay, resources),\r\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\r\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\r\n timeRange: hoursInfo\r\n };\r\n};\r\n\r\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\r\n if (firstLine.isClosed && secondLine.isClosed) {\r\n return true;\r\n }\r\n\r\n if (!firstLine.isClosed && !secondLine.isClosed) {\r\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\r\n return {\r\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\r\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\r\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\r\n };\r\n};\r\n\r\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\r\n if (hoursInfo.isClosed) {\r\n return resources.closedText;\r\n } else {\r\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\r\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\r\n\r\n return `${openFrom}–${openTo}`;\r\n }\r\n};\r\n\r\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\r\n const storeHoursList: IHoursDisplayInfo[] = [];\r\n\r\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\r\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\r\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\r\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\r\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\r\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\r\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\r\n\r\n let periodStart: DayType = 'MON';\r\n let periodEnd: DayType = 'MON';\r\n\r\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\r\n\r\n periodStart = 'TUE';\r\n }\r\n periodEnd = 'TUE';\r\n\r\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\r\n\r\n periodStart = 'WED';\r\n }\r\n periodEnd = 'WED';\r\n\r\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\r\n\r\n periodStart = 'THU';\r\n }\r\n periodEnd = 'THU';\r\n\r\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\r\n\r\n periodStart = 'FRI';\r\n }\r\n periodEnd = 'FRI';\r\n\r\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\r\n\r\n periodStart = 'SAT';\r\n }\r\n periodEnd = 'SAT';\r\n\r\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\r\n\r\n periodStart = 'SUN';\r\n }\r\n periodEnd = 'SUN';\r\n\r\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\r\n\r\n return storeHoursList;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n IPayLoad,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n// VSI Customization - starts\r\nimport { OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport { getTimeZoneAbbr, secondsToTime } from './date-time-helpers';\r\n// VSI Customization - ends\r\n\r\nexport interface IStoreSelectorLocationLineItemResources {\r\n contactInfoHeader: string;\r\n storeHoursHeader: string;\r\n availabilityInfoHeader: string;\r\n\r\n closedText: string;\r\n\r\n outOfStock: string;\r\n inStock: string;\r\n currentLocation: string;\r\n selectLocation: string;\r\n selectLocationAriaLabelFormat: string;\r\n setAsPreferredStoreText: string;\r\n setAsPreferredStoreTextAriaLabel: string;\r\n preferredStoreText: string;\r\n preferredStoreAriaLabel: string;\r\n\r\n days: {\r\n monday: string;\r\n tuesday: string;\r\n wednesday: string;\r\n thursday: string;\r\n friday: string;\r\n saturday: string;\r\n sunday: string;\r\n mondayFull: string;\r\n tuesdayFull: string;\r\n wednesdayFull: string;\r\n thursdayFull: string;\r\n fridayFull: string;\r\n saturdayFull: string;\r\n sundayFull: string;\r\n };\r\n // VSI Customization - starts\r\n viewStoreDetails: string;\r\n storeOpenAtHours: string;\r\n storeCloseAtHours: string;\r\n // VSI Customization - ends\r\n}\r\n\r\nexport interface IStoreSelectorLocationLineItemProps {\r\n location: OrgUnitLocation;\r\n storeHours?: StoreHours;\r\n\r\n hideStockStatus?: boolean;\r\n isInStock?: boolean;\r\n isCurrentLocation?: boolean;\r\n resources: IStoreSelectorLocationLineItemResources;\r\n stockStatusLabel?: string;\r\n storeLocatorView?: boolean;\r\n isPreferredStoreEnabled?: boolean;\r\n index: string;\r\n preferredStoreLocationId: string | null;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n preferredDistanceUnit: string;\r\n isLocationDisabled?: boolean;\r\n handlers: {\r\n onSelected(location: OrgUnitLocation): void;\r\n onSetAsPreferredStore(locationId: string | undefined): void;\r\n onRemovePreferredStore(): void;\r\n };\r\n}\r\n\r\nconst StoreSelectorLocationLineItemComponentActions = {\r\n onLocationSelected(props: IStoreSelectorLocationLineItemProps): void {\r\n props.handlers.onSelected(props.location);\r\n },\r\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\r\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\r\n },\r\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\r\n props.handlers.onRemovePreferredStore();\r\n }\r\n};\r\n\r\nconst renderStoreHours = (\r\n location: OrgUnitLocation,\r\n resources: IStoreSelectorLocationLineItemResources,\r\n distanceAsString: string | undefined\r\n): JSX.Element | null => {\r\n const isClosedToday = location.ExtensionProperties?.find(x => x.Key === 'Yext_Today_IsClosed')?.Value?.BooleanValue;\r\n const isClosed = location.ExtensionProperties?.find(x => x.Key === 'Yext_Is_Store_Closed')?.Value?.BooleanValue;\r\n const startTime = location.ExtensionProperties?.find(x => x.Key === 'Yext_Today_OpenFrom')?.Value?.IntegerValue;\r\n const endTime = location.ExtensionProperties?.find(x => x.Key === 'Yext_Today_OpenTo')?.Value?.IntegerValue;\r\n const timeZone = location.ExtensionProperties?.find(x => x.Key === 'Channel_TimeZone_InfoId')?.Value?.StringValue;\r\n const timeZoneAbbr = getTimeZoneAbbr(timeZone);\r\n if (isClosedToday && isClosedToday !== null) {\r\n return (\r\n
\r\n
{resources.closedText}
\r\n
\r\n );\r\n } else if (startTime !== null || endTime !== null) {\r\n return (\r\n
\r\n
\r\n {!isClosed\r\n ? `${resources.storeCloseAtHours} ${secondsToTime(endTime)} ${timeZoneAbbr}`\r\n : `${resources.storeOpenAtHours} ${secondsToTime(startTime)} ${timeZoneAbbr}`}\r\n
\r\n
\r\n );\r\n } else {\r\n return null;\r\n }\r\n};\r\n\r\nconst buildDistanceString = (\r\n distance: number | undefined,\r\n preferredDistanceUnit: string,\r\n isLocationDisabled?: boolean\r\n): string | undefined => {\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < 1) {\r\n // VSI Customization - starts\r\n return `<1 ${preferredDistanceUnit}`;\r\n } else {\r\n return `${Math.floor(distance)} ${preferredDistanceUnit}`;\r\n // VSI Customization - ends\r\n }\r\n};\r\n\r\nexport const extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\r\n if (!contacts) {\r\n return undefined;\r\n }\r\n\r\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\r\n\r\n if (allPhoneContacts && allPhoneContacts.length > 0) {\r\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\r\n\r\n if (primaryPhoneContact) {\r\n return primaryPhoneContact.Locator;\r\n }\r\n\r\n return allPhoneContacts[0].Locator;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n// tslint:disable-next-line: cyclomatic-complexity max-func-body-length\r\nconst StoreSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\r\n const onClick = () => StoreSelectorLocationLineItemComponentActions.onLocationSelected(props);\r\n const _storeDetailsTracking = () => {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n // @ts-ignore\r\n utag.link({\r\n event: \"store-locator-slideout-store-details\",\r\n event_category: \"store locator slideout\",\r\n event_action: \"store details link click\",\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: \"false\"\r\n });\r\n }\r\n };\r\n const {\r\n hideStockStatus,\r\n isCurrentLocation,\r\n isInStock,\r\n location,\r\n resources,\r\n // storeHours,\r\n stockStatusLabel,\r\n storeLocatorView,\r\n index,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n isLocationDisabled,\r\n telemetryContent\r\n } = props;\r\n\r\n const storeName: string | undefined =\r\n location.ExtensionProperties?.find(x => x.Key === 'Yext_Store_Name')?.Value?.StringValue || location.OrgUnitName;\r\n const storeLocatorContext = location && location.Contacts ? location.Contacts.find(url => url.ContactTypeValue === 3) : undefined;\r\n const storeLocatorUrl: string | undefined = storeLocatorContext\r\n ? storeLocatorContext.Locator\r\n : `https://bing.com/maps/default.aspx?where1=${location.Address}`;\r\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\r\n const storeAddress: string | undefined = location.Address;\r\n // VSI Customization - starts\r\n const storeAddressLine1: string | undefined = location.Street;\r\n const storeAddressLine2: string | undefined = `${location.City}, ${location.State} ${location.Zip}`;\r\n // VSI Customization - ends\r\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\r\n\r\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\r\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\r\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\r\n const canSelectLocation = hideStockStatus || isInStock;\r\n const pickupInStoreButtonText: string = resources.selectLocation;\r\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat?.replace('{StoreName}', storeName || '');\r\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\r\n const preferredStoreAttr = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\r\n const RemovePreferredStoreAttr = getTelemetryAttributes(telemetryContent!, payLoad);\r\n const setAsPreferredStore = () => StoreSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\r\n const removePreferredStore = () => StoreSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\r\n\r\n return (\r\n
\r\n
\r\n {storeLocatorView && {index}}\r\n {storeName}\r\n
\r\n {/* VSI Customization - starts */}\r\n
\r\n

{resources.storeHoursHeader}

\r\n {renderStoreHours(location, resources, distanceAsString)}\r\n {distanceAsString ? {distanceAsString} : false}\r\n
\r\n {/* VSI Customization - starts */}\r\n
\r\n
\r\n

{resources.contactInfoHeader}

\r\n {storeAddress && (\r\n
\r\n \r\n
\r\n

{storeAddressLine1}

\r\n

{storeAddressLine2}

\r\n
\r\n
\r\n )}\r\n {phoneNumber && (\r\n
\r\n \r\n {phoneNumber}\r\n
\r\n )}\r\n
\r\n {!storeLocatorView && (\r\n
\r\n

{resources.availabilityInfoHeader}

\r\n {stockText &&

{stockText}

}\r\n {isCurrentLocation ? (\r\n

{resources.currentLocation}

\r\n ) : canSelectLocation ? (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n ) : (\r\n false\r\n )}\r\n
\r\n )}\r\n
\r\n {isPreferredStoreEnabled ? (\r\n isPreferredStore ? (\r\n \r\n {resources.preferredStoreText}\r\n \r\n ) : (\r\n \r\n {resources.setAsPreferredStoreText}\r\n \r\n )\r\n ) : null}\r\n \r\n {resources.viewStoreDetails}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport const StoreSelectorLocationLineItemComponent = StoreSelectorLocationLineItem as (\r\n props: IStoreSelectorLocationLineItemProps\r\n) => JSX.Element;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { ItemAvailability, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IMfrmStoreSelectorResources } from '../mfrm-store-selector.props.autogenerated';\r\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './store-selector-location-line-item';\r\n\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: IFullOrgUnitAvailability[];\r\n resources: IMfrmStoreSelectorResources;\r\n preferredDistanceUnit?: string;\r\n alreadySelectedLocation?: OrgUnitLocation;\r\n outOfStockThreshold: number;\r\n enableOutOfStockCheck: boolean;\r\n storeLocatorView?: boolean;\r\n selectedStoreLocationId?: string;\r\n isPreferredStoreEnabled?: boolean;\r\n displayList?: boolean;\r\n isLocationDisabled?: boolean;\r\n onClick: (locationId: string | undefined) => void;\r\n preferredStoreLocationId: string | null;\r\n onSetAsPreferredStore: (locationId: string | undefined) => void;\r\n onRemovePreferredStore: () => void;\r\n enableFranchise:boolean | undefined;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n onLocationSelected(location: OrgUnitLocation | undefined): void;\r\n}\r\n\r\n/**\r\n * Displays all the location line items, or null if none exists\r\n */\r\n@observer\r\nexport class StoreSelectorLocationLines extends React.PureComponent {\r\n private selectedLocationRef: React.RefObject;\r\n\r\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\r\n\r\n constructor(props: IStoreSelectorLocationLinesProps) {\r\n super(props);\r\n this.selectedLocationRef = React.createRef();\r\n }\r\n\r\n public componentDidUpdate(prevProps: IStoreSelectorLocationLinesProps): void {\r\n if (this.props.selectedStoreLocationId !== prevProps.selectedStoreLocationId) {\r\n this._scrollIntoView();\r\n }\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.locations) {\r\n this._stores = this._sortStores(this.props.locations);\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!this._stores || this._stores.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {// VSI Customization - starts\r\n // As we do not have any customization to get specified number of stores from API,\r\n // so we are currently using array.slice() here to show only 4 stores lines\r\n this._stores.slice(0, 4).map((store, index) => {\r\n return this._renderStoreLocation(store, index);\r\n })\r\n // VSI Customization - ends\r\n }\r\n
\r\n );\r\n }\r\n\r\n private _renderStoreLocation(store: IFullOrgUnitAvailability, index: number): JSX.Element | undefined {\r\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\r\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\r\n return (\r\n orgUnitLocation && (\r\n this.props.onClick(orgUnitLocation.OrgUnitNumber)}\r\n ref={selectedStoreLocationId === orgUnitLocation.OrgUnitNumber ? this.selectedLocationRef : undefined}\r\n >\r\n \r\n \r\n )\r\n );\r\n }\r\n\r\n private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\r\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\r\n this.props.isPreferredStoreEnabled &&\r\n this.props.preferredStoreLocationId &&\r\n value?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\r\n\r\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\r\n }\r\n\r\n private _scrollIntoView = () => {\r\n const selectedLocationDiv = this.selectedLocationRef.current;\r\n const parent = selectedLocationDiv?.parentElement;\r\n if (selectedLocationDiv && parent) {\r\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop;\r\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\r\n }\r\n }\r\n };\r\n\r\n private _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\r\n (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\r\n false;\r\n\r\n private _isProductInStock = (ItemAvailabilities: ItemAvailability[] | undefined): boolean => {\r\n if (!this.props.enableOutOfStockCheck) {\r\n return true;\r\n }\r\n\r\n if (ItemAvailabilities && ItemAvailabilities.length > 0) {\r\n return ItemAvailabilities[0].AvailableQuantity ? ItemAvailabilities[0].AvailableQuantity > 0 : false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n private _stockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\r\n if (availabilityWithHours?.ProductInventoryInformation && availabilityWithHours?.ProductInventoryInformation.length > 0) {\r\n for (let i = 0; i < availabilityWithHours.ProductInventoryInformation.length; i++) {\r\n if (\r\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\r\n availabilityWithHours.ProductInventoryInformation[i].InventLocationId\r\n ) {\r\n return availabilityWithHours.ProductInventoryInformation[i].StockLevelLabel;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n private _mapResources = (resources: IMfrmStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\r\n return {\r\n contactInfoHeader: resources.contactText,\r\n storeHoursHeader: resources.timeText,\r\n availabilityInfoHeader: resources.availabilityText,\r\n\r\n closedText: resources.storeHoursClosedText,\r\n outOfStock: resources.outOfStockText,\r\n inStock: resources.inStockText,\r\n\r\n currentLocation: resources.selectedStoreLocationText,\r\n selectLocation: resources.selectStoreText,\r\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\r\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\r\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\r\n preferredStoreText: resources.preferredStoreText,\r\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\r\n\r\n days: {\r\n monday: resources.storeHoursMondayText,\r\n tuesday: resources.storeHoursTuesdayText,\r\n wednesday: resources.storeHoursWednesdayText,\r\n thursday: resources.storeHoursThursdayText,\r\n friday: resources.storeHoursFridayText,\r\n saturday: resources.storeHoursSaturdayText,\r\n sunday: resources.storeHoursSundayText,\r\n mondayFull: resources.storeHoursMondayFullText,\r\n tuesdayFull: resources.storeHoursTuesdayFullText,\r\n wednesdayFull: resources.storeHoursWednesdayFullText,\r\n thursdayFull: resources.storeHoursThursdayFullText,\r\n fridayFull: resources.storeHoursFridayFullText,\r\n saturdayFull: resources.storeHoursSaturdayFullText,\r\n sundayFull: resources.storeHoursSundayFullText\r\n },\r\n // VSI Customization - starts\r\n viewStoreDetails: resources.viewStoreDetailsText,\r\n storeOpenAtHours: resources.storeOpenAtHours,\r\n storeCloseAtHours: resources.storeCloseAtHours\r\n // VSI Customization - ends\r\n };\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n IPayLoad,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n// VSI Customization - starts\r\nimport classnames from 'classnames';\r\n// VSI Customization - ends\r\nimport * as React from 'react';\r\nimport Cookies from 'universal-cookie';\r\n\r\n// VSI Customization - starts\r\nexport interface IStoreSelectorSearchFormState {\r\n isError?: boolean;\r\n}\r\n// VSI Customization - ends\r\nexport interface IStoreSelectorSearchFormProps {\r\n resources: {\r\n searchInputAriaLabel: string;\r\n searchButtonAriaLabel: string;\r\n searchPlaceholderText: string;\r\n seeAllStoresText: string;\r\n viewListText: string;\r\n viewMapText: string;\r\n // VSI Customization - starts\r\n searchButtonText: string;\r\n searchLabelText: string;\r\n // VSI Customization - ends\r\n };\r\n // VSI Customization - starts\r\n isError: boolean;\r\n id: string;\r\n value: string;\r\n isMapDisabled?: boolean;\r\n // showAllStores?: boolean;\r\n displayList?: boolean;\r\n locatorView?: boolean;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n // onShowAllStores(): void;\r\n onToggleListMapViewState(): void;\r\n performSearch(searchTerm: string): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n isErrorChanged(isError: boolean): Promise;\r\n // VSI Customization - ends\r\n}\r\n\r\n/**\r\n * Simple search form consisting of search text and a search button\r\n */\r\nexport class StoreSelectorSearchForm extends React.PureComponent {\r\n private searchBoxRef: React.RefObject = React.createRef();\r\n private storeSearchAttributes: Msdyn365.IDictionary | undefined;\r\n private toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n // VSI Customization - starts\r\n constructor(props: IStoreSelectorSearchFormProps & IStoreSelectorSearchFormState) {\r\n super(props);\r\n const cookies = new Cookies();\r\n const zipCode = cookies.get('zip_code');\r\n this.state = { value: zipCode, isError: true };\r\n const payLoad: IPayLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SearchStore);\r\n this.storeSearchAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.ShowAllStore;\r\n // this.showAllStoreAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.ToggleMapView;\r\n this.toggleMapViewAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n resources: { searchButtonAriaLabel, searchInputAriaLabel, searchButtonText, viewListText, viewMapText, searchLabelText },\r\n id,\r\n value,\r\n isError,\r\n isMapDisabled,\r\n displayList,\r\n locatorView,\r\n onToggleListMapViewState\r\n } = this.props;\r\n // VSI Customization - ends\r\n\r\n const toggleButtonText = displayList ? viewMapText : viewListText;\r\n\r\n return (\r\n
\r\n \r\n 0 && 'field-control--value',\r\n isError && 'field-control--error'\r\n )}\r\n value={value}\r\n onChange={this._searchTextChanged}\r\n id={`ms-store-select__search-box_${id}`}\r\n ref={this.searchBoxRef}\r\n role='combobox'\r\n aria-expanded='false'\r\n aria-controls='as_containerSearch'\r\n maxLength={5}\r\n />\r\n \r\n \r\n {searchButtonText}\r\n \r\n \r\n {/* VSI Customization - ends */}\r\n {locatorView && (\r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n private _searchTextChanged = async (e: React.ChangeEvent): Promise => {\r\n const inputValue: string = e.target.value;\r\n\r\n await this.props.searchTermChanged(inputValue);\r\n };\r\n\r\n private _onSubmit = async (e: React.SyntheticEvent): Promise => {\r\n e.preventDefault(); // Prevents form submission\r\n // VSI Customization - starts\r\n const { value } = this.props;\r\n // eslint-disable-next-line security/detect-unsafe-regex\r\n const re = /^[0-9]{5}(?:-[0-9]{4})?$/;\r\n if (value === '' || !re.test(value)) {\r\n await this.props.isErrorChanged(true);\r\n } else {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n // @ts-ignore\r\n utag.link({\r\n event: \"store-locator-slideout-search\",\r\n event_category: \"store locator slideout\",\r\n event_action: \"search click\",\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: \"false\"\r\n });\r\n }\r\n this.searchBoxRef.current?.blur();\r\n await this.props.performSearch(this.props.value);\r\n await this.props.isErrorChanged(false);\r\n }\r\n // VSI Customization - ends\r\n };\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n// VSI Customization - starts\r\nimport { IMfrmStoreSelectorConfig, IMfrmStoreSelectorResources, ITermsOfServiceLinkData } from '../mfrm-store-selector.props.autogenerated';\r\n// VSI Customization - ends\r\nexport interface IStoreSelectorEmptyMessageProps {\r\n resources: IMfrmStoreSelectorResources;\r\n // VSI Customization - starts\r\n config: IMfrmStoreSelectorConfig;\r\n // VSI Customization - ends\r\n}\r\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources, config }) => (\r\n
\r\n
\r\n {/* VSI Customization - starts */}\r\n \r\n {/* VSI Customization - ends */}\r\n
\r\n
\r\n);\r\n\r\nexport const StoreSelectorEmptyDiv: React.FC = () => (\r\n
\r\n
\r\n
\r\n);\r\n\r\nexport const StoreSelectorWaiting: React.FC = () => (\r\n // VSI Customization - starts\r\n
\r\n
\r\n
\r\n // VSI Customization - ends\r\n);\r\n\r\nexport interface IStoreSelectorTermsOfServiceProps {\r\n link?: ITermsOfServiceLinkData;\r\n requestContext: Msdyn365.IRequestContext;\r\n onTextChange?(event: Msdyn365.ContentEditableEvent): void;\r\n}\r\n\r\nexport const StoreSelectorTermsOfService: React.FC = ({ link, requestContext, onTextChange }) => {\r\n if (link) {\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'ms-store-select__terms-link',\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button'\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport interface IStoreSelectorFoundLocationsMessage {\r\n resources: IMfrmStoreSelectorResources;\r\n locations?: IFullOrgUnitAvailability[];\r\n searchRadius: number;\r\n preferredDistanceUnit: string;\r\n isSeeAllStore: boolean;\r\n}\r\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({\r\n locations,\r\n searchRadius,\r\n resources,\r\n isSeeAllStore,\r\n preferredDistanceUnit\r\n}) => {\r\n if (locations) {\r\n const storeCountMessage =\r\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\r\n return (\r\n
\r\n {isSeeAllStore\r\n ? resources.storeAllCountMessage?.replace('{count}', locations.length.toString())\r\n : storeCountMessage?.replace('{count}', locations.length.toString())?.replace('{radius}', searchRadius.toString())}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n IPayLoad,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { IMfrmStoreSelectorResources, IShowAllStoresExternalLinkData } from '../mfrm-store-selector.props.autogenerated';\r\nexport interface IStoreSelectorSeeAllStoresProps {\r\n resources: IMfrmStoreSelectorResources;\r\n showAllStores?: boolean;\r\n enableOOBShowAllStores?: boolean;\r\n showAllStoresExternalLink?: IShowAllStoresExternalLinkData;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n onShowAllStores(): void;\r\n}\r\n\r\n/**\r\n * Displays Button for See All Stores\r\n */\r\nexport class StoreSelectorSeeAllStores extends React.PureComponent {\r\n private showAllStoreAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n constructor(props: IStoreSelectorSeeAllStoresProps) {\r\n super(props);\r\n const payLoad: IPayLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SearchStore);\r\n payLoad.contentAction.etext = TelemetryConstant.ShowAllStore;\r\n this.showAllStoreAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n }\r\n\r\n private _showAllStoresTracking () {\r\n if ('utag' in window) {\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n // @ts-ignore\r\n utag.link({\r\n event: \"store-locator-slideout-see-all-stores\",\r\n event_category: \"store locator slideout\",\r\n event_action: \"see all stores button click\",\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: \"false\"\r\n });\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { showAllStores, onShowAllStores, enableOOBShowAllStores, showAllStoresExternalLink } = this.props;\r\n\r\n return (\r\n <>\r\n {showAllStores && (enableOOBShowAllStores || showAllStoresExternalLink?.linkUrl.destinationUrl) && (\r\n
\r\n {enableOOBShowAllStores && (\r\n \r\n {' '}\r\n {this.props.resources.seeAllStoresText}{' '}\r\n \r\n )}\r\n {!enableOOBShowAllStores && showAllStoresExternalLink?.linkUrl.destinationUrl && (\r\n \r\n {showAllStoresExternalLink?.linkText}\r\n \r\n )}\r\n
\r\n )}\r\n \r\n );\r\n }\r\n}\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// import { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { /*ItemAvailability,*/ OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\n// import { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { IMfrmStoreSelectorResources } from '../mfrm-store-selector.props.autogenerated';\r\nimport dayjs from 'dayjs';\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: any;\r\n resources: IMfrmStoreSelectorResources;\r\n preferredDistanceUnit?: string;\r\n enableOutOfStockCheck?: boolean;\r\n storeLocatorView?: boolean;\r\n selectedStoreLocationId?: string;\r\n isPreferredStoreEnabled?: boolean;\r\n displayList?: boolean;\r\n isLocationDisabled?: boolean;\r\n onClick: (locationId: string | undefined) => void;\r\n preferredStoreLocationId: string | null;\r\n onSetAsPreferredStore: (locationId: string | undefined) => void;\r\n onRemovePreferredStore: () => void;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n onLocationSelected(location: OrgUnitLocation | undefined): void;\r\n}\r\n\r\n/**\r\n * Displays all the location line items, or null if none exists\r\n */\r\n@observer\r\nexport class SociLocationLines extends React.PureComponent {\r\n private selectedLocationRef: React.RefObject;\r\n // @observable private _stores: [] | undefined;\r\n constructor(props: IStoreSelectorLocationLinesProps) {\r\n super(props);\r\n this.selectedLocationRef = React.createRef();\r\n }\r\n public componentDidUpdate(prevProps: IStoreSelectorLocationLinesProps): void {\r\n if (this.props.selectedStoreLocationId !== prevProps.selectedStoreLocationId) {\r\n this._scrollIntoView();\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!this.props.locations || this.props.locations.length === 0) {\r\n return null;\r\n }\r\n return (\r\n
\r\n {\r\n this.props.locations.map((store: any, index: number) => {\r\n return this._renderStoreLocation(store, index, this.props.resources, this.props.isPreferredStoreEnabled!);\r\n })\r\n }\r\n
\r\n );\r\n }\r\n private _renderStoreLocation(store: any, index: number, resources: IMfrmStoreSelectorResources, isPreferredStoreEnabled: boolean): JSX.Element | undefined {\r\n const isFranchise = JSON.parse(store.project_meta).Division === 'Franchise' || false;\r\n const projectMetaSoci = store ? JSON.parse(store.project_meta) : '';\r\n const isPreferredStore = this.props.preferredStoreLocationId ? this.props.preferredStoreLocationId === projectMetaSoci['Corporate ID'] : false;\r\n const storeHours = JSON.parse(store?.bho)?.[dayjs().day()];\r\n const opensAt = dayjs(`1/1/1 ${storeHours[0].slice(0, 2)}:${storeHours[0].slice(2)}`).format('hh:mm A');\r\n const closedAt = dayjs(`1/1/1 ${storeHours[1].slice(0, 2)}:${storeHours[1].slice(2)}`).format('hh:mm A');\r\n const isStoreOpen = (storeHours[0].slice(0, 2) < dayjs().hour() && storeHours[1].slice(0, 2) > dayjs().hour()) ? true : false;\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n const onClickStoreDetails = (e: React.MouseEvent) => {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: \"store-locator-slideout-store-details\",\r\n event_category: \"store locator slideout\",\r\n event_action: \"store details link click\",\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n };\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n {isFranchise ? Franchise : <>}\r\n {store.name}\r\n
\r\n
\r\n {store.bho && {isStoreOpen ? `Open until ${closedAt}` : `Open at ${opensAt}`}}\r\n {store._distance && {store._distance} mi}\r\n
\r\n
\r\n
\r\n {store && (\r\n
\r\n \r\n
\r\n

{store.address1}

\r\n

{store.address2}

\r\n

\r\n {store.city}, {store.state} {store.postalcode}\r\n

\r\n
\r\n
\r\n )}\r\n
\r\n {(isPreferredStoreEnabled && !isFranchise) ? (\r\n isPreferredStore ? (\r\n \r\n {/* {resources.preferredStoreText} */}\r\n My store\r\n \r\n ) : (\r\n this.props.onSetAsPreferredStore(store)}\r\n >\r\n {/* {resources.setAsPreferredStoreText} */}\r\n Make My Store\r\n \r\n )\r\n ) : null}\r\n \r\n Store Details\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n private _scrollIntoView = () => {\r\n const selectedLocationDiv = this.selectedLocationRef.current;\r\n const parent = selectedLocationDiv?.parentElement;\r\n if (selectedLocationDiv && parent) {\r\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop;\r\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\r\n }\r\n }\r\n };\r\n}\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IMfrmStoreSelector contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum mode {\r\n findStores = 'findStores',\r\n pickupInStore = 'pickupInStore'\r\n}\r\n\r\nexport const enum searchRadiusUnit {\r\n miles = 'miles',\r\n kilometers = 'kilometers'\r\n}\r\n\r\nexport const enum style {\r\n inline = 'inline',\r\n dialog = 'dialog'\r\n}\r\n\r\nexport interface IMfrmStoreSelectorConfig extends Msdyn365.IModuleConfig {\r\n heading?: string;\r\n termsOfServiceLink?: ITermsOfServiceLinkData;\r\n mode?: mode;\r\n searchRadiusUnit?: searchRadiusUnit;\r\n lookupRadius: number;\r\n style?: style;\r\n setAsPreferredStore?: boolean;\r\n showAllStores?: boolean;\r\n enableOOBShowAllStores?: boolean;\r\n showAllStoresExternalLink?: IShowAllStoresExternalLinkData;\r\n autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n className?: string;\r\n enableFranchise?: boolean;\r\n maxNoOfFranchise?: number;\r\n errorLocationsText?: Msdyn365.RichText;\r\n showBanner?: boolean;\r\n bannerText?: Msdyn365.RichText;\r\n}\r\n\r\nexport interface IMfrmStoreSelectorResources {\r\n searchLabelText: string;\r\n searchPlaceholderText: string;\r\n searchButtonText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n outOfStockText: string;\r\n inStockText: string;\r\n selectedStoreLocationText: string;\r\n emptyLocationsText: string;\r\n selectStoreText: string;\r\n selectStoreAriaFormatText: string;\r\n setAsPreferredStoreText: string;\r\n setAsPreferredStoreTextAriaLabel: string;\r\n preferredStoreText: string;\r\n preferredStoreAriaLabel: string;\r\n timeText: string;\r\n captionText: string;\r\n milesShortText: string;\r\n kilometersShortText: string;\r\n contactText: string;\r\n availabilityText: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeConfiguration: string;\r\n productDimensionTypeSize: string;\r\n productDimensionTypeStyle: string;\r\n storeHoursClosedText: string;\r\n storeHoursMondayText: string;\r\n storeHoursTuesdayText: string;\r\n storeHoursWednesdayText: string;\r\n storeHoursThursdayText: string;\r\n storeHoursFridayText: string;\r\n storeHoursSaturdayText: string;\r\n storeHoursSundayText: string;\r\n storeHoursMondayFullText: string;\r\n storeHoursTuesdayFullText: string;\r\n storeHoursWednesdayFullText: string;\r\n storeHoursThursdayFullText: string;\r\n storeHoursFridayFullText: string;\r\n storeHoursSaturdayFullText: string;\r\n storeHoursSundayFullText: string;\r\n storePhoneAriaLabel: string;\r\n storeAddressAriaLabel: string;\r\n storeCountMessage: string;\r\n storeAllCountMessage: string;\r\n storeCountMessageInKm: string;\r\n storeSelectorHeaderText: string;\r\n storeLocatorHeaderText: string;\r\n seeAllStoresText: string;\r\n viewMapText: string;\r\n viewListText: string;\r\n viewStoreDetailsText: string;\r\n storeOpenAtHours: string;\r\n storeCloseAtHours: string;\r\n}\r\n\r\nexport interface ITermsOfServiceLinkData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface IShowAllStoresExternalLinkData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface IAutoSuggestOptionsData {\r\n maxResults?: number;\r\n}\r\n\r\nexport interface IMfrmStoreSelectorProps extends Msdyn365.IModule {\r\n resources: IMfrmStoreSelectorResources;\r\n config: IMfrmStoreSelectorConfig;\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n// reference to maps removed\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n// VSI Customization - starts\r\nimport { StoreSelectorStateInput } from '../../data-actions/store-selector-state-data-action';\r\n// VSI Customization - ends\r\nimport {\r\n StoreSelectorEmptyMessage,\r\n StoreSelectorFoundLocationsMessage,\r\n StoreSelectorLocationLines,\r\n StoreSelectorSearchForm,\r\n // VSI Customization - starts\r\n StoreSelectorSeeAllStores,\r\n // VSI Customization - ends\r\n StoreSelectorTermsOfService,\r\n StoreSelectorWaiting\r\n} from './components';\r\nimport { SociLocationLines } from './components/soci-locations-lines';\r\nimport { IMfrmStoreSelectorData } from './mfrm-store-selector.data';\r\nimport { IMfrmStoreSelectorProps, mode as modeEnum, searchRadiusUnit, style as stylyEnum } from './mfrm-store-selector.props.autogenerated';\r\n\r\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n getFullAvailableInventoryNearby,\r\n GetFullAvailableInventoryNearbyInput,\r\n getOrgUnitLocationsByArea,\r\n GetOrgUnitLocationsByAreaInput,\r\n IFullOrgUnitAvailability\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport {\r\n IFranchise,\r\n GetFranchiseData,\r\n getFranchise\r\n} from '../../data-actions/get-franchise-data.action';\r\n\r\nimport {\r\n getTelemetryObject,\r\n IModuleProps,\r\n INodeProps,\r\n ITelemetryContent,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n ModalHeader,\r\n NodeTag\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport classname from 'classnames';\r\nimport Cookies from 'universal-cookie';\r\nimport getSociData, { GetSociDataInput } from '../../actions/get-soci-data.action';\r\nimport { ProductCompareBuyboxStateSharing } from '../../actions/product-compare-buybox-state-sharing';\r\nimport { getZipCode, getGeoLocationZipCode } from '../../Utilities/get-zipcode';\r\n\r\nexport interface IStoreSelectorState {\r\n isSearchInProgress: boolean;\r\n searchTerm?: string;\r\n isSeeAllStoreValue: boolean;\r\n isLocationDisabled?: boolean;\r\n // VSI Customization - starts\r\n isError: boolean;\r\n isFranchiseSearchInProgress: boolean;\r\n franchiseList: IFranchise[];\r\n isSociLocationsInProgress: boolean;\r\n sociLocationsList: any;\r\n // VSI Customization - ends\r\n}\r\n\r\n// VSI Customization - starts\r\nexport type storeLocatorCookie = {\r\n name: string;\r\n value: string | undefined;\r\n};\r\n// VSI Customization - ends\r\nexport interface IStoreSelectorViewProps extends IMfrmStoreSelectorProps {\r\n state: IStoreSelectorState;\r\n\r\n // Containers:\r\n ModuleProps: IModuleProps;\r\n BodyContainerProps: INodeProps;\r\n FooterContainerProps: INodeProps;\r\n HeaderContainerProps: INodeProps;\r\n HeaderProps?: React.ReactNode;\r\n\r\n // Components\r\n locationsMessage?: React.ReactNode;\r\n search?: React.ReactNode;\r\n spinner?: React.ReactNode;\r\n locationsList?: React.ReactNode;\r\n sociLocationsList?: React.ReactNode;\r\n franchiseList?: React.ReactNode;\r\n noLocationsMessage?: React.ReactNode;\r\n terms?: React.ReactNode;\r\n headerText?: React.ReactNode;\r\n // VSI Customization - starts\r\n banner?: JSX.Element;\r\n seeAllStores?: React.ReactNode;\r\n currentLocation?: JSX.Element;\r\n isError?: boolean;\r\n // VSI Customization - ends\r\n\r\n callbacks: {\r\n closeDialog(): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n // VSI Customization - starts\r\n isErrorChanged(isError: boolean): Promise;\r\n // VSI Customization - ends\r\n performSearch(searchTerm: string): Promise;\r\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\r\n getAndUpdateUserLocation(): Promise;\r\n setPreferredStore(storeId: string | undefined): Promise;\r\n removePreferredStore(): Promise;\r\n setSelectedStore(storeId: string | undefined): Promise;\r\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\r\n };\r\n}\r\n\r\n/**\r\n *\r\n * Pick Up In Store module\r\n * @extends React.Component>}\r\n */\r\n@observer\r\nclass StoreSelector extends React.Component, IStoreSelectorState> {\r\n private telemetryContent: ITelemetryContent;\r\n\r\n constructor(props: IMfrmStoreSelectorProps) {\r\n super(props);\r\n // VSI Customization - starts\r\n const cookies = new Cookies();\r\n const zipCode = cookies.get('zip_code');\r\n this.state = {\r\n isSearchInProgress: true,\r\n searchTerm: zipCode,\r\n isSeeAllStoreValue: false,\r\n isError: false,\r\n isFranchiseSearchInProgress: true,\r\n franchiseList: [],\r\n isSociLocationsInProgress: true,\r\n sociLocationsList: []\r\n };\r\n // VSI Customization - ends\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n }\r\n\r\n // tslint:disable-next-line: max-func-body-length\r\n public componentDidMount(): void {\r\n const {\r\n context: {\r\n actionContext\r\n },\r\n app: {\r\n config: { enableSociLocations }\r\n },\r\n data: {\r\n storeSelectorState: { result: storeSelectorState },\r\n storeSelectorStateManager\r\n }\r\n } = this.props;\r\n\r\n if ((enableSociLocations && !storeSelectorState?.sociPreferredStore) || (!enableSociLocations && !storeSelectorStateManager.result?.preferredStore)) {\r\n const defaultZipCode = getZipCode(actionContext) || '';\r\n // VSI Customization - starts\r\n const cookies = new Cookies();\r\n const zipCode = cookies.get('zip_code');\r\n // @ts-ignore\r\n const selectedStore = localStorage.getItem('_msdyn365__preferredStore_') ? JSON.parse(localStorage.getItem('_msdyn365__preferredStore_')) : null;\r\n if (!zipCode || zipCode !== this.state.searchTerm || !selectedStore) {\r\n this._setCookie({ name: 'zip_code', value: defaultZipCode }, 24 * 365);\r\n // Todo: Need to handle promises in a proper way\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._setDefaultStore(defaultZipCode);\r\n }\r\n }\r\n // Todo: Need to handle promises in a proper way\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getAndUpdateStoreLocation();\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result && this.props.data.storeSelectorStateManager.result.isDialogOpen,\r\n async () => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n const selectedStore = localStorage.getItem('_msdyn365__preferredStore_') ? JSON.parse(localStorage.getItem('_msdyn365__preferredStore_')!) : null;\r\n // VSI Customization - starts\r\n const storeSelectorState = this.props.data.storeSelectorState?.result;\r\n this.props.context.actionContext.update(new StoreSelectorStateInput(), {\r\n ...storeSelectorState,\r\n isModalOpen:\r\n this.props.data.storeSelectorStateManager.result && this.props.data.storeSelectorStateManager.result.isDialogOpen,\r\n isSociLocationsEnabled: this.props.app.config.enableSociLocations,\r\n sociPreferredStore: selectedStore\r\n\r\n });\r\n // VSI Customization - starts\r\n if (context && context?.id === this.props.id) {\r\n // Todo: Need to handle promises in a proper way\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getAndUpdateStoreLocation();\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () =>\r\n this.props.data.storeSelectorStateManager.result &&\r\n this.props.data.storeSelectorStateManager.result.context &&\r\n this.props.data.storeSelectorStateManager.result.context.id,\r\n async () => {\r\n const cookies = new Cookies();\r\n const zipCode = cookies.get('zip_code');\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (context && context?.id === this.props.id) {\r\n await this._searchTermChanged(zipCode);\r\n // Todo: Need to handle promises in a proper way\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getAndUpdateStoreLocation();\r\n }\r\n }\r\n );\r\n\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IMfrmStoreSelectorProps): boolean {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n if (context && context.id === this.props.id) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // tslint:disable-next-line:max-func-body-length cyclomatic-complexity\r\n public render(): JSX.Element {\r\n const {\r\n config: {\r\n termsOfServiceLink,\r\n className,\r\n heading,\r\n mode,\r\n style,\r\n setAsPreferredStore,\r\n showAllStores,\r\n lookupRadius,\r\n // VSI Customization - starts\r\n showBanner,\r\n enableOOBShowAllStores,\r\n showAllStoresExternalLink\r\n // VSI Customization - ends\r\n },\r\n context: {\r\n // 27481 telemetry,\r\n app: { config: appConfig },\r\n actionContext: {\r\n requestContext: {\r\n // 27481 channel,\r\n cookies\r\n }\r\n }\r\n },\r\n resources,\r\n data: {\r\n availabilitiesWithHours: { result: availabilitiesWithHours },\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeLocations: { result: storeLocations }\r\n }\r\n } = this.props;\r\n\r\n // 27481 const isMapDisabled = (channel && channel.BingMapsApiKey && channel.BingMapsEnabled) ? false : true;\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n const isDialogOpen: boolean = storeSelectorStateManager\r\n ? storeSelectorStateManager.isDialogOpen && context?.id === this.props.id\r\n : false;\r\n const styleDefault = style !== undefined ? style : stylyEnum.dialog;\r\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\r\n const inlineView = styleDefault === stylyEnum.inline;\r\n const locatorView = modeDefault === modeEnum.findStores;\r\n const hideInventory = locatorView;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\r\n const displayList = storeSelectorStateManager?.listMapViewState?.displayList;\r\n const isPreferredStoreEnabled = setAsPreferredStore && cookies?.isConsentGiven();\r\n const sociPrefferedStore =\r\n MsDyn365.isBrowser && localStorage.getItem('_mfrm__prefferedStore_')\r\n ? JSON.parse(localStorage.getItem('_mfrm__prefferedStore_') || '')\r\n : {};\r\n const projectMetaSoci = sociPrefferedStore?.project_meta ? JSON.parse(sociPrefferedStore?.project_meta) : '';\r\n const showLocationView =\r\n context &&\r\n (context.showMapViewLink === undefined || context.showMapViewLink) &&\r\n locatorView &&\r\n storeSelectorStateManager?.isMapModuleLoaded;\r\n\r\n const StoreSelectorActions = {\r\n toggleListMapViewState(): void {\r\n storeSelectorStateManager?.toggleListMapViewState();\r\n }\r\n };\r\n /*27481 if (!(channel && channel.BingMapsApiKey)) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n }*/\r\n\r\n const configHeading = heading ? heading : locatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\r\n const preferredDistanceUnit =\r\n this.props.config.searchRadiusUnit === searchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\r\n const viewProps = {\r\n ...(this.props as IMfrmStoreSelectorProps),\r\n state: this.state,\r\n\r\n ModuleProps: {\r\n tag: inlineView ? ('div' as NodeTag) : Modal,\r\n moduleProps: this.props,\r\n className: classname(`ms-store-${inlineView ? 'locate' : 'select'}`, className),\r\n autoFocus: true,\r\n fade: true,\r\n isOpen: isDialogOpen,\r\n horizontalPosition: 'center',\r\n verticalPosition: 'center',\r\n // VSI Customization - starts\r\n modalClassName: 'ms-store-select-dialog',\r\n toggle: isDialogOpen ? this._closeDialog : storeSelectorStateManager?.openDialog\r\n // VSI Customization - ends\r\n },\r\n HeaderContainerProps: {\r\n tag: inlineView ? ('div' as NodeTag) : ModalHeader,\r\n className: `ms-store-select__${inlineView ? 'header' : 'modal-header'}`,\r\n toggle: isDialogOpen ? this._closeDialog : storeSelectorStateManager?.openDialog\r\n },\r\n HeaderProps: configHeading && (\r\n \r\n ),\r\n FooterContainerProps: {\r\n tag: inlineView ? ('div' as NodeTag) : ModalFooter,\r\n className: `ms-store-select__${inlineView ? 'footer' : 'modal-footer'} ${!displayList ? 'map-only-view' : ''}`\r\n },\r\n BodyContainerProps: {\r\n tag: inlineView ? ('div' as NodeTag) : ModalBody,\r\n className: `ms-store-select__${inlineView ? 'body' : 'modal-body'}`\r\n },\r\n locationsMessage: !this.state.isLocationDisabled && (\r\n \r\n ),\r\n search: (\r\n this._getAndUpdateStoreLocation(true)}\r\n // VSI Customization - starts\r\n onToggleListMapViewState={StoreSelectorActions.toggleListMapViewState}\r\n displayList={displayList}\r\n locatorView={showLocationView}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n ),\r\n spinner: ,\r\n franchiseList: (this.props.config.enableFranchise && this.state.franchiseList.length > 0) ? (\r\n
\r\n {this.state.franchiseList.sort((n1, n2) => (n1.miles || 0) - (n2.miles || 0)).map(franchise => {\r\n return (\r\n
\r\n
\r\n
\r\n Franchise\r\n {franchise.name}\r\n
\r\n
\r\n {(franchise.miles)?.toFixed(0)} mi
\r\n
\r\n
\r\n

Contact

\r\n
\r\n \r\n
\r\n

{franchise.address_line_1} {franchise.address_line_2}

\r\n

{franchise.city} {franchise.state_province} {franchise.postal_code}

\r\n
\r\n
\r\n
\r\n {franchise.website_url !== \"\" && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n ) : null,\r\n locationsList: ((availabilitiesWithHours && availabilitiesWithHours.length) || (storeLocations && storeLocations.length)) && (\r\n \r\n ),\r\n sociLocationsList: (\r\n \r\n ),\r\n // VSI Customization - starts\r\n noLocationsMessage: ,\r\n // VSI Customization - ends\r\n terms: (\r\n \r\n ),\r\n // Not being used in current context, we can use it here to pass more props.\r\n headerText: (\r\n {heading ? heading : locatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\r\n ),\r\n\r\n // VSI Customization - starts\r\n seeAllStores: (\r\n this._getAndUpdateStoreLocation(true)}\r\n />\r\n ),\r\n isError: this.state.isError,\r\n banner: (showBanner && this._renderBannerText) || null,\r\n currentLocation: this._renderCurrentLocation,\r\n // VSI Customization - ends\r\n callbacks: {\r\n searchTermChanged: this._searchTermChanged,\r\n performSearch: this._performSearch,\r\n closeDialog: this._closeDialog,\r\n selectedLocation: this._onOrgUnitLocationSelected,\r\n // Todo: Need to handle promises in a proper way\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n getAndUpdateUserLocation: () => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getAndUpdateStoreLocation();\r\n return Promise.resolve();\r\n },\r\n onSuggestionSelected: this._onOrgUnitLocationSelected,\r\n setPreferredStore: this._setPreferredStore,\r\n removePreferredStore: this._removePreferredStore,\r\n setSelectedStore: this._setSelectedStore,\r\n setOrgUnitStoreInformation: this._setOrgUnitStoreInformation,\r\n // VSI Customization - starts\r\n isErrorChanged: this._isErrorChanged\r\n // VSI Customization - ends\r\n }\r\n } as IStoreSelectorViewProps;\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent) => {\r\n if (this.props.config.termsOfServiceLink) {\r\n this.props.config.termsOfServiceLink.linkText = event.target.value;\r\n }\r\n };\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading = event.target.value);\r\n private _setPreferredStore = async (storeId: string | undefined): Promise => {\r\n if (!storeId) {\r\n return;\r\n }\r\n\r\n const {\r\n context: {\r\n actionContext,\r\n actionContext: {\r\n requestContext: { cookies }\r\n }\r\n },\r\n config: { mode },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeLocations: { result: storeLocations },\r\n availabilitiesWithHours: { result: availabilitiesWithHours }\r\n }\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\r\n\r\n let stores: IFullOrgUnitAvailability[];\r\n if (modeDefault === modeEnum.findStores && storeLocations) {\r\n stores = storeLocations;\r\n } else {\r\n stores = availabilitiesWithHours!;\r\n }\r\n\r\n const preferedStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\r\n // @ts-ignore\r\n const selectedStore = localStorage.getItem('_msdyn365__preferredStore_') ? JSON.parse(localStorage.getItem('_msdyn365__preferredStore_')) : null;\r\n // VSI Customization - start\r\n const storeSelectorState = this.props.data.storeSelectorState?.result;\r\n this.props.context.actionContext.update(new StoreSelectorStateInput(), {\r\n ...storeSelectorState,\r\n prefferedStore: preferedStore?.OrgUnitAvailability?.OrgUnitLocation\r\n });\r\n localStorage.setItem('_mfrm__prefferedStore_', JSON.stringify(preferedStore?.OrgUnitAvailability?.OrgUnitLocation));\r\n this._setCookie({ name: 'preferredStoreState', value: preferedStore?.OrgUnitAvailability?.OrgUnitLocation?.State || '' }, 24 * 365);\r\n const zip_Code = this.state.searchTerm ? this.state.searchTerm : getZipCode(actionContext);\r\n // On setting preferred store, current search zipCode will be used as delivery zipCode\r\n this._setCookie({ name: 'zip_code', value: zip_Code || '' }, 24 * 365);\r\n // VSI Customization - ends\r\n // update the state to trigger zipcode change in product-compare\r\n this.props.context.actionContext.update(new ProductCompareBuyboxStateSharing(zip_Code), { zipcode: zip_Code });\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n if (selectedStore && preferedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber !== selectedStore?.StoreId) {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: 'store-locator-slideout-change-my-store',\r\n event_category: 'store locator slideout',\r\n event_action: 'change my store',\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n }\r\n await storeSelectorStateManager.setPreferredStoreLocation(\r\n storeId,\r\n preferedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\r\n cookies?.isConsentGiven(),\r\n preferedStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\r\n preferedStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\r\n );\r\n\r\n Msdyn365.msdyn365Commerce.isBrowser && document.body.classList.remove('modal-store-locator-toggle');\r\n Msdyn365.msdyn365Commerce.isBrowser && document.body.classList.remove('modal-store-locator-toggle-pdp');\r\n await storeSelectorStateManager.closeDialog();\r\n };\r\n\r\n private _removePreferredStore = async (): Promise => {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { cookies }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n await storeSelectorStateManager.clearPreferredStore(cookies?.isConsentGiven());\r\n // VSI Customization - start\r\n localStorage.removeItem('_mfrm__prefferedStore_');\r\n // VSI Customization - ends\r\n };\r\n\r\n private _setSelectedStore = async (storeId: string | undefined): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\r\n };\r\n\r\n private _sortSociLocations = (stores: any) => {\r\n const preferredStore = localStorage?.getItem('_mfrm__prefferedStore_') || null;\r\n if (stores?.length !== 0 && preferredStore) {\r\n const parsedPreferredStore = JSON.parse(preferredStore);\r\n const selectedStoreIndex = stores?.findIndex((store: any) => parsedPreferredStore?.name === store.name);\r\n const selectedStore = stores?.splice(selectedStoreIndex, 1);\r\n stores.unshift(selectedStore[0]);\r\n return [...new Set(stores)];\r\n }\r\n return stores;\r\n };\r\n\r\n private _performSearch = async (searchTerm: string): Promise => {\r\n const {\r\n context: { actionContext },\r\n config: {\r\n lookupRadius,\r\n maxNoOfFranchise\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!searchTerm || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false, isFranchiseSearchInProgress: true, isSociLocationsInProgress: true });\r\n\r\n if (!this.props.app.config.enableSociLocations) {\r\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\r\n\r\n if (location) {\r\n await this._updateLocations(location.latitude, location.longitude);\r\n } else {\r\n await this._updateLocations();\r\n }\r\n } else {\r\n try {\r\n this.setState({ isSociLocationsInProgress: true });\r\n void getSociData(new GetSociDataInput(lookupRadius, maxNoOfFranchise, searchTerm), this.props.context.actionContext).then((data: any) => {\r\n if (data) {\r\n const sociAvailableStores = data.response.collection && data.response.collection.filter((store: { opening_status: string; }) => store?.opening_status !== 'permanently_closed') || [];\r\n const sortedLocations = this._sortSociLocations(sociAvailableStores);\r\n this.setState({ sociLocationsList: sortedLocations, isSociLocationsInProgress: false });\r\n this._setCookie({ name: 'zip_code', value: searchTerm }, 24 * 365);\r\n }\r\n });\r\n } catch (error) {\r\n console.error('Soci API error', Error);\r\n }\r\n }\r\n\r\n\r\n this.setState({ isSearchInProgress: false, isFranchiseSearchInProgress: false, isSociLocationsInProgress: false });\r\n };\r\n\r\n private _searchTermChanged = async (searchTerm: string): Promise => {\r\n this.setState({ searchTerm: searchTerm });\r\n };\r\n\r\n // VSI Customization - starts\r\n private _isErrorChanged = async (isError: boolean): Promise => {\r\n this.setState({ isError: isError });\r\n };\r\n // VSI Customization - ends\r\n\r\n private _getAndUpdateStoreLocation = async (showAllStores?: boolean): Promise => {\r\n const {\r\n config: { style, maxNoOfFranchise, lookupRadius },\r\n context: { actionContext },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const styleDefault = style !== undefined ? style : stylyEnum.dialog;\r\n\r\n if (styleDefault !== stylyEnum.inline && (!storeSelectorStateManager || !storeSelectorStateManager.isDialogOpen)) {\r\n // Store selector dialog isn't open yet, so don't try and update anything\r\n return;\r\n }\r\n // VSI Customization - starts\r\n const zipCode = getZipCode(actionContext) || '';\r\n\r\n // SOCi Implementation\r\n // if soci config enable then get and set data from soci\r\n // call soci data action here\r\n // else call previous method as it is\r\n if (!this.props.app.config.enableSociLocations) {\r\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false, isFranchiseSearchInProgress: false });\r\n const location =\r\n storeSelectorStateManager && (await storeSelectorStateManager.geoLocate(zipCode?.trim() !== '' ? zipCode : '0', actionContext));\r\n if (location) {\r\n if (showAllStores) {\r\n this.setState({ isSeeAllStoreValue: true });\r\n await this._searchTermChanged(zipCode);\r\n\r\n await this._isErrorChanged(false);\r\n await this._updateLocations(location.latitude, location.longitude, 0);\r\n } else {\r\n await this._searchTermChanged(zipCode);\r\n await this._isErrorChanged(false);\r\n\r\n await this._updateLocations(location.latitude, location.longitude);\r\n }\r\n\r\n this.setState({ isSearchInProgress: false, isFranchiseSearchInProgress: false });\r\n } else {\r\n this.setState({ isSearchInProgress: false, isFranchiseSearchInProgress: false });\r\n }\r\n } else {\r\n this.setState({ isSearchInProgress: false, isSeeAllStoreValue: false, isFranchiseSearchInProgress: false, isSociLocationsInProgress: true });\r\n await this._searchTermChanged(zipCode);\r\n try {\r\n this.setState({ isSociLocationsInProgress: true });\r\n void getSociData(new GetSociDataInput(lookupRadius, maxNoOfFranchise, zipCode), this.props.context.actionContext).then((data: any) => {\r\n if (data) {\r\n const sociAvailableStores = data.response.collection && data.response.collection.filter((store: { opening_status: string; }) => store?.opening_status !== 'permanently_closed') || [];\r\n const sortedLocations = this._sortSociLocations(sociAvailableStores);\r\n this.setState({ sociLocationsList: sortedLocations, isSociLocationsInProgress: false });\r\n }\r\n });\r\n } catch (error) {\r\n console.error('Soci API error', Error);\r\n }\r\n }\r\n };\r\n\r\n private _closeDialog = async (): Promise => {\r\n // VSI Customization - starts\r\n Msdyn365.msdyn365Commerce.isBrowser && document.body.classList.remove('modal-store-locator-toggle');\r\n Msdyn365.msdyn365Commerce.isBrowser && document.body.classList.remove('modal-store-locator-toggle-pdp');\r\n // VSI Customization - ends\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager) {\r\n return storeSelectorStateManager.closeDialog();\r\n }\r\n };\r\n\r\n private _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n config: { style },\r\n telemetry\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n const context = storeSelectorStateManager.context;\r\n const id: string = context && context.id ? context.id : this.props.id;\r\n const styleDefault = style !== undefined ? style : stylyEnum.dialog;\r\n await storeSelectorStateManager\r\n .setOrgUnitStoreInformation({\r\n id,\r\n showMapViewLink: context && context.showMapViewLink,\r\n isDialog: styleDefault === stylyEnum.dialog,\r\n orgUnitStoreInformation,\r\n onLocationSelected: orgUnitLocation => {\r\n // TO-DO handle event for when location in selected\r\n return Promise.resolve();\r\n }\r\n })\r\n .catch((error: Error) => {\r\n if (telemetry) {\r\n telemetry.error(error.message);\r\n telemetry.debug('Unable to Update store location state');\r\n }\r\n return;\r\n });\r\n return;\r\n };\r\n\r\n private _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\r\n const {\r\n telemetry,\r\n config: { mode, lookupRadius, maxNoOfFranchise },\r\n context: { actionContext },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\r\n const distanceUnitValue = this.props.config.searchRadiusUnit === searchRadiusUnit.kilometers ? 1 : 0;\r\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\r\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\r\n const lat = this.state.searchTerm || !(preferredStore && preferredStore.Latitude) ? latitude : preferredStore.Latitude;\r\n const long = this.state.searchTerm || !(preferredStore && preferredStore.Longitude) ? longitude : preferredStore.Longitude;\r\n\r\n\r\n // Get Franchise Data\r\n const getFranchiseInputInput = new GetFranchiseData(\r\n lat,\r\n long,\r\n calRadius\r\n );\r\n\r\n const franchiseStore = await getFranchise(getFranchiseInputInput, actionContext);\r\n const maxFranchises = maxNoOfFranchise ? franchiseStore.splice(0, maxNoOfFranchise) : franchiseStore;\r\n if (franchiseStore) {\r\n this.setState({ isFranchiseSearchInProgress: false, franchiseList: maxFranchises });\r\n }\r\n\r\n if (modeDefault === modeEnum.findStores) {\r\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\r\n lat,\r\n long,\r\n calRadius,\r\n distanceUnitValue,\r\n this.state.isLocationDisabled\r\n );\r\n\r\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\r\n if (orgUnitLocations) {\r\n await this._setOrgUnitStoreInformation(orgUnitLocations);\r\n await this._setSelectedStore(undefined);\r\n }\r\n return;\r\n }\r\n\r\n if (!storeSelectorStateManager || !storeSelectorStateManager.context) {\r\n // Store selector dialog isn't open yet, so don't try and update anything\r\n return;\r\n }\r\n\r\n if (!storeSelectorStateManager.context.product) {\r\n // TODO: Use alternative search method here to not make inventory check\r\n return;\r\n }\r\n\r\n const input = new GetFullAvailableInventoryNearbyInput(\r\n storeSelectorStateManager.context.product.RecordId,\r\n lat || 0,\r\n long || 0,\r\n calRadius,\r\n distanceUnitValue,\r\n this.state.isLocationDisabled\r\n );\r\n\r\n await getFullAvailableInventoryNearby(input, actionContext).catch(error => {\r\n telemetry.warning(error);\r\n telemetry.error(error.message);\r\n telemetry.debug(`Unable to get full available inventory near by`);\r\n });\r\n };\r\n\r\n private _onOrgUnitLocationSelected = async (location: OrgUnitLocation | undefined): Promise => {\r\n const {\r\n telemetry,\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager) {\r\n if (location && storeSelectorStateManager.context) {\r\n // Want to eat exceptions here so that the dialog still closes even if the onLocationSelected call goes wrong\r\n await storeSelectorStateManager.context.onLocationSelected(location).catch(error => {\r\n telemetry.warning(error);\r\n telemetry.error(error.message);\r\n telemetry.debug(`Unable to get on org unit location selected`);\r\n });\r\n }\r\n\r\n await storeSelectorStateManager.closeDialog();\r\n }\r\n };\r\n\r\n // VSI Customization - starts\r\n private _setCookie(cookie: storeLocatorCookie, deltaHoursFromToday: number): void {\r\n const { cookies } = this.props.context.request;\r\n const now = new Date(Date.now());\r\n now.setHours(now.getHours() + deltaHoursFromToday);\r\n\r\n cookies.set(cookie.name, cookie.value, {\r\n expires: deltaHoursFromToday === 0 || deltaHoursFromToday === undefined ? 0 : now,\r\n isEssential: true\r\n } as {});\r\n }\r\n\r\n private get _renderBannerText(): JSX.Element {\r\n const { bannerText } = this.props.config;\r\n return ;\r\n }\r\n\r\n private get _renderCurrentLocation(): JSX.Element {\r\n return (\r\n // tslint:disable-next-line:react-this-binding-issue jsx-no-lambda\r\n this._getCurrentLocationStores()}\r\n >\r\n Use current location\r\n
\r\n );\r\n }\r\n\r\n private _setDefaultStore = async (searchTerm: string): Promise => {\r\n const {\r\n config: { lookupRadius, maxNoOfFranchise },\r\n context: { actionContext },\r\n data: { storeSelectorStateManager }\r\n } = this.props;\r\n\r\n if (!searchTerm || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n if (this.props.app.config.enableSociLocations) {\r\n try {\r\n await this._searchTermChanged(searchTerm);\r\n void getSociData(new GetSociDataInput(lookupRadius, maxNoOfFranchise, searchTerm), this.props.context.actionContext).then((data: any) => {\r\n if (data && data.response.collection) {\r\n const sociAvailableStores = data.response.collection && data.response.collection.filter((store: { opening_status: string; }) => store?.opening_status !== 'permanently_closed') || [];\r\n const sortedLocations = this._sortSociLocations(sociAvailableStores);\r\n this.setState({ sociLocationsList: sortedLocations });\r\n this._setCookie({ name: 'zip_code', value: searchTerm }, 24 * 365);\r\n void this._onSetPreferredSociStore(data.response.collection[0]);\r\n }\r\n });\r\n } catch (error) {\r\n console.error('Soci API error', Error);\r\n }\r\n } else {\r\n try {\r\n const location = await (await storeSelectorStateManager).geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\r\n const lat = location?.latitude || 0;\r\n const long = location?.longitude || 0;\r\n const calRadius = lookupRadius || 50;\r\n const distanceUnitValue = this.props.config.searchRadiusUnit === searchRadiusUnit.kilometers ? 1 : 0;\r\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\r\n lat,\r\n long,\r\n calRadius,\r\n distanceUnitValue,\r\n this.state.isLocationDisabled\r\n );\r\n\r\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\r\n if (orgUnitLocations) {\r\n const defaultStoreId =\r\n orgUnitLocations &&\r\n orgUnitLocations[0]?.OrgUnitAvailability &&\r\n orgUnitLocations[0].OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber;\r\n // Todo: Need to handle promises in a proper way\r\n // tslint:disable-next-line:no-floating-promises\r\n await this._setPreferredStore(defaultStoreId);\r\n }\r\n } catch (error) {\r\n console.error('error', error);\r\n }\r\n }\r\n };\r\n\r\n // Method to get store locations based on current zipCode, as per max-mind's geoLocation\r\n private _getCurrentLocationStores = async (): Promise => {\r\n const {\r\n context: { actionContext },\r\n config: {\r\n maxNoOfFranchise,\r\n lookupRadius\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n const zipCode = getGeoLocationZipCode(actionContext);\r\n if (!this.props.app.config.enableSociLocations) {\r\n if (!zipCode || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n try {\r\n await this._searchTermChanged(zipCode);\r\n const location = await storeSelectorStateManager.geoLocate(\r\n zipCode.trim() !== '' ? zipCode : '0',\r\n actionContext\r\n );\r\n await this._updateLocations(location?.latitude || 0, location?.longitude || 0);\r\n } catch (error) {\r\n console.error('error _getCurrentLocationStores', error);\r\n }\r\n\r\n } else {\r\n try {\r\n await this._searchTermChanged(zipCode!);\r\n void getSociData(new GetSociDataInput(lookupRadius, maxNoOfFranchise, zipCode), this.props.context.actionContext).then((data: any) => {\r\n if (data) {\r\n const sociAvailableStores = data.response.collection && data.response.collection.filter((store: { opening_status: string; }) => store?.opening_status !== 'permanently_closed') || [];\r\n const sortedLocations = this._sortSociLocations(sociAvailableStores);\r\n this.setState({ sociLocationsList: sortedLocations });\r\n this._setCookie({ name: 'zip_code', value: zipCode }, 24 * 365);\r\n }\r\n });\r\n } catch (error) {\r\n console.error('Soci API error', Error);\r\n }\r\n }\r\n };\r\n // VSI Customization - ends\r\n\r\n private _onSetPreferredSociStore = async (store: any | undefined): Promise => {\r\n const {\r\n context: {\r\n actionContext,\r\n actionContext: {\r\n requestContext: { cookies }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeSelectorState: { result: storeSelectorState }\r\n }\r\n } = this.props;\r\n\r\n this._setCookie({ name: 'preferredStoreState', value: store?.state || '' }, 24 * 365);\r\n const zip_Code = this.state.searchTerm ? this.state.searchTerm : getZipCode(actionContext);\r\n // On setting preferred store, current search zipCode will be used as delivery zipCode\r\n this._setCookie({ name: 'zip_code', value: zip_Code || '' }, 24 * 365);\r\n // update the state to trigger zipcode change in product-compare\r\n this.props.context.actionContext.update(new ProductCompareBuyboxStateSharing(zip_Code), { zipcode: zip_Code });\r\n const projectMetaSoci = store?.project_meta ? JSON.parse(store?.project_meta) : '';\r\n const sociStore = projectMetaSoci ? projectMetaSoci['Corporate ID'] : '';\r\n const sociStoreID = sociStore && (sociStore?.length > 6 ? sociStore : `000000${sociStore}`?.slice(-6)) || '';\r\n // @ts-ignore\r\n const selectedStore = localStorage.getItem('_mfrm__prefferedStore_') ? JSON.parse(localStorage.getItem('_mfrm__prefferedStore_')) : null;\r\n localStorage.setItem('_mfrm__prefferedStore_', JSON.stringify({ ...store, OrgUnitNumber: sociStoreID, Zip: store.postalcode }));\r\n this.props.context.actionContext.update(new StoreSelectorStateInput(), {\r\n ...storeSelectorState,\r\n isSociLocationsEnabled: this.props.app.config.enableSociLocations,\r\n sociPreferredStore: { ...store, OrgUnitNumber: sociStoreID, Zip: store.postalcode }\r\n });\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n if (selectedStore && sociStoreID !== selectedStore?.StoreId) {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: 'store-locator-slideout-change-my-store',\r\n event_category: 'store locator slideout',\r\n event_action: 'change my store',\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n }\r\n if (sociStoreID && selectedStore === null) {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: 'store-locator-slideout-make-my-store',\r\n event_category: 'store locator slideout',\r\n event_action: 'make my store',\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n }\r\n await storeSelectorStateManager?.setPreferredStoreLocation(\r\n sociStoreID,\r\n store?.name,\r\n cookies?.isConsentGiven(),\r\n store?.latitude,\r\n store?.longitude\r\n );\r\n\r\n Msdyn365.msdyn365Commerce.isBrowser && document.body.classList.remove('modal-store-locator-toggle');\r\n Msdyn365.msdyn365Commerce.isBrowser && document.body.classList.remove('modal-store-locator-toggle-pdp');\r\n await storeSelectorStateManager?.closeDialog();\r\n };\r\n\r\n private _onRemovePreferredSociStore = async (): Promise => {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { cookies }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeSelectorState: { result: storeSelectorState }\r\n }\r\n } = this.props;\r\n this.props.context.actionContext.update(new StoreSelectorStateInput(), {\r\n ...storeSelectorState,\r\n sociPreferredStore: {}\r\n });\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n await storeSelectorStateManager.clearPreferredStore(cookies?.isConsentGiven());\r\n localStorage.removeItem('_mfrm__prefferedStore_');\r\n void this._getAndUpdateStoreLocation();\r\n };\r\n}\r\n\r\nexport default StoreSelector;","/*---------------------------------------------------------------------------------------------\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\nimport { IStoreSelectorViewProps } from './mfrm-store-selector';\r\n\r\nconst StoreSelectorView: React.FC = props => {\r\n const {\r\n BodyContainerProps,\r\n HeaderContainerProps,\r\n HeaderProps,\r\n ModuleProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n sociLocationsList,\r\n franchiseList,\r\n noLocationsMessage,\r\n // VSI Customization - starts\r\n banner,\r\n currentLocation,\r\n seeAllStores,\r\n isError,\r\n config: {\r\n enableFranchise\r\n }\r\n // terms\r\n // VSI Customization - ends\r\n } = props;\r\n let noLocationsMessageDisplay: boolean | undefined = false;\r\n if (enableFranchise) {\r\n noLocationsMessageDisplay = (!locationsList || isError) && (!franchiseList);\r\n } else {\r\n noLocationsMessageDisplay = (!locationsList || isError);\r\n }\r\n return (\r\n \r\n {HeaderProps}\r\n \r\n {/* VSI Customization - starts */}\r\n {currentLocation}\r\n {locationsMessage}\r\n {search}\r\n {banner}\r\n {_renderStoreLocations(state.isSearchInProgress, noLocationsMessageDisplay!, enableFranchise!, props.app.config.enableSociLocations, spinner, noLocationsMessage, locationsList, franchiseList)}\r\n {_renderSociStoreLocations(state.isSociLocationsInProgress, spinner, props.app.config.enableSociLocations, sociLocationsList, noLocationsMessage)}\r\n {seeAllStores}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderStoreLocations = (\r\n isSearchInProgress: boolean,\r\n noLocationsMessageDisplay: boolean,\r\n enableFranchise: boolean,\r\n enableSociLocations: boolean,\r\n spinner: React.ReactNode,\r\n noLocationsMessage: React.ReactNode,\r\n locationsList: React.ReactNode,\r\n franchiseList: React.ReactNode\r\n): JSX.Element | undefined => {\r\n\r\n if (!enableSociLocations) {\r\n return (\r\n <>\r\n {isSearchInProgress ? spinner : <>{noLocationsMessageDisplay ? noLocationsMessage : locationsList ? locationsList : null}}\r\n {enableFranchise && franchiseList}\r\n );\r\n } else {\r\n return undefined;\r\n }\r\n};\r\n\r\nconst _renderSociStoreLocations = (\r\n isSearchInProgress: boolean,\r\n spinner: React.ReactNode,\r\n enableSociLocations: boolean | undefined,\r\n sociLocationsList: any,\r\n noLocationsMessage: React.ReactNode\r\n): JSX.Element | undefined => {\r\n if (enableSociLocations) {\r\n return (<>{isSearchInProgress ? spinner : sociLocationsList.props.locations.length !== 0 ? sociLocationsList : noLocationsMessage});\r\n } else {\r\n return undefined;\r\n }\r\n};\r\n\r\nexport default StoreSelectorView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['mfrm-store-selector'] = {\n c: () => require('partner/modules/mfrm-store-selector/mfrm-store-selector.tsx'),\n $type: 'contentModule',\n da: [{name:'availabilitiesWithHours', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby', runOn: 1},{name:'franchiseLocations', path:'data-actions/get-franchise-data.action', runOn: 1},{name:'getSociData', path:'actions/get-soci-data.action', runOn: 0},{name:'storeLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information', runOn: 1},{name:'storeSelectorState', path:'data-actions/store-selector-state-data-action', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'mfrm-store-selector',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mfrm-store-selector'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-soci-data.action';\n let dataAction = require('partner/actions/get-soci-data.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/get-franchise-data.action';\n let dataAction = require('partner/data-actions/get-franchise-data.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/store-selector-state-data-action';\n let dataAction = require('partner/data-actions/store-selector-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|mfrm-store-selector|mfrm-store-selector'] = {\n c: () => require('partner/modules/mfrm-store-selector/mfrm-store-selector.view.tsx'),\n cn: '__local__-__local__-mfrm-store-selector'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n if (window) {\n const currentWindowAPI = window.mapAPIReady;\n window.mapAPIReady = () => {\n if (currentWindowAPI) {\n currentWindowAPI();\n }\n this.isMapApiLoaded = true;\n };\n }\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\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 { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["getZipCode","ctx","_ctx$requestContext$g","_ctx$requestContext$g2","geolocationZipCode","requestContext","geoLocation","zipCode","res","cookie","Cookies","zipcode","get","undefined","getGeoLocationZipCode","_ctx$requestContext$g3","_ctx$requestContext$g4","GetSociDataInput","constructor","searchradius","searchLimit","getCacheKey","this","getCacheObjectType","dataCacheType","Msdyn365","action","async","input","_input$searchLimit","_input$searchradius$t","_input$searchradius","geoLoc","test","response","axios","toString","headers","data","e","console","log","id","args","_args$config","_args$config$maxNoOfF","_args$config2","config","lookupRadius","maxNoOfFranchise","ProductCompareBuyboxStateSharing","__decorate","observable","GetFranchiseData","_Latitude","_Longitude","_Radius","super","shouldCacheOutput","cacheObjectType","cacheKey","Latitude","Longitude","Radius","getFranchiseInput","inputData","getFranchise","jsonUrl","app","sociFranchiseDataUrl","franchiseDataJson","franchiseStores","map","franchise","miles","_calculateDistance","latitude1","longitude1","latitude2","longitude2","long1","Math","PI","long2","lat1","lat2","dlon","dlat","a","pow","sin","cos","asin","sqrt","lat","long","push","StoreSelectorStateInput","storeSelectorStateAction","isModalOpen","prefferedStore","MsDyn365","isBrowser","localStorage","getItem","JSON","parse","createObservableDataAction","secondsToTime","seconds","hours","floor","ampm","divisorForMinutes","getTimeZoneAbbr","timeZone","StoreSelectorLocationLineItemComponentActions","onLocationSelected","props","handlers","onSelected","location","onSetAsPreferredStore","OrgUnitNumber","onRemovePreferredStore","extractPhoneNumber","contacts","allPhoneContacts","filter","contact","ContactTypeValue","IsPrivate","length","primaryPhoneContact","find","IsPrimary","Locator","StoreSelectorLocationLineItemComponent","_location$ExtensionPr6","_resources$selectLoca","hideStockStatus","isCurrentLocation","isInStock","resources","stockStatusLabel","storeLocatorView","index","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","telemetryContent","storeName","ExtensionProperties","x","Key","Value","StringValue","OrgUnitName","storeLocatorContext","Contacts","url","storeLocatorUrl","Address","distanceAsString","buildDistanceString","distance","preferredDistanceUnit","Distance","storeAddress","storeAddressLine1","Street","storeAddressLine2","City","State","Zip","phoneNumber","resourceLabel","inStock","outOfStock","stockLabel","stockText","canSelectLocation","pickupInStoreButtonText","selectLocation","pickupInStoreAriaLabel","selectLocationAriaLabelFormat","replace","isPreferredStore","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","attributes","getTelemetryAttributes","contentAction","etext","PreferredStore","preferredStoreAttr","RemovePreferredStore","RemovePreferredStoreAttr","React","className","storeHoursHeader","renderStoreHours","_location$ExtensionPr","_location$ExtensionPr2","_location$ExtensionPr3","_location$ExtensionPr4","_location$ExtensionPr5","isClosedToday","BooleanValue","isClosed","startTime","IntegerValue","endTime","timeZoneAbbr","closedText","storeOpenAtHours","storeCloseAtHours","contactInfoHeader","availabilityInfoHeader","currentLocation","Object","assign","onClick","preferredStoreAriaLabel","removePreferredStore","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStore","setAsPreferredStoreText","href","target","_storeDetailsTracking","window","pageURL","pathname","utag","link","event","event_category","event_action","event_label","event_noninteraction","viewStoreDetails","StoreSelectorLocationLines","_scrollIntoView","selectedLocationDiv","selectedLocationRef","current","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","ItemAvailabilities","enableOutOfStockCheck","AvailableQuantity","_stockInventoryLabel","availabilityWithHours","ProductInventoryInformation","i","_availabilityWithHour","OrgUnitAvailability","OrgUnitLocation","InventoryLocationId","InventLocationId","StockLevelLabel","_mapResources","contactText","timeText","availabilityText","storeHoursClosedText","outOfStockText","inStockText","selectedStoreLocationText","selectStoreText","selectStoreAriaFormatText","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","viewStoreDetailsText","componentDidUpdate","prevProps","selectedStoreLocationId","componentDidMount","locations","_stores","_sortStores","render","classnames","enableFranchise","show","displayList","role","slice","store","_renderStoreLocation","_store$OrgUnitAvailab","_store$OrgUnitAvailab2","orgUnitLocation","selected","key","ref","storeHours","StoreHours","stores","value","_value$OrgUnitAvailab","observer","StoreSelectorSearchForm","searchBoxRef","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","preventDefault","_this$searchBoxRef$cu","blur","performSearch","isErrorChanged","state","isError","SearchStore","storeSearchAttributes","ShowAllStore","ToggleMapView","toggleMapViewAttributes","searchButtonAriaLabel","searchInputAriaLabel","searchButtonText","viewListText","viewMapText","searchLabelText","isMapDisabled","locatorView","onToggleListMapViewState","toggleButtonText","name","autoComplete","onSubmit","type","onChange","maxLength","color","StoreSelectorEmptyMessage","_ref","text","errorLocationsText","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","_ref2","onTextChange","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","editProps","StoreSelectorFoundLocationsMessage","_ref3","searchRadius","isSeeAllStore","_resources$storeAllCo","_storeCountMessage$re","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","StoreSelectorSeeAllStores","showAllStoreAttributes","_showAllStoresTracking","showAllStores","onShowAllStores","enableOOBShowAllStores","showAllStoresExternalLink","Button","seeAllStoresText","SociLocationLines","_JSON$parse","isFranchise","project_meta","Division","projectMetaSoci","bho","dayjs","day","opensAt","format","closedAt","isStoreOpen","hour","_distance","address1","address2","city","postalcode","website_url","mode","searchRadiusUnit","style","StoreSelector","handleLinkTextChange","termsOfServiceLink","handleHeadingChange","heading","_setPreferredStore","_this$props$data$stor","_preferedStore$OrgUni","_preferedStore$OrgUni2","_preferedStore$OrgUni3","_preferedStore$OrgUni4","_preferedStore$OrgUni5","_preferedStore$OrgUni6","_preferedStore$OrgUni7","storeId","context","actionContext","cookies","storeSelectorStateManager","result","storeLocations","availabilitiesWithHours","modeEnum","pickupInStore","findStores","preferedStore","selectedStore","storeSelectorState","update","_objectSpread","setItem","stringify","_setCookie","zip_Code","searchTerm","StoreId","setPreferredStoreLocation","isConsentGiven","document","body","classList","remove","closeDialog","_removePreferredStore","clearPreferredStore","removeItem","_setSelectedStore","setSelectedStoreLocationId","_sortSociLocations","_localStorage","preferredStore","parsedPreferredStore","selectedStoreIndex","findIndex","splice","unshift","Set","_performSearch","setState","isSearchInProgress","isSeeAllStoreValue","isFranchiseSearchInProgress","isSociLocationsInProgress","enableSociLocations","getSociData","then","sociAvailableStores","collection","opening_status","sortedLocations","sociLocationsList","error","Error","geoLocate","trim","_updateLocations","latitude","longitude","_searchTermChanged","_isErrorChanged","_getAndUpdateStoreLocation","stylyEnum","dialog","inline","isDialogOpen","_closeDialog","_setOrgUnitStoreInformation","telemetry","styleDefault","setOrgUnitStoreInformation","showMapViewLink","isDialog","orgUnitStoreInformation","Promise","resolve","catch","message","debug","radius","calRadius","distanceUnitValue","kilometers","modeDefault","getFranchiseInputInput","franchiseStore","maxFranchises","franchiseList","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","product","GetFullAvailableInventoryNearbyInput","RecordId","getFullAvailableInventoryNearby","warning","_onOrgUnitLocationSelected","_setDefaultStore","_onSetPreferredSociStore","_orgUnitLocations$","_orgUnitLocations$0$O","defaultStoreId","_getCurrentLocationStores","sociStore","sociStoreID","isSociLocationsEnabled","sociPreferredStore","_onRemovePreferredSociStore","getTelemetryObject","request","telemetryPageName","friendlyName","_storeSelectorStateMa","defaultZipCode","reaction","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","shouldComponentUpdate","nextProps","_storeSelectorStateMa2","showBanner","appConfig","inlineView","hideInventory","listMapViewState","sociPrefferedStore","showLocationView","isMapModuleLoaded","StoreSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","viewProps","ModuleProps","tag","Modal","moduleProps","classname","autoFocus","fade","isOpen","horizontalPosition","verticalPosition","modalClassName","toggle","openDialog","HeaderContainerProps","ModalHeader","HeaderProps","onEdit","FooterContainerProps","ModalFooter","BodyContainerProps","ModalBody","locationsMessage","search","spinner","sort","n1","n2","_franchise$miles","address_line_1","toFixed","address_line_2","state_province","postal_code","float","locationsList","outOfStockThreshold","enableStockCheck","noLocationsMessage","terms","headerText","seeAllStores","banner","_renderBannerText","_renderCurrentLocation","callbacks","selectedLocation","getAndUpdateUserLocation","onSuggestionSelected","setPreferredStore","setSelectedStore","renderView","deltaHoursFromToday","now","Date","setHours","getHours","set","expires","isEssential","bannerText","_renderStoreLocations","noLocationsMessageDisplay","_renderSociStoreLocations","Module","Node","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","BaseStoreSelectorStateManager","displayMap","preferredStoreLocalStorageKey","_readFromToCookie","storeInfo","_unused","_context","writeToCookie","arguments","StoreName","_writeToCookie","lastInlineShownStoreInfo","_removeCookie","cookieValue","computed","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","channel","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","query","encodeURI","geolocationApiUrl","requestUrl","script","createElement","setAttribute","resourceSets","point","coordinates","appendChild","_document","StringExtensions","isNullOrEmpty","getElementById","currentWindowAPI","mapAPIReady","isMapApiLoaded","lang","market","reject","_document2","_document3","defer","src","addEventListener","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","module","exports","ReactDOM"],"sourceRoot":""}