{"version":3,"file":"static/js/029b991fe46312c6a2bb.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/actions/get-all-available-inventory-nearby.ts?4364","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/components/pickup-option-list.tsx?1ded","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/components/store-pickup-option-list.tsx?84e8","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/components/dobbies-buybox-store-selector-location-line-item/date-time-helpers.ts?2d72","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/components/dobbies-buybox-store-selector-location-line-item/dobbies-buybox-store-selector-location-line-item.components.tsx?c3f0","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/components/dobbies-buybox-store-selector-location-lines.tsx?f197","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/components/dobbies-buybox-store-selector-search-form.tsx?9a9f","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/components/dobbies-buybox-store-selector-small-components.tsx?f966","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/dobbies-buybox-store-selector.props.autogenerated.ts?179a","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/dobbies-buybox-store-selector.tsx?84b5","webpack://Dobbies.Commerce/./src/modules/dobbies-buybox-store-selector/dobbies-buybox-store-selector.view.tsx?0e24","webpack://Dobbies.Commerce/./src/themes/dobbies/actions/get-feature-state.override.action.ts?6984","webpack://Dobbies.Commerce/./src/themes/dobbies/actions/get-full-available-inventory-nearby.override.action.ts?8735","webpack://Dobbies.Commerce/./src/themes/dobbies/actions/utilities/product-inventory-information.ts?064d","webpack://Dobbies.Commerce/./lib/dobbies-buybox-store-selector/module-registration.js?0e80","webpack://Dobbies.Commerce/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://Dobbies.Commerce/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://Dobbies.Commerce/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport {\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 {\r\n ChannelDeliveryOption,\r\n FeatureState,\r\n DeliveryModeTypeFilter,\r\n ItemAvailability,\r\n OrgUnitAvailability,\r\n OrgUnitLocation,\r\n ProductWarehouseInventoryInformation,\r\n SearchArea,\r\n StoreHours\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getChannelDeliveryOptionsAsync,\r\n getOrgUnitLocationsByAreaAsync,\r\n getStoreHoursAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\r\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { IFullOrgUnitAvailability } from '../themes/dobbies/actions/utilities/full-org-unit-availability';\r\nimport { DeliveryMode, IProductInventoryInformation } from '../themes/dobbies/actions/utilities/product-inventory-information';\r\nimport { FeatureStateInput, getFeatureStateAction } from '../themes/dobbies/actions/get-feature-state.override.action';\r\nimport { createInventoryAvailabilitySearchCriteria, mapProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Get selected variant action input class.\r\n */\r\nexport class GetAllAvailableInventoryNearbyInput implements IActionInput {\r\n public latitude?: number;\r\n\r\n public longitude?: number;\r\n\r\n public radius?: number;\r\n\r\n public productId?: number;\r\n\r\n public DistanceUnitValue?: number;\r\n\r\n public IgnoreLocation?: boolean;\r\n\r\n public ExcludeLocations?: (number | undefined)[];\r\n\r\n constructor(\r\n _productId?: number,\r\n _latitude?: number,\r\n _longitude?: number,\r\n _radius?: number,\r\n _DistanceUnitValue?: number,\r\n _IgnoreLocation?: boolean,\r\n _ExcludeLocations?: (number | undefined)[]\r\n ) {\r\n this.productId = _productId;\r\n this.latitude = _latitude;\r\n this.longitude = _longitude;\r\n this.radius = _radius;\r\n this.DistanceUnitValue = _DistanceUnitValue;\r\n this.IgnoreLocation = _IgnoreLocation;\r\n this.ExcludeLocations = _ExcludeLocations;\r\n }\r\n\r\n public getCacheKey = () => 'GetFullAvailableInventoryNearbyInputCache';\r\n\r\n public getCacheObjectType = () => 'GetAllAvailableInventoryNearbyInput';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the getSelectedVariant data action.\r\n * @param inputData - The input data passed to the createInput method.\r\n * @returns GetAllAvailableInventoryNearbyInput - The action input.\r\n */\r\nexport const createGetFullAvailableInventoryNearbyInput = (\r\n inputData: ICreateActionContext>\r\n): GetAllAvailableInventoryNearbyInput => {\r\n return new GetAllAvailableInventoryNearbyInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail Feature State API and returns a list of feature with isEnabled flag.\r\n * @param context - The context.\r\n * @returns FeatureState - The feature state.\r\n */\r\nexport async function getFeatureState(context: IActionContext): Promise {\r\n return getFeatureStateAction(new FeatureStateInput(), context);\r\n}\r\n\r\n/**\r\n * Action method for the getSelectedVariant data aciton.\r\n * @param input - The action input class.\r\n * @param ctx - The action context.\r\n * @returns IFullOrgUnitAvailability - The full org unit availability.\r\n */\r\nexport async function getAllAvailableInventoryNearbyAction(\r\n input: GetAllAvailableInventoryNearbyInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // No valid product we want to return undefined so module knows there are no results yet\r\n if (!input.productId) {\r\n return undefined;\r\n }\r\n\r\n if (((!input.radius && input.radius !== 0) || !input.latitude || !input.longitude) && !input.IgnoreLocation) {\r\n // No valid location we want to return empty array so module can show no locations message\r\n return [];\r\n }\r\n\r\n const searchArea: SearchArea = {\r\n Latitude: input.latitude,\r\n Longitude: input.longitude,\r\n Radius: input.radius,\r\n DistanceUnitValue: input.DistanceUnitValue || 0 // 0 is miles\r\n };\r\n\r\n const featureState = await getFeatureState(ctx);\r\n const retailMulitplePickupMFeatureState = featureState?.find(\r\n item => item.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n )?.IsEnabled;\r\n const searchCriteria = createInventoryAvailabilitySearchCriteria(ctx, [input.productId], false, true, searchArea, DeliveryMode.pickup);\r\n return getEstimatedAvailabilityAsync({ callerContext: ctx }, searchCriteria)\r\n .then(async (productWarehouseInformation: ProductWarehouseInventoryInformation) => {\r\n // For store selector, inventory should always come from an individual store\r\n const productInventoryInformation = mapProductInventoryInformation(\r\n ctx,\r\n productWarehouseInformation.ProductWarehouseInventoryAvailabilities\r\n );\r\n return getOrgUnitLocationsByAreaAsync({ callerContext: ctx }, searchArea, DeliveryModeTypeFilter.None)\r\n .then(async (stores: OrgUnitLocation[]) => {\r\n // Constructing a store mapping based on the InventoryId.\r\n const storeMap = new Map();\r\n stores.forEach(store => {\r\n if (store.InventoryLocationId) {\r\n storeMap.set(store.InventoryLocationId, store);\r\n }\r\n });\r\n\r\n let locationDeliveryOptions: ChannelDeliveryOption[] | undefined = [];\r\n\r\n // If multiple pickup mode is enable then call getchanneldeliveryoption\r\n if (retailMulitplePickupMFeatureState) {\r\n const orgUnitChannel = stores.map(store => store.ChannelId);\r\n locationDeliveryOptions = await _getLocationPickUpDeliveryModes(orgUnitChannel, ctx);\r\n }\r\n\r\n const excludedStores = input.ExcludeLocations ?? [];\r\n const filteredStores = stores\r\n .filter(store => !excludedStores.includes(store.ChannelId))\r\n .sort((a, b) => a.OrgUnitName!.localeCompare(b.OrgUnitName!));\r\n const availabilityPromiseList = filteredStores.map(store => {\r\n const locationDeliveryOption = locationDeliveryOptions?.find(\r\n _channeldeliveryoption => _channeldeliveryoption.ChannelId === store.ChannelId\r\n );\r\n return _getAvailabilityWithHours(store, productInventoryInformation, storeMap, ctx, locationDeliveryOption);\r\n });\r\n\r\n return Promise.all(availabilityPromiseList);\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace('[GetFullAvailableInventoryNearby] error getting Available Inventory Nearby');\r\n ctx.trace(error.message);\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting Available Inventory Nearby');\r\n return [];\r\n });\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(\r\n '[GetFullAvailableInventoryNearby][getEstimatedAvailabilityAsync] error getting availability product warehouse information.'\r\n );\r\n ctx.trace(error.message);\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug(\r\n '[GetFullAvailableInventoryNearby][getEstimatedAvailabilityAsync] error getting availability product warehouse information.'\r\n );\r\n return [];\r\n });\r\n}\r\n\r\n/**\r\n * Action method that obtains the store information along with store hours and product availability.\r\n * @param orgUnitLocation - The org unit location.\r\n * @param productInventoryInformation - The product inventory information.\r\n * @param storeMap - A map that contains store information group by the inventory location id.\r\n * @param ctx The action context.\r\n * @param channelDeleiveryOptions - The channel delivery options.\r\n * @returns IFullOrgUnitAvailability - The full org unit availability.\r\n */\r\nasync function _getAvailabilityWithHours(\r\n orgUnitLocation: OrgUnitLocation,\r\n productInventoryInformation: IProductInventoryInformation[],\r\n storeMap: Map,\r\n ctx: IActionContext,\r\n channelDeleiveryOptions: ChannelDeliveryOption | undefined\r\n): Promise {\r\n if (!orgUnitLocation || !orgUnitLocation.OrgUnitNumber) {\r\n return { OrgUnitAvailability: undefined };\r\n }\r\n\r\n return getStoreHoursAsync({ callerContext: ctx }, orgUnitLocation.OrgUnitNumber)\r\n .then((hours: StoreHours) => {\r\n const itemAvailabilities: ItemAvailability[] = [];\r\n if (productInventoryInformation && storeMap) {\r\n productInventoryInformation.forEach(element => {\r\n if (\r\n element.InventLocationId &&\r\n storeMap.has(element.InventLocationId) &&\r\n element.InventLocationId === orgUnitLocation.InventoryLocationId\r\n ) {\r\n itemAvailabilities.push({ AvailableQuantity: element.ProductAvailableQuantity?.AvailableQuantity });\r\n }\r\n });\r\n }\r\n\r\n const availability: OrgUnitAvailability = {\r\n OrgUnitLocation: orgUnitLocation,\r\n ItemAvailabilities: itemAvailabilities\r\n };\r\n\r\n if (hours && !(hours instanceof Error)) {\r\n return {\r\n OrgUnitAvailability: availability,\r\n StoreHours: hours,\r\n ProductInventoryInformation: productInventoryInformation,\r\n OrgUnitPickUpDeliveryModes: channelDeleiveryOptions\r\n };\r\n }\r\n\r\n return {\r\n OrgUnitAvailability: availability,\r\n ProductInventoryInformation: productInventoryInformation,\r\n OrgUnitPickUpDeliveryModes: channelDeleiveryOptions\r\n };\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace('[GetFullAvailableInventoryNearby] error getting availability with hours');\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting availability with hours');\r\n return { OrgUnitAvailability: {} };\r\n });\r\n}\r\n\r\n/**\r\n * Action method that obtains the channel delivery option information.\r\n * @param channelCollection - The org unit channel Id list.\r\n * @param ctx - The action context.\r\n * @returns ChannelDeliveryOption - The channel delivery option collection.\r\n */\r\nasync function _getLocationPickUpDeliveryModes(\r\n channelCollection: (number | undefined)[],\r\n ctx: IActionContext\r\n): Promise {\r\n if (channelCollection?.length === 0 || channelCollection === undefined) {\r\n return undefined;\r\n }\r\n\r\n const channelIdList: number[] = [];\r\n channelCollection?.map(id => {\r\n if (id !== undefined) {\r\n channelIdList.push(id);\r\n }\r\n });\r\n\r\n // To get all channel pickup delivery mode filterOption should be 4\r\n return getChannelDeliveryOptionsAsync({ callerContext: ctx }, channelIdList, 4)\r\n .then((channelDeliveryOptions: ChannelDeliveryOption[]) => {\r\n if (channelDeliveryOptions && !(channelDeliveryOptions instanceof Error)) {\r\n return channelDeliveryOptions;\r\n }\r\n\r\n return undefined;\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(\r\n '[GetFullAvailableInventoryNearby][getChannelDeliveryOptionsAsync] error getting availability with channel delivery options'\r\n );\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug(\r\n '[GetFullAvailableInventoryNearby] [getChannelDeliveryOptionsAsync] error getting availability with channel delivery options'\r\n );\r\n return [];\r\n });\r\n}\r\n\r\n/**\r\n * The complete getAllAvailableInventoryNearbyAction data action.\r\n */\r\nexport const getFullAvailableInventoryNearbyActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-full-available-inventory-nearby',\r\n action: >getAllAvailableInventoryNearbyAction,\r\n input: createGetFullAvailableInventoryNearbyInput\r\n});\r\n\r\nexport default getFullAvailableInventoryNearbyActionDataAction;\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 { 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 readonly _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 { pickupListOptionMenuText, pickupmodeList } = this.props;\r\n\r\n return (\r\n
\r\n \r\n {this.state.expandSiteOptions ? (\r\n
    \r\n {pickupmodeList?.map((delivery: DeliveryOption) => {\r\n return (\r\n
  • \r\n \r\n \r\n {delivery.Description}\r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n ) : 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 readonly _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","/*!\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\n/* eslint-disable no-duplicate-imports */\r\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Store Pickup option list interface.\r\n */\r\nexport interface IStorePickUpOptionListProps {\r\n productPickupListOptionMenuText?: string;\r\n productPickupModeList?: DeliveryOption[];\r\n defaultOptionText?: string;\r\n onChange(deliveryCode: string): Promise;\r\n}\r\n\r\n/**\r\n * Store Pickup option state interface.\r\n */\r\nexport interface IStorePickOptionListState {\r\n isFilterExpanded: boolean;\r\n selectedPickupMode?: string;\r\n}\r\n\r\n/**\r\n * Simple Pickup option dropdown with Button to get menu option.\r\n */\r\nexport class StorePickUpOptionList extends React.PureComponent {\r\n private readonly _storePickupListOptionMenu: React.RefObject;\r\n\r\n public constructor(props: IStorePickUpOptionListProps) {\r\n super(props);\r\n this._storePickupListOptionMenu = React.createRef();\r\n this.state = {\r\n isFilterExpanded: false,\r\n selectedPickupMode: ''\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\r\n const selectedPickupModeDesc = defaultOptionText\r\n ? defaultOptionText\r\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\r\n\r\n return (\r\n
\r\n \r\n {this.state.isFilterExpanded ? (\r\n
    \r\n {productPickupModeList?.map((delivery: DeliveryOption) => {\r\n return (\r\n \r\n \r\n \r\n {delivery.Description}\r\n \r\n \r\n \r\n );\r\n })}\r\n
\r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Method to call when drop dwon get selected.\r\n */\r\n private readonly _rendeDeliveryOptions = () => {\r\n const isExpandOptionsState = this.state.isFilterExpanded;\r\n this.setState({\r\n isFilterExpanded: !isExpandOptionsState\r\n });\r\n };\r\n\r\n /**\r\n * Method to call on select pickup mode.\r\n * @param event - Mouse event.\r\n * @returns Void.\r\n */\r\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\r\n event.preventDefault();\r\n const deliveryCode = event.currentTarget.getAttribute('data-value');\r\n if (deliveryCode !== null) {\r\n this.setState({\r\n selectedPickupMode: deliveryCode\r\n });\r\n\r\n this._rendeDeliveryOptions();\r\n await this.props.onChange(deliveryCode);\r\n }\r\n };\r\n\r\n /**\r\n * Method to call on select pickup mode.\r\n * @param event - Mouse event.\r\n * @returns Void.\r\n */\r\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\r\n event.preventDefault();\r\n const deliveryCode = event.currentTarget.getAttribute('data-value');\r\n if (deliveryCode !== null) {\r\n this.setState({\r\n selectedPickupMode: deliveryCode\r\n });\r\n\r\n this._rendeDeliveryOptions();\r\n await this.props.onChange(deliveryCode);\r\n }\r\n };\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\n/* eslint-disable no-duplicate-imports */\r\nimport { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\n\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 }\r\n let hours = Math.floor(seconds / (60 * 60));\r\n const ampm = hours >= 12 ? 'pm' : 'am';\r\n hours %= 12;\r\n hours = hours ? hours : 12;\r\n const divisorForMinutes = seconds % (60 * 60);\r\n const minutes = 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\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:\r\n // 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:\r\n // Case 'SUN':\r\n return resources.days.sundayFull;\r\n }\r\n};\r\n\r\nconst buildHoursDisplayInfo = (\r\n startDay: DayType,\r\n endDay: DayType,\r\n hoursInfo: string,\r\n resources: IStoreSelectorLocationLineItemResources\r\n): 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 }\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\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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\n\r\n/* tslint:disable:max-func-body-length */\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 { DeliveryOption, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\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\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 quantityText: 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 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 showQuantity?: boolean;\r\n showStoreAvailableQuantity?: number;\r\n filteredPickupMode?: string;\r\n isDisplayProduct: boolean;\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 showCnC?: boolean;\r\n CncPickupIds: (number | undefined)[];\r\n localStoreHeading: string;\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 = (\r\n storeHours: StoreHours | undefined,\r\n location: OrgUnitLocation,\r\n resources: IStoreSelectorLocationLineItemResources\r\n): 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 }\r\n\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\nexport const 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 return `(<1 ${preferredDistanceUnit})`;\r\n }\r\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\r\n};\r\n\r\n// /**\r\n// * Function to store contact.\r\n// * @param contacts - Store location within radius.\r\n// * @returns - Return primary contact number of store.\r\n// */\r\n// const extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\r\n// if (!contacts) {\r\n// return undefined;\r\n// }\r\n// const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\r\n// if (allPhoneContacts && allPhoneContacts.length > 0) {\r\n// const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\r\n// if (primaryPhoneContact) {\r\n// return primaryPhoneContact.Locator;\r\n// }\r\n// return allPhoneContacts[0].Locator;\r\n// }\r\n// return undefined;\r\n// };\r\n\r\n/**\r\n * On Store locator click functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\n\r\nconst onPickupInStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n StoreSelectorLocationLineItemComponentActions.onLocationSelected(props);\r\n};\r\n/**\r\n * On Store locator click functionality.\r\n * @param props -Store locator location items.\r\n * @param pickupMode -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\n\r\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\r\n StoreSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\r\n};\r\n/**\r\n * Set Preferred store functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\n\r\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n StoreSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\r\n};\r\n/**\r\n * Remove preferred store functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\n\r\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n StoreSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\r\n};\r\n/**\r\n * On Change functionality.\r\n * @param props -Store locator location items.\r\n * @returns Store locator selected location line item action.\r\n */\r\n\r\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\r\n StoreSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\r\n return Promise.resolve();\r\n};\r\n/**\r\n * Method to render pickup modes.\r\n * @param props - StoreSelector Line item props.\r\n * @param deliveryOptionList - Product DeliveryOption List.\r\n * @param pickupInStoreButtonText - Pickup store button text.\r\n * @param pickupInStoreAriaLabel - Pickup store aria label.\r\n * @returns Jsx component.\r\n */\r\n\r\nconst renderPickupModes = (\r\n props: IStoreSelectorLocationLineItemProps,\r\n deliveryOptionList: DeliveryOption[],\r\n pickupInStoreButtonText: string,\r\n pickupInStoreAriaLabel: string\r\n): JSX.Element | null => {\r\n if (props.filteredPickupMode === undefined) {\r\n return (\r\n \r\n );\r\n }\r\n return props.showCnC ? (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n ) : null;\r\n};\r\n\r\nconst StoreSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\r\n // const onClick = () => {\r\n // StoreSelectorLocationLineItemComponentActions.onLocationSelected(props);\r\n // };\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 location,\r\n resources,\r\n storeHours,\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 CncPickupIds,\r\n localStoreHeading\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\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 const [isHover, setIsHover] = React.useState(false);\r\n\r\n /* VSI Customization - START - Remove GBR From your Shipping Address */\r\n const storeAddressText = storeAddress && storeAddress.slice(0, storeAddress.length - 4);\r\n /* VSI Customization - END */\r\n\r\n /* VSI Customization - START - Check Stock Store Status- */\r\n const storeStatus = props.isDisplayProduct\r\n ? props.stockStatusLabel !== 'Out of stock'\r\n ? 'Display only'\r\n : props.stockStatusLabel\r\n : props.stockStatusLabel;\r\n\r\n /* VSI Customization - END */\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

{''}

\r\n {storeAddressText && (\r\n
\r\n \r\n {storeAddressText}\r\n
\r\n )}\r\n {/* {phoneNumber && (\r\n
\r\n \r\n \r\n {phoneNumber}\r\n \r\n
\r\n )} */}\r\n
\r\n
\r\n

{resources.storeHoursHeader}

\r\n {renderStoreHours(storeHours, location, resources)}\r\n
\r\n {!storeLocatorView && (\r\n
\r\n {localStoreHeading.includes('Check stock') ? ( //Customization\r\n <>\r\n

{''}

\r\n

{storeStatus}

\r\n \r\n ) : (\r\n ''\r\n )}\r\n {isCurrentLocation ? (\r\n

{resources.currentLocation}

\r\n ) : canSelectLocation ? (\r\n deliveryOptionList.length === 0 ? (\r\n !localStoreHeading.includes('Check stock') && CncPickupIds.includes(location.ChannelId) ? (\r\n {\r\n setIsHover(false);\r\n }}\r\n onMouseEnter={e => {\r\n setIsHover(true);\r\n }}\r\n {...attributes}\r\n >\r\n
\r\n {pickupInStoreButtonText}\r\n \r\n ) : (\r\n
\r\n )\r\n ) : (\r\n // \r\n renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel)\r\n )\r\n ) : localStoreHeading.includes('Click & Collect') ? (\r\n <>\r\n

{''}

\r\n \r\n {storeStatus}\r\n

\r\n \r\n ) : (\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
\r\n );\r\n};\r\n\r\nexport const matchDeliveryOptions = (\r\n productdeliveryOptions: DeliveryOption[] | undefined,\r\n storePickUpOptionList: DeliveryOption[] | undefined\r\n): 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 (\r\n props: IStoreSelectorLocationLineItemProps\r\n) => JSX.Element;\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\n/* eslint-disable security/detect-object-injection */\r\nimport { ArrayExtensions, 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\n\r\nimport { IDobbiesBuyboxStoreSelectorResources } from '../dobbies-buybox-store-selector.props.autogenerated';\r\nimport {\r\n IStoreSelectorLocationLineItemResources,\r\n StoreSelectorLocationLineItemComponent\r\n} from './dobbies-buybox-store-selector-location-line-item';\r\n\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: IFullOrgUnitAvailability[];\r\n resources: IDobbiesBuyboxStoreSelectorResources;\r\n preferredDistanceUnit?: string;\r\n\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 showQuantity?: 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 filteredPickupMode?: string;\r\n isDisplayProduct: boolean;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n onLocationSelected(location: OrgUnitLocation | undefined): void;\r\n sortByLocation?: boolean;\r\n showCnC?: boolean;\r\n pickupStoreIds: (number | undefined)[];\r\n storeHeadingForLocalStore: string;\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 readonly selectedLocationRef: React.RefObject;\r\n\r\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\r\n\r\n private storeCounter: number;\r\n\r\n public constructor(props: IStoreSelectorLocationLinesProps) {\r\n super(props);\r\n this.selectedLocationRef = React.createRef();\r\n this.storeCounter = 0;\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 this.storeCounter = 0;\r\n let sortedStores = this._stores;\r\n\r\n if (this.props.sortByLocation) {\r\n sortedStores = this._stores.sort(\r\n (a, b) => a.OrgUnitAvailability!.OrgUnitLocation!.Distance! - b.OrgUnitAvailability!.OrgUnitLocation!.Distance!\r\n );\r\n }\r\n const removeStockBridgeStoreForCnC = sortedStores?.filter(\r\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber !== 'S096'\r\n );\r\n\r\n const removeStockBridgeStoreForCheckStock = sortedStores?.filter(\r\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber !== 'S096CNC'\r\n );\r\n //End Customization\r\n\r\n return (\r\n
\r\n {!this.props.storeHeadingForLocalStore.includes('Check stock')\r\n ? removeStockBridgeStoreForCnC.map((store, index) => {\r\n return this._renderStoreLocation(store, index);\r\n })\r\n : removeStockBridgeStoreForCheckStock.map((store, index) => {\r\n return this._renderStoreLocation(store, index);\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * On click Handler function.\r\n * @param orgUnitLocation -OrgUnit location.\r\n * @returns Click action on orgUnit Location.\r\n */\r\n\r\n private readonly onClickHandler = (orgUnitLocation: OrgUnitLocation | undefined) => () => {\r\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\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 const defaultAriaSetsize = 0;\r\n // VSI CUSTOMIZATION - HIDE Non C&C stores from C&C Modal\r\n if (!this.props.storeHeadingForLocalStore.includes('Check stock')) {\r\n if (!this.props.pickupStoreIds.includes(orgUnitLocation?.ChannelId)) {\r\n return;\r\n }\r\n }\r\n // VSI CUSTOMIZATION - HIDE Non C&C stores from C&C Modal\r\n if (orgUnitLocation) {\r\n ++this.storeCounter;\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n return undefined;\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 _getStoreAvailableQuantity = (stores: IFullOrgUnitAvailability | undefined): number | undefined => {\r\n return (\r\n stores?.OrgUnitAvailability &&\r\n stores?.OrgUnitAvailability?.ItemAvailabilities &&\r\n stores?.OrgUnitAvailability?.ItemAvailabilities[0]?.AvailableQuantity\r\n );\r\n };\r\n\r\n private readonly _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 readonly _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 readonly _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 readonly _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 readonly _mapResources = (resources: IDobbiesBuyboxStoreSelectorResources): 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 quantityText: resources.quantityText,\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","/*!\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\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n IPayLoad,\r\n ITelemetryContent,\r\n KeyCodes,\r\n TelemetryConstant\r\n} 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\nimport { StorePickUpOptionList } from './store-pickup-option-list';\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 pickupFilterByHeading?: string;\r\n pickupFilterMenuHeading?: 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 hasEnabledPickupFilterToShowStore?: boolean;\r\n filteredPickupMode?: string;\r\n\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 filterPickupModeSelected(pickupMode: string): void;\r\n\r\n sortByLocation?: boolean;\r\n sortLocations(): void;\r\n allStore: number;\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 readonly searchBoxRef: React.RefObject = React.createRef();\r\n\r\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n private readonly showAllStoreAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n private readonly toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n constructor(props: IStoreSelectorSearchFormProps) {\r\n super(props);\r\n this.state = { value: '' };\r\n this._handleKeyPressPrev = this._handleKeyPressPrev.bind(this);\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: {\r\n searchButtonAriaLabel,\r\n searchPlaceholderText,\r\n seeAllStoresText,\r\n viewListText,\r\n viewMapText,\r\n pickupFilterByHeading,\r\n pickupFilterMenuHeading\r\n },\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 productPickUpDeliveryOptions,\r\n hasEnabledPickupFilterToShowStore,\r\n sortLocations,\r\n sortByLocation,\r\n allStore\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 {locatorView && (\r\n \r\n )}\r\n {this.renderPickupModesList(\r\n this.props,\r\n toggleButtonText,\r\n productPickUpDeliveryOptions,\r\n pickupFilterMenuHeading,\r\n locatorView,\r\n pickupFilterByHeading,\r\n hasEnabledPickupFilterToShowStore\r\n )}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Calls method display result.\r\n * @param { React.KeyboardEvent} event The first number.\r\n */\r\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\r\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\r\n this.props.onShowAllStores();\r\n }\r\n };\r\n\r\n private readonly _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 readonly _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 /**\r\n * Method called on product pickup option change.\r\n * @returns - Void.\r\n */\r\n\r\n private readonly _onChangeHandler = () => async (deliveryCode: string): Promise => {\r\n this.props.filterPickupModeSelected(deliveryCode);\r\n return Promise.resolve();\r\n };\r\n /**\r\n * Method to render pickup mode list.\r\n * @param props - Store selector search form props.\r\n * @param toggleButtonText - Locator view button text.\r\n * @param productPickUpDeliveryOptions - Product DeliveryOption List.\r\n * @param pickupFilterMenuHeading - Pickup store button text.\r\n * @param locatorView - Locator View is on\\off.\r\n * @param pickupFilterByHeading - Pickup list label text.\r\n * @param hasEnabledPickupFilterToShowStore - Flag to check header filter is enabled.\r\n * @returns Jsx component.\r\n */\r\n\r\n private readonly renderPickupModesList = (\r\n props: IStoreSelectorSearchFormProps,\r\n toggleButtonText: string,\r\n productPickUpDeliveryOptions: DeliveryOption[] | undefined,\r\n pickupFilterMenuHeading: string | undefined,\r\n locatorView: boolean | undefined,\r\n pickupFilterByHeading: string | undefined,\r\n hasEnabledPickupFilterToShowStore: boolean | undefined\r\n ): JSX.Element | null => {\r\n if (hasEnabledPickupFilterToShowStore) {\r\n return (\r\n
\r\n {locatorView && (\r\n \r\n {toggleButtonText}\r\n \r\n )}\r\n \r\n
{pickupFilterByHeading}
\r\n
\r\n );\r\n }\r\n if (locatorView) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\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\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IDobbiesBuyboxStoreSelectorResources, ITermsOfServiceLinkData } from '../dobbies-buybox-store-selector.props.autogenerated';\r\n\r\nexport interface IStoreSelectorEmptyMessageProps {\r\n resources: IDobbiesBuyboxStoreSelectorResources;\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\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: 'link'\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: IDobbiesBuyboxStoreSelectorResources;\r\n locations?: number | undefined;\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.toString())\r\n : storeCountMessage.replace('{count}', locations.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\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IDobbiesBuyboxStoreSelector containerModule 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\nimport * as React from 'react';\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 IDobbiesBuyboxStoreSelectorConfig 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 enablePickupFilterToShowStore?: boolean;\r\n showAllStores?: boolean;\r\n showLiveQuantity?: boolean;\r\n autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n className?: string;\r\n clientRender?: boolean;\r\n storeSelectorHeaderText?: string;\r\n}\r\n\r\nexport interface IDobbiesBuyboxStoreSelectorResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n quantityText: 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 pickupFilterByHeading: string;\r\n pickupFilterMenuHeading: string;\r\n pickupDeliveryOptionErrorMessage: 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 IDobbiesBuyboxStoreSelectorProps extends Msdyn365.IModule {\r\n resources: IDobbiesBuyboxStoreSelectorResources;\r\n config: IDobbiesBuyboxStoreSelectorConfig;\r\n slots: {\r\n maps: React.ReactNode[];\r\n };\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// tslint:disable:no-reference\r\n/* eslint-disable no-duplicate-imports */\r\n/* tslint:disable:max-line-length */\r\n/* tslint:disable:max-func-body-length */\r\n/* tslint:disable:cyclomatic-complexity */\r\n/* tslint:disable:jsx-no-lambda */\r\n/* tslint:disable:jsx-no-multiline */\r\n/* tslint:disable:jsx-wrap-multiline */\r\n/// \r\n\r\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n ArrayExtensions,\r\n getOrgUnitLocationsByArea,\r\n GetOrgUnitLocationsByAreaInput,\r\n IFullOrgUnitAvailability\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport getFullAvailableInventoryNearby, {\r\n GetFullAvailableInventoryNearbyInput\r\n} from '../../themes/dobbies/actions/get-full-available-inventory-nearby.override.action';\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport classname from 'classnames';\r\nimport { reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\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\nimport { IDobbiesBuyboxStoreSelectorData } from './dobbies-buybox-store-selector.data';\r\nimport {\r\n buildStoreHours,\r\n IHoursDisplayInfo,\r\n secondsToTime\r\n} from './components/dobbies-buybox-store-selector-location-line-item/date-time-helpers';\r\nimport {\r\n IDobbiesBuyboxStoreSelectorProps,\r\n IDobbiesBuyboxStoreSelectorResources,\r\n mode as modeEnum,\r\n searchRadiusUnit,\r\n style as styleEnum\r\n} from './dobbies-buybox-store-selector.props.autogenerated';\r\nimport { searchOrgUnitLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\r\nimport {\r\n GetAllAvailableInventoryNearbyInput,\r\n getAllAvailableInventoryNearbyAction\r\n} from '../../actions/get-all-available-inventory-nearby';\r\n\r\nexport interface IStoreSelectorState {\r\n isSearchInProgress: boolean;\r\n searchTerm?: string;\r\n isSeeAllStoreValue: boolean;\r\n isLocationDisabled?: boolean;\r\n filteredPickupMode?: string;\r\n isDisplayProduct: boolean;\r\n sortByLocation?: boolean;\r\n isCnC?: boolean;\r\n CnCPickupIds: (number | undefined)[];\r\n totalStoreCount: number | undefined;\r\n latitudeVal: number;\r\n longitudeVal: number;\r\n radiusVal: number;\r\n searchString: string;\r\n allStore: IFullOrgUnitAvailability[];\r\n}\r\n\r\nexport interface IStoreSelectorViewProps extends IDobbiesBuyboxStoreSelectorProps {\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 sortLocations?: IFullOrgUnitAvailability[];\r\n locationListProps?: IStoreSelectorLocationLineItemProps[];\r\n isDisplayProduct: boolean;\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 * StoreSelectorLocation Line Resources Interface.\r\n */\r\n\r\nexport interface IStoreSelectorLocationLineItemResources {\r\n contactInfoHeader: string;\r\n storeHoursHeader: string;\r\n availabilityInfoHeader: string;\r\n closedText: string;\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 quantityText: string;\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\n * ILocationHours Interface.\r\n */\r\n\r\nexport interface ILocationHours {\r\n openFrom?: string;\r\n openTo?: string;\r\n}\r\n/**\r\n * StoreSelectorLocation Line Item Props Interface.\r\n */\r\n\r\nexport interface IStoreSelectorLocationLineItemProps {\r\n location: OrgUnitLocation;\r\n storeHours?: StoreHours;\r\n storeHoursList?: IHoursDisplayInfo[];\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 storePickUpOptionList?: DeliveryOption[];\r\n productPickUpOptionList?: DeliveryOption[];\r\n selectedStoreLocationId?: string;\r\n locationOpen?: ILocationHours;\r\n /**\r\n * The telemetry content\r\n */\r\n\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 onClick: (locationId: string | undefined) => void;\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\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private storeCounter: number;\r\n\r\n constructor(props: IDobbiesBuyboxStoreSelectorProps) {\r\n super(props);\r\n this.state = {\r\n isSearchInProgress: true,\r\n searchTerm: '',\r\n isSeeAllStoreValue: false,\r\n filteredPickupMode: undefined,\r\n isDisplayProduct: false,\r\n CnCPickupIds: [],\r\n totalStoreCount: 0,\r\n latitudeVal: 0,\r\n longitudeVal: 0,\r\n radiusVal: 1,\r\n searchString: '',\r\n allStore: [],\r\n sortByLocation: true\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.storeCounter = 0;\r\n }\r\n\r\n public sortLocations = () => {\r\n this.setState({\r\n sortByLocation: !this.state.sortByLocation\r\n });\r\n };\r\n\r\n public componentDidMount(): void {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled }\r\n } = this.props;\r\n\r\n this.props.data.deliveryOptions.then(options => {\r\n const isCnC = options?.DeliveryOptions?.some(opt => opt.Code === 'ClickCol');\r\n this.setState({ isCnC });\r\n });\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 () =>\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 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\r\n ?.loadMapApi({\r\n key: channel?.BingMapsEnabled ? channel?.BingMapsApiKey : '',\r\n lang: this.props.context?.actionContext?.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\r\n })\r\n .then()\r\n .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?.BingMapsEnabled ? channel.BingMapsApiKey : '',\r\n lang: this.props.context?.actionContext?.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\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 const urlRoutes = this.props.context.request.url.requestUrl.pathname.split('/');\r\n const productRecordId = urlRoutes[urlRoutes.length - 1].replace('.p', '');\r\n\r\n const parsedRecordId = Number(productRecordId);\r\n if (!parsedRecordId) {\r\n return;\r\n }\r\n this.getProductAttributes(parsedRecordId);\r\n }\r\n\r\n public async getProductAttributes(RecordId: number) {\r\n const {\r\n requestContext: {\r\n apiSettings: { channelId, catalogId }\r\n }\r\n } = this.props.context.actionContext;\r\n\r\n const customAttributes = await getAttributeValuesAsync(\r\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\r\n RecordId,\r\n channelId,\r\n catalogId\r\n );\r\n const inStoreAttribute = customAttributes?.find(attr => attr.Name?.toLowerCase() === 'instoredisplay');\r\n\r\n if (inStoreAttribute?.TextValue?.toLowerCase() === 'yes') {\r\n this.setState({\r\n isDisplayProduct: true\r\n });\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IDobbiesBuyboxStoreSelectorProps): boolean {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n // VSI CUSTOMIZATION Counter Logic to show correct Store Counts\r\n if (this.state.totalStoreCount !== this.props.data.availabilitiesWithHours.result?.length) {\r\n const ids = this.props.data.availabilitiesWithHours?.result?.filter(item => {\r\n return this.state.CnCPickupIds.some(f => {\r\n return (\r\n f === item.OrgUnitAvailability?.OrgUnitLocation?.ChannelId &&\r\n f === item.OrgUnitAvailability?.OrgUnitLocation?.ChannelId\r\n );\r\n });\r\n });\r\n\r\n if (this.props.config.storeSelectorHeaderText?.includes('Check stock')) {\r\n this.setState({ totalStoreCount: this.props.data.availabilitiesWithHours.result?.length });\r\n } else {\r\n if (this.state.totalStoreCount !== ids?.length) {\r\n this.setState({ totalStoreCount: ids?.length });\r\n }\r\n }\r\n }\r\n // VSI CUSTOMIZATION Counter Logic to show correct Store Counts\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 // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\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 enablePickupFilterToShowStore,\r\n storeSelectorHeaderText,\r\n showLiveQuantity\r\n },\r\n context: {\r\n telemetry,\r\n app: { config: appConfig },\r\n actionContext: {\r\n requestContext: { channel, cookies }\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 this.storeCounter = 0;\r\n const isMapDisabled = !(channel && channel.BingMapsApiKey && channel.BingMapsEnabled);\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 : 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 =\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\r\n if (!(channel && channel.BingMapsApiKey)) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n }\r\n\r\n const configHeading: any = heading ? heading : locatorView ? storeSelectorHeaderText : storeSelectorHeaderText;\r\n const preferredDistanceUnit =\r\n this.props.config.searchRadiusUnit === searchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\r\n\r\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\r\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = hideInventory ? storeLocations : availabilitiesWithHours;\r\n if (storeLocationList) {\r\n storeLocationList = this._sortStores(storeLocationList, isPreferredStoreEnabled, preferredLocationId);\r\n }\r\n const enableOutofStock = appConfig?.enableStockCheck || false;\r\n const alreadySelectedLocation = context ? context.alreadySelectedLocation : undefined;\r\n const productPickUpOptionList = storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions;\r\n if (this.state.filteredPickupMode && storeLocationList) {\r\n storeLocationList = this.onFilterLocations(storeLocationList, this.state.filteredPickupMode);\r\n }\r\n const locationListProps = this._getStoreLocationListProps(\r\n enableOutofStock,\r\n locatorView,\r\n preferredLocationId,\r\n isPreferredStoreEnabled,\r\n selectedStoreLocationId,\r\n storeLocationList ?? null,\r\n preferredDistanceUnit,\r\n alreadySelectedLocation,\r\n productPickUpOptionList\r\n );\r\n\r\n const viewProps = {\r\n ...(this.props as IDobbiesBuyboxStoreSelectorProps),\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(\r\n `ms-store-${inlineView ? 'locate' : 'select'}`,\r\n className,\r\n inlineView ? '' : 'msc-modal-input-required'\r\n ),\r\n autoFocus: true,\r\n fade: true,\r\n isOpen: isDialogOpen,\r\n 'aria-label': configHeading,\r\n onClosed: this._closeDialog,\r\n horizontalPosition: 'center',\r\n verticalPosition: 'center',\r\n toggle: 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 \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 \r\n ),\r\n\r\n // Not being used in current context, we can use it here to pass more props.\r\n headerText: {heading ? heading : locatorView ? storeSelectorHeaderText : storeSelectorHeaderText},\r\n sortLocations: storeLocationList,\r\n isDisplayProduct: this.state.isDisplayProduct,\r\n locationListProps,\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: async () => {\r\n this._getAndUpdateStoreLocation();\r\n return Promise.resolve();\r\n },\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\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading = event.target.value);\r\n\r\n /**\r\n * Show all stores handler function.\r\n */\r\n\r\n private readonly onShowAllStoresHandler = () => {\r\n this._getAndUpdateStoreLocation(true);\r\n this.setState({ filteredPickupMode: undefined });\r\n };\r\n /**\r\n * Method to be called for filtered the store location based on the filter selected by the user.\r\n * @param stores -All the stores from the API.\r\n * @param filteredPickupMode -Filter selected by the user.\r\n * @returns -Filtered stores.\r\n */\r\n\r\n private readonly onFilterLocations = (stores: IFullOrgUnitAvailability[], filteredPickupMode: string) => {\r\n return stores.filter(location => {\r\n return location.OrgUnitPickUpDeliveryModes?.DeliveryOptions?.some(deliveryOption => {\r\n return deliveryOption.Code === filteredPickupMode;\r\n });\r\n });\r\n };\r\n /**\r\n * Filter Store by pickup mode.\r\n * @param deliveryCode -Delivery Code.\r\n */\r\n\r\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\r\n this.setState({ filteredPickupMode: deliveryCode });\r\n };\r\n /**\r\n * Method will sort all stores.\r\n * @param stores -Stores List.\r\n * @param isPreferredStoreEnabled -Module config value.\r\n * @param preferredStoreLocationId -Store Id.\r\n * @returns List of Stores.\r\n */\r\n\r\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\r\n private _sortStores(\r\n stores: IFullOrgUnitAvailability[],\r\n isPreferredStoreEnabled: boolean | undefined,\r\n preferredStoreLocationId: string\r\n ): IFullOrgUnitAvailability[] {\r\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\r\n isPreferredStoreEnabled &&\r\n preferredStoreLocationId &&\r\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\r\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\r\n }\r\n /**\r\n * Method will list of store selector location line.\r\n * @param hasEnabledOutOfStockCheck -Stores List.\r\n * @param isStoreLocatorView -Module config value.\r\n * @param preferredStoreLocationId -Store Id.\r\n * @param isPreferredStoreEnabled -Stores List.\r\n * @param selectedStoreLocationId -Module config value.\r\n * @param stores -Store Id.\r\n * @param preferredDistanceUnit -Module config value.\r\n * @param alreadySelectedLocation -Already Selected Location.\r\n * @param productPickUpOptionList -Product supported Pickup Modes List.\r\n * @returns List of StoreSelectorLocation Line.\r\n */\r\n\r\n private _getStoreLocationListProps(\r\n hasEnabledOutOfStockCheck: boolean,\r\n isStoreLocatorView: boolean,\r\n preferredStoreLocationId: string,\r\n isPreferredStoreEnabled: boolean | undefined,\r\n selectedStoreLocationId: string | undefined,\r\n stores: IFullOrgUnitAvailability[] | null,\r\n preferredDistanceUnit?: string | undefined,\r\n alreadySelectedLocation?: OrgUnitLocation,\r\n productPickUpOptionList?: DeliveryOption[]\r\n ): IStoreSelectorLocationLineItemProps[] {\r\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\r\n if (ArrayExtensions.hasElements(stores)) {\r\n stores?.map((store, index: number) => {\r\n const storeLineProps = this._createStoreLocationList(\r\n store,\r\n index,\r\n hasEnabledOutOfStockCheck,\r\n isStoreLocatorView,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n selectedStoreLocationId,\r\n preferredDistanceUnit,\r\n alreadySelectedLocation,\r\n productPickUpOptionList\r\n );\r\n if (storeLineProps) {\r\n storeList.push(storeLineProps);\r\n }\r\n });\r\n }\r\n return storeList;\r\n }\r\n\r\n private readonly _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n config: { autoSuggestOptions },\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\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(\r\n `#ms-store-select__search-box_${this.props.id}`,\r\n `#ms-store-select__search-box-container_${this.props.id}`,\r\n this._onSuggestionSelected\r\n );\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 readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n const context =\r\n this.props.data.storeSelectorStateManager &&\r\n 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 readonly _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: { 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\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\r\n private readonly _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 };\r\n\r\n private readonly _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 readonly _performSearch = async (searchTerm: string): Promise => {\r\n const {\r\n context: { actionContext },\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 /* VSI-Customization -- Filter out store zip code */\r\n const filteredStore: any = this.state.allStore?.filter(\r\n (str: any) =>\r\n (str?.OrgUnitAvailability?.OrgUnitLocation.OrgUnitName?.toLowerCase()?.includes(searchTerm.trim()?.toLowerCase()) ||\r\n searchTerm\r\n .trim()\r\n ?.toLowerCase()\r\n ?.includes(str?.OrgUnitAvailability?.OrgUnitLocation.OrgUnitName?.toLowerCase())) &&\r\n str?.OrgUnitAvailability?.OrgUnitLocation.OrgUnitNumber !== 'S096CNC'\r\n );\r\n const searchStoreStr = filteredStore?.length >= 1 ? filteredStore[0]?.OrgUnitAvailability?.OrgUnitLocation.Zip : searchTerm;\r\n const location = await storeSelectorStateManager.geoLocate(searchStoreStr.trim() !== '' ? searchStoreStr : '0', actionContext);\r\n /* VSI-Customization -- END */\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 readonly _searchTermChanged = async (searchTerm: string): Promise => {\r\n this.setState({ searchTerm });\r\n };\r\n\r\n private readonly _getAndUpdateStoreLocation = (showAllStores?: boolean): void => {\r\n const {\r\n config: { style },\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 /* VSI-Customization -- Call dataAction to get All stores info */\r\n this.getAllAvailableStoreInventoryNearby(0, 0, 24.8607343, 67.0011364);\r\n /* VSI-Customization -- END */\r\n if (navigator && navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n async position => {\r\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\r\n this.setState({ isLocationDisabled: false, isSearchInProgress: true, sortByLocation: true });\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 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, sortByLocation: undefined });\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 );\r\n } else {\r\n this.setState({ isSearchInProgress: false });\r\n }\r\n };\r\n\r\n private readonly _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 storeSelectorStateManager.context?.parentElementRef?.current?.focus();\r\n return storeSelectorStateManager.closeDialog();\r\n }\r\n };\r\n\r\n private readonly _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\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\r\n .setOrgUnitStoreInformation({\r\n id,\r\n showMapViewLink: context && context.showMapViewLink,\r\n parentElementRef: context?.parentElementRef,\r\n isDialog: styleDefault === styleEnum.dialog,\r\n orgUnitStoreInformation,\r\n onLocationSelected: async 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 /**\r\n * Get full available inventory nearby.\r\n * @param calRadius - Radius.\r\n * @param distanceUnitValue - Distance unit value.\r\n * @param latitude - Latitude.\r\n * @param longitude - Longitude.\r\n * @returns - Returns a void promise.\r\n */\r\n private readonly getAllAvailableStoreInventoryNearby = async (\r\n calRadius: number,\r\n distanceUnitValue: number,\r\n latitude?: number,\r\n longitude?: number\r\n ): Promise => {\r\n const {\r\n telemetry,\r\n context: { actionContext },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\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 pickupStores = await searchOrgUnitLocationsAsync(\r\n { callerContext: this.props.context.actionContext, bypassCache: 'none' },\r\n {\r\n DeliveryModeTypeFilterValue: 2\r\n }\r\n );\r\n\r\n const shippingStores = await searchOrgUnitLocationsAsync(\r\n { callerContext: this.props.context.actionContext, bypassCache: 'none' },\r\n {\r\n DeliveryModeTypeFilterValue: 1\r\n }\r\n );\r\n\r\n const pickupIds = pickupStores.map(store => store.ChannelId);\r\n // this.setState({ CnCPickupIds: pickupIds });\r\n const shippingIds = shippingStores.map(store => store.ChannelId);\r\n const excludedIds = shippingIds.filter(id => !pickupIds.includes(id));\r\n\r\n const input = new GetAllAvailableInventoryNearbyInput(\r\n storeSelectorStateManager.context.product.RecordId,\r\n latitude ?? 0,\r\n longitude ?? 0,\r\n calRadius,\r\n distanceUnitValue,\r\n this.state.isLocationDisabled,\r\n excludedIds\r\n );\r\n\r\n const allStoresNearBy = await getAllAvailableInventoryNearbyAction(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 // this.trackException('DobbiesBuyBoxStoreSelector: Get Full Available Inventory Nearby', error.message, error.stack);\r\n });\r\n if (allStoresNearBy && allStoresNearBy?.length >= 1) {\r\n this.setState({ allStore: allStoresNearBy });\r\n }\r\n };\r\n\r\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\r\n const {\r\n telemetry,\r\n config: { mode, lookupRadius, style },\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 : 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 pickupStores = await searchOrgUnitLocationsAsync(\r\n { callerContext: this.props.context.actionContext, bypassCache: 'none' },\r\n {\r\n DeliveryModeTypeFilterValue: 2\r\n }\r\n );\r\n\r\n const shippingStores = await searchOrgUnitLocationsAsync(\r\n { callerContext: this.props.context.actionContext, bypassCache: 'none' },\r\n {\r\n DeliveryModeTypeFilterValue: 1\r\n }\r\n );\r\n\r\n const pickupIds = pickupStores.map(store => store.ChannelId);\r\n this.setState({ CnCPickupIds: pickupIds });\r\n const shippingIds = shippingStores.map(store => store.ChannelId);\r\n const excludedIds = shippingIds.filter(id => !pickupIds.includes(id));\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 excludedIds\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 readonly _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 * Method will list of store selector location line.\r\n * @param store -Store Info.\r\n * @param index - List index.\r\n * @param hasEnabledOutOfStockCheck -Stores List.\r\n * @param isStoreLocatorView -Module config value.\r\n * @param preferredStoreLocationId -Store Id.\r\n * @param isPreferredStoreEnabled -Stores List.\r\n * @param selectedStoreLocationId -Module config value.\r\n * @param preferredDistanceUnit -Module config value.\r\n * @param alreadySelectedLocation -Already Selected Location.\r\n * @param productPickUpOptionList -Product supported Pickup Modes List.\r\n * @returns StoreSelectorLocation Line Prop.\r\n */\r\n\r\n private _createStoreLocationList(\r\n store: IFullOrgUnitAvailability,\r\n index: number,\r\n hasEnabledOutOfStockCheck: boolean,\r\n isStoreLocatorView: boolean,\r\n preferredStoreLocationId: string,\r\n isPreferredStoreEnabled: boolean | undefined,\r\n selectedStoreLocationId: string | undefined,\r\n preferredDistanceUnit?: string | undefined,\r\n alreadySelectedLocation?: OrgUnitLocation,\r\n productPickUpOptionList?: DeliveryOption[]\r\n ): IStoreSelectorLocationLineItemProps | undefined {\r\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\r\n const selectedStoreLocation = selectedStoreLocationId;\r\n const deliveryOptions = store?.OrgUnitPickUpDeliveryModes;\r\n const lineResources = this._mapResources(this.props.resources);\r\n const storeOpenFrom: string | undefined = secondsToTime(orgUnitLocation?.OpenFrom);\r\n const storeOpenTo: string | undefined = secondsToTime(orgUnitLocation?.OpenTo);\r\n const storeHours = store.StoreHours;\r\n if (orgUnitLocation) {\r\n ++this.storeCounter;\r\n return {\r\n location: orgUnitLocation,\r\n selectedStoreLocationId: selectedStoreLocation,\r\n storeHours,\r\n resources: lineResources,\r\n preferredDistanceUnit: preferredDistanceUnit!,\r\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, alreadySelectedLocation),\r\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, store?.OrgUnitAvailability?.ItemAvailabilities),\r\n stockStatusLabel: this._stockInventoryLabel(store),\r\n storeLocatorView: isStoreLocatorView,\r\n index: this.storeCounter.toString(),\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n telemetryContent: this.telemetryContent,\r\n isLocationDisabled: this.state.isLocationDisabled,\r\n storePickUpOptionList: deliveryOptions?.DeliveryOptions,\r\n productPickUpOptionList,\r\n locationOpen: { openFrom: storeOpenFrom, openTo: storeOpenTo },\r\n storeHoursList: storeHours?.RegularStoreHours ? buildStoreHours(storeHours.RegularStoreHours, lineResources) : [],\r\n onClick: this._setSelectedStore,\r\n handlers: {\r\n onSelected: this._onOrgUnitLocationSelected,\r\n onSetAsPreferredStore: this._setPreferredStore,\r\n onRemovePreferredStore: this._removePreferredStore\r\n }\r\n };\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Method to map resources with Location Item.\r\n * @param resources - List of strings for module.\r\n * @returns Resources for StoreSelector location line.\r\n */\r\n\r\n private readonly _mapResources = (resources: IDobbiesBuyboxStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\r\n return {\r\n contactInfoHeader: resources.contactText,\r\n storeHoursHeader: resources.timeText,\r\n availabilityInfoHeader: resources.availabilityText,\r\n closedText: resources.storeHoursClosedText,\r\n outOfStock: resources.outOfStockText,\r\n inStock: resources.inStockText,\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 quantityText: resources.quantityText,\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 private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined, selectedLocation?: OrgUnitLocation): boolean =>\r\n (selectedLocation && location && selectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\r\n /**\r\n * Method to get stock.\r\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\r\n * @param itemAvailabilities - Item quantity availablity.\r\n * @returns Boolean value for item stock.\r\n */\r\n\r\n private readonly _isProductInStock = (\r\n hasEnableOutOfStockCheck: boolean,\r\n itemAvailabilities: ItemAvailability[] | undefined\r\n ): boolean => {\r\n if (!hasEnableOutOfStockCheck) {\r\n return true;\r\n }\r\n const quantityCount = 0;\r\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\r\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > quantityCount : false;\r\n }\r\n return false;\r\n };\r\n /**\r\n * Method to get stocklevel label.\r\n * @param isInStock - Stock available in store.\r\n * @returns Label for stock status.\r\n */\r\n\r\n private readonly _stockInventoryLabel = (isInStock: IFullOrgUnitAvailability | undefined): string | undefined => {\r\n if (isInStock?.ProductInventoryInformation && ArrayExtensions.hasElements(isInStock.ProductInventoryInformation)) {\r\n for (let index = 0; index < isInStock.ProductInventoryInformation.length; index++) {\r\n if (\r\n isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\r\n isInStock.ProductInventoryInformation[index].InventLocationId\r\n ) {\r\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\r\n }\r\n }\r\n }\r\n return undefined;\r\n };\r\n}\r\n\r\nexport default StoreSelector;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IStoreSelectorViewProps } from './dobbies-buybox-store-selector';\r\n\r\nconst StoreSelectorView: React.FC = props => {\r\n const {\r\n BodyContainerProps,\r\n\r\n HeaderContainerProps,\r\n HeaderProps,\r\n ModuleProps,\r\n\r\n // HeaderText,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n noLocationsMessage,\r\n isDisplayProduct\r\n } = props;\r\n\r\n return (\r\n \r\n {HeaderProps}\r\n \r\n {locationsMessage}\r\n {search}\r\n {/* {!props.config?.storeSelectorHeaderText?.includes('Check stock') ? (\r\n \r\n Please note, Click & Collect is currently available in selected stores\r\n
\r\n ) : () */}\r\n {isDisplayProduct && (\r\n \r\n Please note, display models are shown in-store available to order for home delivery\r\n \r\n )}\r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\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","import {\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 { FeatureState } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getFeatureStatesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\n\r\n/**\r\n * Input class for the getFeatureState data action\r\n */\r\nexport class FeatureStateInput implements IActionInput {\r\n public readonly featureNames: string[] = [\r\n 'Dynamics.AX.Application.RetailB2BEcommerceFeature',\r\n 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature',\r\n 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature',\r\n 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n ];\r\n\r\n public getCacheKey = () => `FeatureState`;\r\n public getCacheObjectType = () => 'FeatureState';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * createInput method for the getFeatureState method\r\n * @param inputData The input data passed to the createInput method\r\n */\r\nexport const createGetFeatureStateInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new FeatureStateInput();\r\n};\r\n\r\n/**\r\n * The action method for the getFeatureState data action\r\n * @param input The action input\r\n * @param ctx The action context\r\n */\r\nexport async function getFeatureStateAction(input: FeatureStateInput, ctx: IActionContext): Promise {\r\n const featureState = await getFeatureStatesAsync({ callerContext: ctx }, input.featureNames);\r\n return featureState;\r\n}\r\n\r\n/**\r\n * The getFeatureState data action\r\n * Gets the feature state via the read RetailServer API\r\n * Returns address information associated with the retrieved customer\r\n */\r\nexport const getFeatureStateActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-feature-state',\r\n action: >getFeatureStateAction,\r\n input: createGetFeatureStateInput\r\n});\r\nexport default getFeatureStateActionDataAction;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport {\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 {\r\n ChannelDeliveryOption,\r\n FeatureState,\r\n DeliveryModeTypeFilter,\r\n ItemAvailability,\r\n OrgUnitAvailability,\r\n OrgUnitLocation,\r\n ProductWarehouseInventoryInformation,\r\n SearchArea,\r\n StoreHours\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getChannelDeliveryOptionsAsync,\r\n getOrgUnitLocationsByAreaAsync,\r\n getStoreHoursAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\r\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { IFullOrgUnitAvailability } from './utilities/full-org-unit-availability';\r\nimport { DeliveryMode, IProductInventoryInformation } from './utilities/product-inventory-information';\r\nimport { FeatureStateInput, getFeatureStateAction } from './get-feature-state.override.action';\r\nimport { createInventoryAvailabilitySearchCriteria, mapProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Get selected variant action input class.\r\n */\r\nexport class GetFullAvailableInventoryNearbyInput implements IActionInput {\r\n public latitude?: number;\r\n\r\n public longitude?: number;\r\n\r\n public radius?: number;\r\n\r\n public productId?: number;\r\n\r\n public DistanceUnitValue?: number;\r\n\r\n public IgnoreLocation?: boolean;\r\n\r\n public ExcludeLocations?: (number | undefined)[];\r\n\r\n constructor(\r\n _productId?: number,\r\n _latitude?: number,\r\n _longitude?: number,\r\n _radius?: number,\r\n _DistanceUnitValue?: number,\r\n _IgnoreLocation?: boolean,\r\n _ExcludeLocations?: (number | undefined)[]\r\n ) {\r\n this.productId = _productId;\r\n this.latitude = _latitude;\r\n this.longitude = _longitude;\r\n this.radius = _radius;\r\n this.DistanceUnitValue = _DistanceUnitValue;\r\n this.IgnoreLocation = _IgnoreLocation;\r\n this.ExcludeLocations = _ExcludeLocations;\r\n }\r\n\r\n public getCacheKey = () => 'GetFullAvailableInventoryNearbyInputCache';\r\n\r\n public getCacheObjectType = () => 'GetFullAvailableInventoryNearbyInput';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the getSelectedVariant data action.\r\n * @param inputData - The input data passed to the createInput method.\r\n * @returns GetFullAvailableInventoryNearbyInput - The action input.\r\n */\r\nexport const createGetFullAvailableInventoryNearbyInput = (\r\n inputData: ICreateActionContext>\r\n): GetFullAvailableInventoryNearbyInput => {\r\n return new GetFullAvailableInventoryNearbyInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail Feature State API and returns a list of feature with isEnabled flag.\r\n * @param context - The context.\r\n * @returns FeatureState - The feature state.\r\n */\r\nexport async function getFeatureState(context: IActionContext): Promise {\r\n return getFeatureStateAction(new FeatureStateInput(), context);\r\n}\r\n\r\n/**\r\n * Action method for the getSelectedVariant data aciton.\r\n * @param input - The action input class.\r\n * @param ctx - The action context.\r\n * @returns IFullOrgUnitAvailability - The full org unit availability.\r\n */\r\nexport async function getFullAvailableInventoryNearbyAction(\r\n input: GetFullAvailableInventoryNearbyInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // No valid product we want to return undefined so module knows there are no results yet\r\n if (!input.productId) {\r\n return undefined;\r\n }\r\n\r\n if (((!input.radius && input.radius !== 0) || !input.latitude || !input.longitude) && !input.IgnoreLocation) {\r\n // No valid location we want to return empty array so module can show no locations message\r\n return [];\r\n }\r\n\r\n const searchArea: SearchArea = {\r\n Latitude: input.latitude,\r\n Longitude: input.longitude,\r\n Radius: input.radius,\r\n DistanceUnitValue: input.DistanceUnitValue || 0 // 0 is miles\r\n };\r\n\r\n const featureState = await getFeatureState(ctx);\r\n const retailMulitplePickupMFeatureState = featureState?.find(\r\n item => item.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n )?.IsEnabled;\r\n const searchCriteria = createInventoryAvailabilitySearchCriteria(ctx, [input.productId], false, true, searchArea, DeliveryMode.pickup);\r\n return getEstimatedAvailabilityAsync({ callerContext: ctx }, searchCriteria)\r\n .then(async (productWarehouseInformation: ProductWarehouseInventoryInformation) => {\r\n // For store selector, inventory should always come from an individual store\r\n const productInventoryInformation = mapProductInventoryInformation(\r\n ctx,\r\n productWarehouseInformation.ProductWarehouseInventoryAvailabilities\r\n );\r\n return getOrgUnitLocationsByAreaAsync({ callerContext: ctx }, searchArea, DeliveryModeTypeFilter.None)\r\n .then(async (stores: OrgUnitLocation[]) => {\r\n // Constructing a store mapping based on the InventoryId.\r\n const storeMap = new Map();\r\n stores.forEach(store => {\r\n if (store.InventoryLocationId) {\r\n storeMap.set(store.InventoryLocationId, store);\r\n }\r\n });\r\n\r\n let locationDeliveryOptions: ChannelDeliveryOption[] | undefined = [];\r\n\r\n // If multiple pickup mode is enable then call getchanneldeliveryoption\r\n if (retailMulitplePickupMFeatureState) {\r\n const orgUnitChannel = stores.map(store => store.ChannelId);\r\n locationDeliveryOptions = await _getLocationPickUpDeliveryModes(orgUnitChannel, ctx);\r\n }\r\n\r\n const excludedStores = input.ExcludeLocations ?? [];\r\n const filteredStores = stores\r\n .filter(store => !excludedStores.includes(store.ChannelId))\r\n .sort((a, b) => a.OrgUnitName!.localeCompare(b.OrgUnitName!));\r\n const availabilityPromiseList = filteredStores.map(store => {\r\n const locationDeliveryOption = locationDeliveryOptions?.find(\r\n _channeldeliveryoption => _channeldeliveryoption.ChannelId === store.ChannelId\r\n );\r\n return _getAvailabilityWithHours(store, productInventoryInformation, storeMap, ctx, locationDeliveryOption);\r\n });\r\n\r\n return Promise.all(availabilityPromiseList);\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace('[GetFullAvailableInventoryNearby] error getting Available Inventory Nearby');\r\n ctx.trace(error.message);\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting Available Inventory Nearby');\r\n return [];\r\n });\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(\r\n '[GetFullAvailableInventoryNearby][getEstimatedAvailabilityAsync] error getting availability product warehouse information.'\r\n );\r\n ctx.trace(error.message);\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug(\r\n '[GetFullAvailableInventoryNearby][getEstimatedAvailabilityAsync] error getting availability product warehouse information.'\r\n );\r\n return [];\r\n });\r\n}\r\n\r\n/**\r\n * Action method that obtains the store information along with store hours and product availability.\r\n * @param orgUnitLocation - The org unit location.\r\n * @param productInventoryInformation - The product inventory information.\r\n * @param storeMap - A map that contains store information group by the inventory location id.\r\n * @param ctx The action context.\r\n * @param channelDeleiveryOptions - The channel delivery options.\r\n * @returns IFullOrgUnitAvailability - The full org unit availability.\r\n */\r\nasync function _getAvailabilityWithHours(\r\n orgUnitLocation: OrgUnitLocation,\r\n productInventoryInformation: IProductInventoryInformation[],\r\n storeMap: Map,\r\n ctx: IActionContext,\r\n channelDeleiveryOptions: ChannelDeliveryOption | undefined\r\n): Promise {\r\n if (!orgUnitLocation || !orgUnitLocation.OrgUnitNumber) {\r\n return { OrgUnitAvailability: undefined };\r\n }\r\n\r\n return getStoreHoursAsync({ callerContext: ctx }, orgUnitLocation.OrgUnitNumber)\r\n .then((hours: StoreHours) => {\r\n const itemAvailabilities: ItemAvailability[] = [];\r\n if (productInventoryInformation && storeMap) {\r\n productInventoryInformation.forEach(element => {\r\n if (\r\n element.InventLocationId &&\r\n storeMap.has(element.InventLocationId) &&\r\n element.InventLocationId === orgUnitLocation.InventoryLocationId\r\n ) {\r\n itemAvailabilities.push({ AvailableQuantity: element.ProductAvailableQuantity?.AvailableQuantity });\r\n }\r\n });\r\n }\r\n\r\n const availability: OrgUnitAvailability = {\r\n OrgUnitLocation: orgUnitLocation,\r\n ItemAvailabilities: itemAvailabilities\r\n };\r\n\r\n if (hours && !(hours instanceof Error)) {\r\n return {\r\n OrgUnitAvailability: availability,\r\n StoreHours: hours,\r\n ProductInventoryInformation: productInventoryInformation,\r\n OrgUnitPickUpDeliveryModes: channelDeleiveryOptions\r\n };\r\n }\r\n\r\n return {\r\n OrgUnitAvailability: availability,\r\n ProductInventoryInformation: productInventoryInformation,\r\n OrgUnitPickUpDeliveryModes: channelDeleiveryOptions\r\n };\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace('[GetFullAvailableInventoryNearby] error getting availability with hours');\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting availability with hours');\r\n return { OrgUnitAvailability: {} };\r\n });\r\n}\r\n\r\n/**\r\n * Action method that obtains the channel delivery option information.\r\n * @param channelCollection - The org unit channel Id list.\r\n * @param ctx - The action context.\r\n * @returns ChannelDeliveryOption - The channel delivery option collection.\r\n */\r\nasync function _getLocationPickUpDeliveryModes(\r\n channelCollection: (number | undefined)[],\r\n ctx: IActionContext\r\n): Promise {\r\n if (channelCollection?.length === 0 || channelCollection === undefined) {\r\n return undefined;\r\n }\r\n\r\n const channelIdList: number[] = [];\r\n channelCollection?.map(id => {\r\n if (id !== undefined) {\r\n channelIdList.push(id);\r\n }\r\n });\r\n\r\n // To get all channel pickup delivery mode filterOption should be 4\r\n return getChannelDeliveryOptionsAsync({ callerContext: ctx }, channelIdList, 4)\r\n .then((channelDeliveryOptions: ChannelDeliveryOption[]) => {\r\n if (channelDeliveryOptions && !(channelDeliveryOptions instanceof Error)) {\r\n return channelDeliveryOptions;\r\n }\r\n\r\n return undefined;\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(\r\n '[GetFullAvailableInventoryNearby][getChannelDeliveryOptionsAsync] error getting availability with channel delivery options'\r\n );\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug(\r\n '[GetFullAvailableInventoryNearby] [getChannelDeliveryOptionsAsync] error getting availability with channel delivery options'\r\n );\r\n return [];\r\n });\r\n}\r\n\r\n/**\r\n * The complete getFullAvailableInventoryNearby data action.\r\n */\r\nexport const getFullAvailableInventoryNearbyActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-full-available-inventory-nearby',\r\n action: >getFullAvailableInventoryNearbyAction,\r\n input: createGetFullAvailableInventoryNearbyInput\r\n});\r\n\r\nexport default getFullAvailableInventoryNearbyActionDataAction;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ProductAvailableQuantity } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * This setting defines the delivery modes supported.\r\n */\r\nexport enum DeliveryMode {\r\n allWareHouses = 0,\r\n shipping = 1,\r\n pickup = 2\r\n}\r\n\r\n/**\r\n * This setting defines the inventory levels supported.\r\n */\r\nexport enum InventoryLevels {\r\n physicalAvailable = 'physicalAvailable',\r\n totalAvailable = 'totalAvailable',\r\n threshold = 'threshold'\r\n}\r\n\r\n/**\r\n * Product inventory information class.\r\n */\r\nexport interface IProductInventoryInformation {\r\n ProductAvailableQuantity: ProductAvailableQuantity;\r\n StockLevelCode?: string;\r\n StockLevelLabel?: string;\r\n IsProductAvailable: boolean;\r\n InventLocationId?: string;\r\n deliveryType?: DeliveryMode;\r\n}\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['dobbies-buybox-store-selector'] = {\n c: () => require('partner/modules/dobbies-buybox-store-selector/dobbies-buybox-store-selector.tsx'),\n $type: 'containerModule',\n da: [{name:'availabilitiesWithHours', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby', runOn: 1},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant', runOn: 0},{name:'getAllAvailableStoresInventory', path:'actions/get-all-available-inventory-nearby', runOn: 1},{name:'storeLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information', runOn: 1},{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: 'dobbies-buybox-store-selector',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dobbies-buybox-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-delivery-options-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant');\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-all-available-inventory-nearby';\n let dataAction = require('partner/actions/get-all-available-inventory-nearby');\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|dobbies-buybox-store-selector|dobbies-buybox-store-selector'] = {\n c: () => require('partner/modules/dobbies-buybox-store-selector/dobbies-buybox-store-selector.view.tsx'),\n cn: '__local__-__local__-dobbies-buybox-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":["GetAllAvailableInventoryNearbyInput","constructor","_productId","_latitude","_longitude","_radius","_DistanceUnitValue","_IgnoreLocation","_ExcludeLocations","getCacheKey","getCacheObjectType","dataCacheType","this","productId","latitude","longitude","radius","DistanceUnitValue","IgnoreLocation","ExcludeLocations","createGetFullAvailableInventoryNearbyInput","inputData","async","getFeatureState","context","getFeatureStateAction","FeatureStateInput","getAllAvailableInventoryNearbyAction","input","ctx","_featureState$find","searchArea","Latitude","Longitude","Radius","featureState","retailMulitplePickupMFeatureState","find","item","Name","IsEnabled","searchCriteria","createInventoryAvailabilitySearchCriteria","DeliveryMode","pickup","getEstimatedAvailabilityAsync","callerContext","then","productInventoryInformation","mapProductInventoryInformation","productWarehouseInformation","ProductWarehouseInventoryAvailabilities","getOrgUnitLocationsByAreaAsync","DeliveryModeTypeFilter","None","_input$ExcludeLocatio","storeMap","Map","stores","forEach","store","InventoryLocationId","set","locationDeliveryOptions","orgUnitChannel","map","ChannelId","channelCollection","length","undefined","channelIdList","id","push","getChannelDeliveryOptionsAsync","channelDeliveryOptions","Error","catch","error","trace","message","telemetry","exception","debug","_getLocationPickUpDeliveryModes","excludedStores","availabilityPromiseList","filter","includes","sort","a","b","OrgUnitName","localeCompare","_locationDeliveryOpti","locationDeliveryOption","_channeldeliveryoption","orgUnitLocation","channelDeleiveryOptions","OrgUnitNumber","OrgUnitAvailability","getStoreHoursAsync","hours","itemAvailabilities","element","_element$ProductAvail","InventLocationId","has","AvailableQuantity","ProductAvailableQuantity","availability","OrgUnitLocation","ItemAvailabilities","ProductInventoryInformation","OrgUnitPickUpDeliveryModes","StoreHours","_getAvailabilityWithHours","Promise","all","getFullAvailableInventoryNearbyActionDataAction","createObservableDataAction","action","PickUpOptionList","React","props","super","_onSelect","e","preventDefault","deliveryCode","currentTarget","getAttribute","onChange","_rendeDeliveryOptions","bind","_pickupListOptionMenu","state","expandSiteOptions","render","pickupListOptionMenuText","pickupmodeList","className","onClick","role","ref","delivery","key","Code","tabIndex","Description","expandSiteOptionsState","setState","StorePickUpOptionList","isExpandOptionsState","isFilterExpanded","event","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","onKeyDown","secondsToTime","seconds","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","buildStoreHours","storeHoursList","mondayHours","tuesdayHours","wednesdayHours","thursdayHours","fridayHours","saturdayHours","sundayHours","periodStart","periodEnd","StoreSelectorLocationLineItemComponentActions","onLocationSelected","deliveryMode","handlers","onSelected","location","onSetAsPreferredStore","onRemovePreferredStore","onPickupInStoreClickHandler","onPickupModeSelectHandler","pickupMode","onSetPreferredStoreClickHandler","removePreferredStoreHandler","onChangeHandler","resolve","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","_delivery","StoreSelectorLocationLineItemComponent","hideStockStatus","isCurrentLocation","isInStock","storeLocatorView","index","preferredStoreLocationId","isPreferredStoreEnabled","isLocationDisabled","telemetryContent","productPickUpOptionList","CncPickupIds","localStoreHeading","storeName","distanceAsString","buildDistanceString","distance","preferredDistanceUnit","Distance","storeAddress","Address","canSelectLocation","pickupInStoreButtonText","selectLocation","pickupInStoreAriaLabel","selectLocationAriaLabelFormat","replace","isPreferredStore","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","attributes","getTelemetryAttributes","contentAction","etext","PreferredStore","preferredStoreAttr","RemovePreferredStore","RemovePreferredStoreAttr","deliveryOptionList","isHover","setIsHover","storeAddressText","slice","storeStatus","isDisplayProduct","stockStatusLabel","style","marginLeft","storeHoursHeader","renderStoreHours","RegularStoreHours","displayTime","JSON","stringify","title","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","currentLocation","Object","assign","onMouseLeave","onMouseEnter","renderPickupModes","filteredPickupMode","showCnC","preferredStoreAriaLabel","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStoreText","StoreSelectorLocationLines","onClickHandler","_getStoreAvailableQuantity","_stores$OrgUnitAvaila","_stores$OrgUnitAvaila2","_scrollIntoView","selectedLocationDiv","selectedLocationRef","current","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","enableOutOfStockCheck","_stockInventoryLabel","availabilityWithHours","i","_availabilityWithHour","StockLevelLabel","_mapResources","contactInfoHeader","contactText","timeText","availabilityInfoHeader","availabilityText","storeHoursClosedText","outOfStock","outOfStockText","inStock","inStockText","selectedStoreLocationText","selectStoreText","selectStoreAriaFormatText","quantityText","storeHoursMondayText","storeHoursTuesdayText","storeHoursWednesdayText","storeHoursThursdayText","storeHoursFridayText","storeHoursSaturdayText","storeHoursSundayText","storeHoursMondayFullText","storeHoursTuesdayFullText","storeHoursWednesdayFullText","storeHoursThursdayFullText","storeHoursFridayFullText","storeHoursSaturdayFullText","storeHoursSundayFullText","storeCounter","componentDidUpdate","prevProps","selectedStoreLocationId","componentDidMount","locations","_stores","_sortStores","_sortedStores","_sortedStores2","sortedStores","sortByLocation","removeStockBridgeStoreForCnC","_store$OrgUnitAvailab","removeStockBridgeStoreForCheckStock","_store$OrgUnitAvailab2","classnames","show","displayList","storeHeadingForLocalStore","_renderStoreLocation","_store$OrgUnitAvailab3","deliveryOptions","_store$OrgUnitAvailab4","pickupStoreIds","selected","ArrayExtensions","hasElements","toString","showQuantity","showStoreAvailableQuantity","DeliveryOptions","productPickUpDeliveryOptions","value","_value$OrgUnitAvailab","__decorate","observable","observer","StoreSelectorSearchForm","searchBoxRef","_handleKeyPressPrev","keyCode","KeyCodes","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","target","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","onToggleListMapViewState","toggleMapViewAttributes","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","isMapDisabled","showAllStores","sortLocations","allStore","name","autoComplete","onSubmit","type","searchInputAriaLabel","placeholder","disabled","color","onKeyUp","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","mode","searchRadiusUnit","StoreSelector","handleLinkTextChange","config","termsOfServiceLink","handleHeadingChange","heading","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","actionContext","channel","data","storeSelectorStateManager","result","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","_objectSpread","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","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","_removePreferredStore","clearPreferredStore","_setSelectedStore","setSelectedStoreLocationId","_this$state$allStore","_filteredStore$","searchTerm","isSearchInProgress","isSeeAllStoreValue","filteredStore","str","_str$OrgUnitAvailabil","_searchTerm$trim","_searchTerm$trim2","_str$OrgUnitAvailabil2","_str$OrgUnitAvailabil3","toLowerCase","trim","searchStoreStr","Zip","geoLocate","_updateLocations","styleEnum","dialog","inline","isDialogOpen","getAllAvailableStoreInventoryNearby","navigator","geolocation","getCurrentPosition","position","coords","PERMISSION_DENIED","_closeDialog","_storeSelectorStateMa","parentElementRef","focus","closeDialog","_setOrgUnitStoreInformation","styleDefault","setOrgUnitStoreInformation","showMapViewLink","isDialog","orgUnitStoreInformation","calRadius","distanceUnitValue","product","pickupStores","searchOrgUnitLocationsAsync","bypassCache","DeliveryModeTypeFilterValue","shippingStores","pickupIds","excludedIds","RecordId","allStoresNearBy","warning","lookupRadius","kilometers","modeDefault","preferredStore","lat","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","CnCPickupIds","GetFullAvailableInventoryNearbyInput","getFullAvailableInventoryNearby","_onOrgUnitLocationSelected","selectedLocation","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","totalStoreCount","latitudeVal","longitudeVal","radiusVal","searchString","getTelemetryObject","request","telemetryPageName","friendlyName","_this$props$data$stor4","autoSuggestionEnabled","_options$DeliveryOpti","isCnC","opt","setTimeout","reaction","_this$props$data$stor2","_this$props$data$stor3","BingMapsEnabled","_this$props$data$stor5","_this$props$context","_this$props$context2","loadMapApi","lang","locale","market","_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","urlRoutes","url","requestUrl","pathname","split","productRecordId","parsedRecordId","Number","getProductAttributes","_inStoreAttribute$Tex","apiSettings","channelId","catalogId","customAttributes","getAttributeValuesAsync","queryResultSettings","inStoreAttribute","attr","_attr$Name","TextValue","shouldComponentUpdate","nextProps","_this$props$data$avai","_this$props$data$avai2","_this$props$config$st","ids","f","_item$OrgUnitAvailabi","_item$OrgUnitAvailabi2","_this$props$data$avai3","storeSelectorHeaderText","_storeSelectorStateMa2","_storeSelectorStateMa3","_storeLocationList","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","enablePickupFilterToShowStore","showLiveQuantity","app","appConfig","inlineView","hideInventory","listMapViewState","showLocationView","isMapModuleLoaded","StoreSelectorActions","toggleListMapViewState","configHeading","kilometersShortText","preferredLocationId","StoreId","storeLocationList","enableOutofStock","enableStockCheck","locationListProps","_getStoreLocationListProps","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","outOfStockThreshold","noLocationsMessage","terms","headerText","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","renderView","hasEnabledOutOfStockCheck","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","selectedStoreLocation","lineResources","locationOpen","openFrom","openTo","Module","Node","borderBottom","padding","featureNames","createGetFeatureStateInput","getFeatureStatesAsync","getFeatureStateActionDataAction","getFullAvailableInventoryNearbyAction","InventoryLevels","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","viewDictionary","cn","BaseStoreSelectorStateManager","displayMap","preferredStoreLocalStorageKey","_readFromToCookie","storeInfo","parse","_unused","_context","writeToCookie","arguments","StoreName","_writeToCookie","_removeCookie","MsDyn365","isBrowser","localStorage","removeItem","setItem","cookieValue","getItem","computed","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchContent","jsonp","crypto","getRandomValues","Uint32Array","query","encodeURI","geolocationApiUrl","script","document","createElement","setAttribute","remove","resourceSets","point","coordinates","body","appendChild","_document","StringExtensions","isNullOrEmpty","getElementById","currentWindowAPI","mapAPIReady","reject","_document2","_document3","defer","src","addEventListener","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","module","exports","ReactDOM"],"sourceRoot":""}