{"version":3,"sources":["webpack:///./src/modules/citta-store-selector/citta-store-selector.props.autogenerated.ts?5a30","webpack:///./src/modules/citta-store-selector/components/pickup-option-list.tsx?63e9","webpack:///./src/modules/citta-store-selector/components/citta-store-selector-location-line-item/date-time-helpers.ts?ea4e","webpack:///./src/modules/citta-store-selector/components/citta-store-selector-location-line-item/citta-store-selector-location-line-item.components.tsx?d126","webpack:///./src/modules/citta-store-selector/components/citta-store-selector-location-lines.tsx?07c0","webpack:///./src/modules/citta-store-selector/components/citta-store-selector-search-form.tsx?5919","webpack:///./src/modules/citta-store-selector/components/citta-store-selector-small-components.tsx?63c4","webpack:///./src/modules/citta-store-selector/citta-store-selector.tsx?58c3","webpack:///./src/modules/citta-store-selector/citta-store-selector.view.tsx?1d95"],"names":["mode","searchRadiusUnit","style","PickUpOptionList","React","constructor","props","super","_onSelect","async","e","preventDefault","deliveryCode","currentTarget","getAttribute","length","this","onChange","_rendeDeliveryOptions","bind","_pickupListOptionMenu","state","expandSiteOptions","render","pickupListOptionMenuText","pickupmodeList","className","onClick","role","ref","map","delivery","key","Code","tabIndex","Description","expandSiteOptionsState","setState","secondsToTime","seconds","undefined","hours","Math","floor","ampm","divisorForMinutes","getShortTimeString","day","resources","days","monday","tuesday","wednesday","thursday","friday","saturday","sunday","getFullTimeString","mondayFull","tuesdayFull","wednesdayFull","thursdayFull","fridayFull","saturdayFull","sundayFull","buildHoursDisplayInfo","startDay","endDay","hoursInfo","startDayShort","startDayFull","endDayShort","endDayFull","timeRange","shouldMergeLines","firstLine","secondLine","isClosed","openTime","closeTime","getStoreHoursData","storeHours","dateForLookup","get","buildStoreHoursString","closedText","StoreSelectorLocationLineItemComponentActions","onLocationSelected","deliveryMode","handlers","onSelected","location","onSetAsPreferredStore","OrgUnitNumber","onRemovePreferredStore","renderStoreHours","RegularStoreHours","storeHoursList","buildStoreHours","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","push","displayTime","title","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","pickup","find","_delivery","StoreSelectorLocationLineItemComponent","hideStockStatus","isCurrentLocation","isInStock","stockStatusLabel","storeLocatorView","index","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","telemetryContent","productPickUpOptionList","storeName","OrgUnitName","distanceAsString","buildDistanceString","distance","preferredDistanceUnit","Distance","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","filter","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","resourceLabel","inStock","outOfStock","stockLabel","stockText","canSelectLocation","pickupInStoreButtonText","selectLocation","pickupInStoreAriaLabel","selectLocationAriaLabelFormat","replace","isPreferredStore","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","attributes","getTelemetryAttributes","contentAction","etext","PreferredStore","preferredStoreAttr","RemovePreferredStore","RemovePreferredStoreAttr","deliveryOptionList","contactInfoHeader","storeHoursHeader","availabilityInfoHeader","currentLocation","Object","assign","preferredStoreAriaLabel","removePreferredStore","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStore","setAsPreferredStoreText","StoreSelectorLocationLines","_scrollIntoView","selectedLocationDiv","selectedLocationRef","current","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","ItemAvailabilities","outOfStockThreshold","enableOutOfStockCheck","AvailableQuantity","_isProductLowInStock","lowInStockThreshold","_stockInventoryLabel","inStockText","outOfStockText","_mapResources","contactText","timeText","availabilityText","storeHoursClosedText","lowInStock","isLowInStockText","selectedStoreLocationText","selectStoreText","selectStoreAriaFormatText","storeHoursMondayText","storeHoursTuesdayText","storeHoursWednesdayText","storeHoursThursdayText","storeHoursFridayText","storeHoursSaturdayText","storeHoursSundayText","storeHoursMondayFullText","storeHoursTuesdayFullText","storeHoursWednesdayFullText","storeHoursThursdayFullText","storeHoursFridayFullText","storeHoursSaturdayFullText","storeHoursSundayFullText","componentDidUpdate","prevProps","selectedStoreLocationId","componentDidMount","locations","_stores","_sortStores","classnames","show","displayList","store","_renderStoreLocation","_store$OrgUnitAvailab","_store$OrgUnitAvailab2","_store$OrgUnitAvailab3","orgUnitLocation","OrgUnitAvailability","OrgUnitLocation","deliveryOptions","OrgUnitPickUpDeliveryModes","selected","StoreHours","isLowInStock","toString","DeliveryOptions","productPickUpDeliveryOptions","stores","value","_value$OrgUnitAvailab","__decorate","observable","observer","StoreSelectorSearchForm","searchBoxRef","_searchTextChanged","inputValue","target","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","toggleMapViewAttributes","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","id","isMapDisabled","showAllStores","locatorView","onShowAllStores","onToggleListMapViewState","toggleButtonText","name","autoComplete","onSubmit","type","searchInputAriaLabel","placeholder","color","StoreSelectorEmptyMessage","_ref","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","_ref2","link","requestContext","onTextChange","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","Msdyn365","editProps","StoreSelectorFoundLocationsMessage","_ref3","searchRadius","isSeeAllStore","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","StoreSelector","handleLinkTextChange","event","config","termsOfServiceLink","handleHeadingChange","heading","_attachMapAutoSuggest","autoSuggestOptions","context","telemetry","actionContext","channel","data","storeSelectorStateManager","result","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","_objectSpread","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_setPreferredStore","_preferedStore$OrgUni","_preferedStore$OrgUni2","_preferedStore$OrgUni3","storeId","cookies","storeLocations","availabilitiesWithHours","modeEnum","pickupInStore","findStores","preferedStore","setPreferredStoreLocation","isConsentGiven","Latitude","Longitude","_removePreferredStore","clearPreferredStore","_setSelectedStore","setSelectedStoreLocationId","searchTerm","isSearchInProgress","isSeeAllStoreValue","geoLocate","trim","_updateLocations","latitude","longitude","_getAndUpdateStoreLocation","styleEnum","dialog","inline","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","error","PERMISSION_DENIED","timeout","_closeDialog","closeDialog","_setOrgUnitStoreInformation","styleDefault","setOrgUnitStoreInformation","showMapViewLink","isDialog","orgUnitStoreInformation","Promise","resolve","catch","message","radius","lookupRadius","calRadius","distanceUnitValue","kilometers","modeDefault","preferredStore","lat","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","product","input","GetFullAvailableInventoryNearbyInput","RecordId","getFullAvailableInventoryNearby","warning","_onOrgUnitLocationSelected","getTelemetryObject","request","telemetryPageName","friendlyName","_this$props$data$stor4","autoSuggestionEnabled","setTimeout","reaction","_this$props$data$stor2","_this$props$data$stor3","BingMapsEnabled","_this$props$data$stor5","_this$props$context","_this$props$context2","loadMapApi","lang","market","DefaultLanguageId","then","_this$props$data$stor6","_this$props$data$stor7","_this$props$context3","_this$props$context4","when","_this$props$data$stor8","_this$props$data$stor9","_this$props$data$stor10","isSameContext","shouldComponentUpdate","nextProps","_storeSelectorStateMa","_storeSelectorStateMa2","_storeSelectorStateMa3","app","appConfig","productAttributes","threshhold","attribute","Name","IntegerValue","inlineView","hideInventory","listMapViewState","showLocationView","isMapModuleLoaded","StoreSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","viewProps","ModuleProps","tag","Modal","moduleProps","classname","autoFocus","fade","isOpen","onClosed","horizontalPosition","verticalPosition","toggle","HeaderContainerProps","ModalHeader","HeaderProps","text","onEdit","FooterContainerProps","ModalFooter","BodyContainerProps","ModalBody","locationsMessage","search","spinner","locationsList","enableStockCheck","StoreId","noLocationsMessage","terms","headerText","callbacks","selectedLocation","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","setSelectedStore","renderView","StoreSelectorView","Module","Node"],"mappings":"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","file":"static/js/69.b7c4072e0c59055d28ca.chunk.js","sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ICittaStoreSelector 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 ICittaStoreSelectorConfig 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 autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n className?: string;\r\n}\r\n\r\nexport interface ICittaStoreSelectorResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n outOfStockText: string;\r\n inStockText: string;\r\n isLowInStockText: 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}\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 IAutoSuggestOptionsData {\r\n maxResults?: number;\r\n}\r\n\r\nexport interface ICittaStoreSelectorProps extends Msdyn365.IModule {\r\n resources: ICittaStoreSelectorResources;\r\n config: ICittaStoreSelectorConfig;\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/* eslint-disable no-duplicate-imports */\r\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\r\nexport interface IPickUpOptionListProps {\r\n pickupListOptionMenuText: string;\r\n pickupmodeList?: DeliveryOption[];\r\n onChange(deliveryCode: string): Promise;\r\n}\r\n\r\nexport interface IPickOptionListState {\r\n expandSiteOptions: boolean;\r\n}\r\n\r\n/**\r\n * Simple Pickup option dropdown with Button to get menu option\r\n */\r\nexport class PickUpOptionList extends React.PureComponent {\r\n private _pickupListOptionMenu: React.RefObject;\r\n\r\n constructor(props: IPickUpOptionListProps) {\r\n super(props);\r\n this._rendeDeliveryOptions = this._rendeDeliveryOptions.bind(this);\r\n this._pickupListOptionMenu = React.createRef();\r\n this.state= {\r\n expandSiteOptions:false\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n pickupListOptionMenuText,\r\n pickupmodeList\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n {this.state.expandSiteOptions? : null}\r\n
\r\n );\r\n }\r\n\r\n private _rendeDeliveryOptions():void {\r\n const expandSiteOptionsState = this.state.expandSiteOptions;\r\n this.setState({\r\n expandSiteOptions: !expandSiteOptionsState\r\n });\r\n }\r\n\r\n private _onSelect = async (e: React.MouseEvent): Promise => {\r\n e.preventDefault();\r\n const deliveryCode = e.currentTarget.getAttribute('data-value');\r\n if(deliveryCode && deliveryCode.length > 0) {\r\n await this.props.onChange(deliveryCode);\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\n/* eslint-disable no-duplicate-imports */\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\ninterface 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\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\nconst 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\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport {\r\n DeliveryOption,\r\n OrgUnitContact,\r\n OrgUnitLocation,\r\n StoreHours\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {PickUpOptionList} from '../pickup-option-list';\r\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\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 lowInStock: string;\r\n\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}\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 isLowInStock?: boolean;\r\n isCurrentLocation?: boolean;\r\n\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 storePickUpOptionList?: DeliveryOption[];\r\n productPickUpOptionList?: DeliveryOption[];\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, deliveryMode?: string): 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, deliveryMode?: string): void {\r\n props.handlers.onSelected(props.location, deliveryMode);\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 = (storeHours: StoreHours | undefined, location: OrgUnitLocation, resources: IStoreSelectorLocationLineItemResources): JSX.Element | null => {\r\n // First, use the store hours. This will allow listing day by day houts\r\n if (storeHours && storeHours.RegularStoreHours) {\r\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\r\n\r\n return (\r\n
\r\n {storeHoursList.map(displayTime => (\r\n
\r\n {displayTime.endDayShort ? (\r\n
\r\n {displayTime.startDayShort}–\r\n {displayTime.endDayShort}\r\n
\r\n ) : (\r\n
\r\n {displayTime.startDayShort}\r\n
\r\n )}\r\n
{displayTime.timeRange}
\r\n
\r\n ))}\r\n
\r\n );\r\n } else {\r\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\r\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\r\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\r\n\r\n return (\r\n
\r\n {storeOpenFrom}-{storeOpenTo}\r\n
\r\n );\r\n }\r\n};\r\n\r\nconst buildDistanceString = (distance: number | undefined, preferredDistanceUnit: string, isLocationDisabled?: boolean): string | undefined => {\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < 1) {\r\n return `(<1 ${preferredDistanceUnit})`;\r\n } else {\r\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\r\n }\r\n};\r\n\r\nconst 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: max-func-body-length\r\nconst StoreSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\r\n const onClick = () => StoreSelectorLocationLineItemComponentActions.onLocationSelected(props);\r\n\r\n const onChange = async (deliveryCode: string): Promise => {\r\n StoreSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\r\n };\r\n\r\n const {\r\n hideStockStatus,\r\n isCurrentLocation,\r\n isInStock,\r\n //isLowInStock,\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 storePickUpOptionList,\r\n productPickUpOptionList\r\n } = props;\r\n\r\n const storeName: string | undefined = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\r\n const storeAddress: string | undefined = location.Address;\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 deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n\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 {distanceAsString ? {distanceAsString} : false}\r\n
\r\n
\r\n
\r\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

\r\n {stockText &&

{stockText}

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

{resources.currentLocation}

\r\n ) : canSelectLocation ?\r\n deliveryOptionList.length === 0 ? (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n ): \r\n : (\r\n false\r\n )\r\n }\r\n
\r\n }\r\n {\r\n isPreferredStoreEnabled ?\r\n isPreferredStore ?\r\n \r\n : \r\n : null\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst matchDeliveryOptions = (productdeliveryOptions: DeliveryOption[] | undefined,storePickUpOptionList: DeliveryOption[] | undefined): DeliveryOption[] => {\r\n const deliveryOption: DeliveryOption[] = [];\r\n productdeliveryOptions?.map(delivery => {\r\n const pickup =(storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code));\r\n if(pickup) {\r\n deliveryOption.push(pickup);\r\n }\r\n });\r\n\r\n return deliveryOption;\r\n };\r\n\r\nexport const StoreSelectorLocationLineItemComponent = StoreSelectorLocationLineItem as (props: IStoreSelectorLocationLineItemProps) => JSX.Element;","/*---------------------------------------------------------------------------------------------\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/* eslint-disable no-duplicate-imports */\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { DeliveryOption, 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 { ICittaStoreSelectorResources } from '../citta-store-selector.props.autogenerated';\r\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './citta-store-selector-location-line-item';\r\n\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: IFullOrgUnitAvailability[];\r\n resources: ICittaStoreSelectorResources;\r\n preferredDistanceUnit?: string;\r\n\r\n alreadySelectedLocation?: OrgUnitLocation;\r\n outOfStockThreshold: number;\r\n lowInStockThreshold: 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 productPickUpDeliveryOptions?: DeliveryOption[];\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 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 {\r\n this._stores.map((store, index) => {\r\n return this._renderStoreLocation(store, index);\r\n })\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 const deliveryOptions = store?.OrgUnitPickUpDeliveryModes;\r\n \r\n const isInStock = this._isProductInStock(store?.OrgUnitAvailability?.ItemAvailabilities, this.props.outOfStockThreshold);\r\n const stockStatusLabel = this._stockInventoryLabel(isInStock, this.props.resources);\r\n\r\n return 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 private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\r\n const isPreferredStore = (value: IFullOrgUnitAvailability) => this.props.isPreferredStoreEnabled && this.props.preferredStoreLocationId &&\r\n value?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\r\n\r\n return [\r\n ...stores.filter(isPreferredStore),\r\n ...stores.filter(store => !isPreferredStore(store))\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 private _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\r\n (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\r\n\r\n private _isProductInStock = (ItemAvailabilities: ItemAvailability[] | undefined, outOfStockThreshold: number): 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 > outOfStockThreshold : false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n private _isProductLowInStock = (ItemAvailabilities: ItemAvailability[] | undefined, lowInStockThreshold: number): boolean => {\r\n if (!this.props.enableOutOfStockCheck) {\r\n return true;\r\n }\r\n \r\n\r\n if (ItemAvailabilities && ItemAvailabilities.length > 0) {\r\n\r\n return ItemAvailabilities[0].AvailableQuantity ? ItemAvailabilities[0].AvailableQuantity < lowInStockThreshold : false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n private _stockInventoryLabel = (isInStock: boolean, resources: ICittaStoreSelectorResources): string | undefined => {\r\n return isInStock ? resources.inStockText : resources.outOfStockText;\r\n // if (availabilityWithHours?.ProductInventoryInformation\r\n // && availabilityWithHours?.ProductInventoryInformation.length > 0) {\r\n // for(let i=0; i= outOfStockThreshold ? resources.inStockText : resources.outOfStockText;\r\n // } \r\n // }\r\n // }\r\n // }\r\n };\r\n\r\n private _mapResources = (resources: ICittaStoreSelectorResources): 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 lowInStock: resources.isLowInStockText,\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 };\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/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\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 };\r\n\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 productPickUpDeliveryOptions?: DeliveryOption[];\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}\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 showAllStoreAttributes: Msdyn365.IDictionary | undefined;\r\n private toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n constructor(props: IStoreSelectorSearchFormProps) {\r\n super(props);\r\n this.state = { value: '' };\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, searchPlaceholderText, seeAllStoresText, viewListText, viewMapText },\r\n id,\r\n value,\r\n isMapDisabled,\r\n showAllStores,\r\n displayList,\r\n locatorView,\r\n onShowAllStores,\r\n onToggleListMapViewState,\r\n } = this.props;\r\n\r\n const toggleButtonText = displayList ? viewMapText : viewListText;\r\n\r\n return (\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 this.searchBoxRef.current?.blur();\r\n await this.props.performSearch(this.props.value);\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/* eslint-disable no-duplicate-imports */\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\nimport { ICittaStoreSelectorResources, ITermsOfServiceLinkData } from '../citta-store-selector.props.autogenerated';\r\n\r\nexport interface IStoreSelectorEmptyMessageProps {\r\n resources: ICittaStoreSelectorResources;\r\n}\r\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources }) => (\r\n
\r\n

{resources.emptyLocationsText}

\r\n
\r\n);\r\n\r\nexport const StoreSelectorWaiting: React.FC = () => (\r\n
\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 }\r\n return null;\r\n};\r\n\r\nexport interface IStoreSelectorFoundLocationsMessage {\r\n resources: ICittaStoreSelectorResources;\r\n locations?: IFullOrgUnitAvailability[];\r\n searchRadius: number;\r\n preferredDistanceUnit: string;\r\n isSeeAllStore: boolean;\r\n}\r\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({ locations, searchRadius, resources, isSeeAllStore, preferredDistanceUnit }) => {\r\n if (locations) {\r\n const storeCountMessage = preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\r\n return (\r\n
\r\n { isSeeAllStore ? resources.storeAllCountMessage\r\n .replace('{count}', locations.length.toString()) : storeCountMessage\r\n .replace('{count}', locations.length.toString())\r\n .replace('{radius}', searchRadius.toString())\r\n }\r\n
\r\n );\r\n }\r\n\r\n return null;\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// tslint:disable:no-reference\r\n/// \r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { ICittaStoreSelectorData } from './citta-store-selector.data';\r\nimport { ICittaStoreSelectorProps, mode as modeEnum, searchRadiusUnit, style as styleEnum } from './citta-store-selector.props.autogenerated';\r\n\r\nimport {\r\n StoreSelectorEmptyMessage,\r\n StoreSelectorFoundLocationsMessage,\r\n StoreSelectorLocationLines,\r\n StoreSelectorSearchForm,\r\n StoreSelectorTermsOfService,\r\n StoreSelectorWaiting\r\n} from './components';\r\n\r\nimport { getFullAvailableInventoryNearby, GetFullAvailableInventoryNearbyInput, getOrgUnitLocationsByArea, GetOrgUnitLocationsByAreaInput, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Modal, ModalBody, ModalFooter, ModalHeader, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport classname from 'classnames';\r\nexport interface IStoreSelectorState {\r\n isSearchInProgress: boolean;\r\n searchTerm?: string;\r\n isSeeAllStoreValue: boolean;\r\n isLocationDisabled?: boolean;\r\n}\r\n\r\nexport interface IStoreSelectorViewProps extends ICittaStoreSelectorProps {\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 noLocationsMessage?: React.ReactNode;\r\n terms?: React.ReactNode;\r\n headerText?: React.ReactNode;\r\n\r\n callbacks: {\r\n closeDialog(): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n performSearch(searchTerm: string): Promise;\r\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\r\n getAndUpdateUserLocation(): Promise;\r\n attachMapAutoSuggest(): Promise;\r\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): 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 autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\r\n private telemetryContent: ITelemetryContent;\r\n\r\n constructor(props: ICittaStoreSelectorProps) {\r\n super(props);\r\n this.state = { isSearchInProgress: true, searchTerm: '',isSeeAllStoreValue:false};\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\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 telemetry,\r\n actionContext: {\r\n requestContext: {\r\n channel\r\n }\r\n }\r\n },\r\n config: {\r\n autoSuggestionEnabled\r\n }\r\n } = this.props;\r\n\r\n // Adding Timeout to make sure it loads the data based upon the preferred store.\r\n setTimeout(() => {\r\n this._getAndUpdateStoreLocation();\r\n }, 0);\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 if (context?.id === this.props.id) {\r\n this._getAndUpdateStoreLocation();\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result && this.props.data.storeSelectorStateManager.result.context && this.props.data.storeSelectorStateManager.result.context.id,\r\n async () => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (!context || (context?.id === this.props.id)) {\r\n await this._searchTermChanged('');\r\n this._getAndUpdateStoreLocation();\r\n }\r\n }\r\n );\r\n\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\r\n key: channel?.BingMapsApiKey,\r\n lang: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.DefaultLanguageId\r\n }).then().catch();\r\n }\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\r\n key: channel?.BingMapsApiKey,\r\n lang: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.DefaultLanguageId\r\n });\r\n }\r\n );\r\n\r\n if (autoSuggestionEnabled) {\r\n when(\r\n () => {\r\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\r\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\r\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\r\n return isMapApiLoaded && isDialogOpen && isSameContext;\r\n },\r\n async () => {\r\n setTimeout(async () => {\r\n await this._attachMapAutoSuggest();\r\n }, 0);\r\n }\r\n );\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: ICittaStoreSelectorProps): 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 },\r\n context: {\r\n telemetry,\r\n app: {\r\n config: appConfig\r\n },\r\n actionContext: {\r\n requestContext: {\r\n 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 productAttributes: { result: productAttributes}\r\n }\r\n } = this.props;\r\n\r\n //get max amount\r\n let outOfStockThreshold = appConfig.outOfStockThreshold;\r\n let lowInStockThreshold = 4;\r\n if (productAttributes && productAttributes.length) {\r\n const threshhold = productAttributes.find(attribute => attribute.Name === 'Availability In Store');\r\n if (threshhold) {\r\n outOfStockThreshold = threshhold.IntegerValue;\r\n }\r\n }\r\n\r\n const isMapDisabled = (channel && channel.BingMapsApiKey && channel.BingMapsEnabled) ? false : true;\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n const isDialogOpen: boolean = storeSelectorStateManager ? storeSelectorStateManager.isDialogOpen && (context?.id === this.props.id) : false;\r\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\r\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\r\n const inlineView = styleDefault === styleEnum.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 showLocationView = (context && (context.showMapViewLink === undefined || context.showMapViewLink)) && locatorView && storeSelectorStateManager?.isMapModuleLoaded;\r\n\r\n const StoreSelectorActions = {\r\n toggleListMapViewState(): void {\r\n storeSelectorStateManager?.toggleListMapViewState();\r\n }\r\n };\r\n\r\n 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 = this.props.config.searchRadiusUnit === searchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText ;\r\n\r\n const viewProps = {\r\n ...(this.props as ICittaStoreSelectorProps),\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, inlineView ? '': 'msc-modal-input-required'),\r\n autoFocus: true,\r\n fade: true,\r\n isOpen: isDialogOpen,\r\n onClosed: this._closeDialog,\r\n horizontalPosition: 'center',\r\n verticalPosition: 'center',\r\n toggle: this._closeDialog,\r\n onClick: this._closeDialog\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: this._closeDialog\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 onToggleListMapViewState={StoreSelectorActions.toggleListMapViewState}\r\n displayList={displayList}\r\n locatorView={showLocationView}\r\n productPickUpDeliveryOptions={storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n ),\r\n spinner: ,\r\n locationsList: ((availabilitiesWithHours && availabilitiesWithHours.length) || (storeLocations && storeLocations.length)) && (\r\n \r\n ),\r\n noLocationsMessage: ,\r\n terms: ,\r\n // Not being used in current context, we can use it here to pass more props.\r\n headerText: {heading ? heading : locatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText},\r\n\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 getAndUpdateUserLocation: () => { this._getAndUpdateStoreLocation(); return Promise.resolve(); },\r\n attachMapAutoSuggest: this._attachMapAutoSuggest,\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 }\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\r\n private _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n config: {\r\n autoSuggestOptions\r\n },\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: {\r\n channel\r\n }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\r\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\r\n callback: () => {\r\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\r\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\r\n this.autoSuggestManager.attachAutosuggest(`#ms-store-select__search-box_${this.props.id}`, `#ms-store-select__search-box-container_${this.props.id}`, this._onSuggestionSelected);\r\n },\r\n errorCallback: () => {\r\n if (telemetry) {\r\n telemetry.debug('Unable to attach map auto suggest.');\r\n }\r\n },\r\n credentials: channel?.BingMapsApiKey\r\n });\r\n }\r\n }\r\n\r\n private _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n const context = this.props.data.storeSelectorStateManager && this.props.data.storeSelectorStateManager.result &&\r\n this.props.data.storeSelectorStateManager.result?.context;\r\n if (context && (context?.id === this.props.id)) {\r\n await this._searchTermChanged(result.formattedSuggestion);\r\n await this._performSearch(result.formattedSuggestion);\r\n }\r\n }\r\n\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 requestContext: {\r\n cookies\r\n }\r\n }\r\n },\r\n config: {\r\n mode,\r\n },\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) { return; }\r\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\r\n\r\n let stores: IFullOrgUnitAvailability[];\r\n\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\r\n await storeSelectorStateManager.setPreferredStoreLocation(storeId, preferedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName, cookies?.isConsentGiven(),\r\n preferedStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude, preferedStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude);\r\n }\r\n\r\n private _removePreferredStore = async (): Promise => {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: {\r\n cookies\r\n }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) { return; }\r\n\r\n await storeSelectorStateManager.clearPreferredStore(cookies?.isConsentGiven());\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) { return; }\r\n\r\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\r\n }\r\n\r\n private _performSearch = async (searchTerm: string): Promise => {\r\n const {\r\n context: {\r\n actionContext\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 });\r\n\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\r\n this.setState({ isSearchInProgress: 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 private _getAndUpdateStoreLocation = (showAllStores?: boolean): void => {\r\n const {\r\n config: {\r\n style\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\r\n\r\n if (styleDefault !== styleEnum.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\r\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\r\n\r\n if (navigator && navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n async position => {\r\n if (showAllStores) {\r\n this.setState({ isSeeAllStoreValue: true });\r\n await this._searchTermChanged('');\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\r\n } else {\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\r\n }\r\n\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n async error => {\r\n // If the location setting is turned off\r\n if (error.PERMISSION_DENIED) {\r\n this.setState({ isLocationDisabled: true });\r\n if (showAllStores) {\r\n this.setState({ isSeeAllStoreValue: true });\r\n await this._searchTermChanged('');\r\n await this._updateLocations(void 0, void 0, 0);\r\n } else {\r\n await this._updateLocations();\r\n }\r\n }\r\n\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n { timeout: 2000 }\r\n );\r\n } else {\r\n this.setState({ isSearchInProgress: false });\r\n }\r\n }\r\n\r\n private _closeDialog = async (): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n this.setState({ searchTerm: '' });\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: {\r\n style\r\n },\r\n telemetry\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) { return; }\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 : styleEnum.dialog;\r\n await storeSelectorStateManager.setOrgUnitStoreInformation({\r\n id,\r\n showMapViewLink: context && context.showMapViewLink,\r\n isDialog: styleDefault === styleEnum.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 // tslint:disable-next-line: cyclomatic-complexity\r\n private _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\r\n const {\r\n telemetry,\r\n config: {\r\n mode,\r\n lookupRadius,\r\n style\r\n },\r\n context: {\r\n actionContext\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\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 let lat = this.state.searchTerm || !(preferredStore?.Latitude) ? latitude : preferredStore.Latitude;\r\n let long = this.state.searchTerm || !(preferredStore?.Longitude) ? longitude : preferredStore.Longitude;\r\n if (styleDefault === styleEnum.inline) {\r\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\r\n if (lastInlineStoreLocation && !this.state.searchTerm) {\r\n lat = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : lat;\r\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\r\n }\r\n await storeSelectorStateManager?.setLastInlineStoreInfo(lat, long);\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, deliveryMode?: string): 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, deliveryMode).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\r\nexport default StoreSelector;\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/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { IStoreSelectorViewProps } from './citta-store-selector';\r\n\r\nconst StoreSelectorView: React.FC = props => {\r\n const {\r\n BodyContainerProps,\r\n FooterContainerProps,\r\n HeaderContainerProps,\r\n HeaderProps,\r\n ModuleProps,\r\n // headerText,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n noLocationsMessage,\r\n terms } = props;\r\n\r\n return (\r\n \r\n \r\n {HeaderProps}\r\n \r\n \r\n {locationsMessage}\r\n {search}\r\n {state.isSearchInProgress ?\r\n spinner :\r\n <>\r\n {locationsList ? locationsList : noLocationsMessage}\r\n \r\n }\r\n \r\n \r\n {terms}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default StoreSelectorView;\r\n"],"sourceRoot":""}