{"version":3,"file":"static/js/14c53ed8f83af41dc0e0.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./src/actions/get-full-available-inventory-nearby.action.ts?562c","webpack://henrys-ecommerce/./src/actions/get-product-promotions.action.ts?ea24","webpack://henrys-ecommerce/./src/actions/getProductVariantOrMaster.ts?9116","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?3934","webpack://henrys-ecommerce/./src/modules/store-selector/components/pickup-option-list.tsx?8604","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-pickup-option-list.tsx?8db3","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?5eda","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-lines.tsx?9c63","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-search-form.tsx?de2d","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-small-components.tsx?6ab0","webpack://henrys-ecommerce/./src/modules/store-selector/components/selected-store/selected-store.tsx?5f8b","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.props.autogenerated.ts?739b","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.tsx?ad87","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.view.tsx?46a3","webpack://henrys-ecommerce/./lib/store-selector/module-registration.js?8817","webpack://henrys-ecommerce/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://henrys-ecommerce/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://henrys-ecommerce/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.view.tsx?71a6","webpack://henrys-ecommerce/./src/modules/store-selector/components/pickup-option-list.tsx?dae0","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-pickup-option-list.tsx?7a25","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers.ts?fe27","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-line-item/store-selector-location-line-item.components.tsx?923d","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-location-lines.tsx?87ff","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-search-form.tsx?fb9a","webpack://henrys-ecommerce/./src/modules/store-selector/components/store-selector-small-components.tsx?4335","webpack://henrys-ecommerce/./src/modules/store-selector/components/selected-store/selected-store.tsx?bfbc","webpack://henrys-ecommerce/./src/modules/store-selector/store-selector.tsx?e416","webpack://henrys-ecommerce/./src/modules/adventureworks/views/store-selector.view.tsx?ccdd","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["// base on @msdyn365-commerce-modules/retail-actions/get-full-available-inventory-nearby\r\n\r\nimport { createObservableDataAction, IAction, ICreateActionContext, IGeneric, IAny, IActionContext } from '@msdyn365-commerce/core';\r\nimport {\r\n ChannelDeliveryOption,\r\n DeliveryModeTypeFilter,\r\n ItemAvailability,\r\n OrgUnitAvailability,\r\n OrgUnitLocation,\r\n ProductWarehouseInventoryInformation,\r\n SearchArea,\r\n StoreHours,\r\n ProductsDataActions,\r\n OrgUnitsDataActions\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getDimensionValuesFromQuery,\r\n IFullOrgUnitAvailability,\r\n DeliveryMode,\r\n IProductInventoryInformation,\r\n QueryResultSettingsProxy,\r\n createInventoryAvailabilitySearchCriteria,\r\n mapProductInventoryInformation,\r\n GetFullAvailableInventoryNearbyInput,\r\n getFeatureState,\r\n createGetFeatureStateInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { GetProductPromotionsInput, getProductPromotionsAction } from './get-product-promotions.action';\r\n\r\nexport const mergeBonusProductInventoryInformation = (\r\n productInventoryInformation: IProductInventoryInformation[],\r\n productId: number,\r\n bonusItemIds: number[]\r\n) => {\r\n // Merge availabilities with bonus items\r\n if (bonusItemIds.length > 0) {\r\n const mergedProductInventoryInformation = productInventoryInformation\r\n .filter(p => p.ProductAvailableQuantity.ProductId === productId)\r\n .map(p => {\r\n productInventoryInformation\r\n .filter(\r\n bonusItemInv =>\r\n bonusItemInv.InventLocationId === p.InventLocationId &&\r\n bonusItemInv.ProductAvailableQuantity.ProductId !== productId\r\n )\r\n .forEach(bonusItemInv => {\r\n if (\r\n (bonusItemInv.ProductAvailableQuantity.AvailableQuantity ?? 0) === 0 &&\r\n (p.ProductAvailableQuantity.AvailableQuantity ?? 0) > 0\r\n ) {\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('getFullAvailableInventoryNearbyAction', 'missing bonus item', p, bonusItemInv);\r\n\r\n p.ProductAvailableQuantity.AvailableQuantity = bonusItemInv.ProductAvailableQuantity.AvailableQuantity;\r\n p.IsProductAvailable = false;\r\n p.StockLevelCode = bonusItemInv.StockLevelCode;\r\n p.StockLevelLabel = bonusItemInv.StockLevelLabel;\r\n }\r\n });\r\n return p;\r\n });\r\n\r\n process.env.NODE_ENV === 'development' && console.log('getFullAvailableInventoryNearbyAction', mergedProductInventoryInformation);\r\n return mergedProductInventoryInformation;\r\n }\r\n\r\n return productInventoryInformation;\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 * 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(createGetFeatureStateInput({ requestContext: ctx.requestContext }), ctx);\r\n const retailMulitplePickupMFeatureState = featureState?.find(\r\n item => item.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n )?.IsEnabled;\r\n\r\n const matchingDimensionValues = getDimensionValuesFromQuery(ctx.requestContext.url.requestUrl);\r\n const getProductPromotionsInput = new GetProductPromotionsInput(input.productId, matchingDimensionValues);\r\n const promotions = await getProductPromotionsAction(getProductPromotionsInput, ctx);\r\n const bonusItemIds = promotions.FreeItemProductIds ?? [];\r\n\r\n process.env.NODE_ENV === 'development' && console.log('getFullAvailableInventoryNearbyAction', bonusItemIds);\r\n\r\n const searchCriteria = createInventoryAvailabilitySearchCriteria(\r\n ctx,\r\n [input.productId, ...bonusItemIds],\r\n false,\r\n true,\r\n searchArea,\r\n DeliveryMode.pickup\r\n );\r\n return ProductsDataActions.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 let productInventoryInformation = mapProductInventoryInformation(\r\n ctx,\r\n productWarehouseInformation.ProductWarehouseInventoryAvailabilities\r\n );\r\n\r\n process.env.NODE_ENV === 'development' && console.log('getFullAvailableInventoryNearbyAction', productInventoryInformation);\r\n\r\n productInventoryInformation = mergeBonusProductInventoryInformation(\r\n productInventoryInformation,\r\n input.productId!,\r\n bonusItemIds\r\n );\r\n\r\n return OrgUnitsDataActions.getOrgUnitLocationsByAreaAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n searchArea,\r\n DeliveryModeTypeFilter.Pickup\r\n )\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 availabilityPromiseList = stores.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 OrgUnitsDataActions.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?.forEach(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 OrgUnitsDataActions.getChannelDeliveryOptionsAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n channelIdList,\r\n 4\r\n )\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: 'hei-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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getSelectedProductIdFromActionInput, getDimensionValuesFromQuery } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ProductDimension, retailAction } from '@msdyn365-commerce/retail-proxy';\r\nimport { IGetProductPromotionResponse } from './DataServiceEntities.g';\r\nimport { getProductPromotionsV2Input } from './DataActionExtension.g';\r\nimport { getProductVariantOrMaster } from './getProductVariantOrMaster';\r\n\r\n/**\r\n * GetProductPromotions Input Action\r\n */\r\nexport class GetProductPromotionsInput implements Msdyn365.IActionInput {\r\n public readonly recordId: number;\r\n public readonly dimensionValues: ProductDimension[];\r\n\r\n constructor(recordId: number, dimensionValues: ProductDimension[]) {\r\n this.recordId = recordId;\r\n this.dimensionValues = dimensionValues;\r\n }\r\n\r\n public getCacheKey = () => `${this.recordId}-${this.dimensionValues.map(v => v.DimensionValue?.Value ?? '').join('|')}`;\r\n public getCacheObjectType = () => 'HEI-ProductPromotions';\r\n public dataCacheType = (): Msdyn365.CacheType => (process.env.NODE_ENV === 'development' ? 'application' : 'none');\r\n}\r\n\r\nconst createInput = (context: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n const matchingDimensionValues = getDimensionValuesFromQuery(context.requestContext.url.requestUrl);\r\n const productId = getSelectedProductIdFromActionInput(context);\r\n if (productId) {\r\n return new GetProductPromotionsInput(+productId, matchingDimensionValues);\r\n } else {\r\n throw new Error('Unable to create GetProductPromotionsInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\nexport async function getProductPromotionsAction(\r\n input: GetProductPromotionsInput,\r\n context: Msdyn365.IActionContext\r\n): Promise {\r\n const matchingDimensionValues = input.dimensionValues;\r\n process.env.NODE_ENV === 'development' && console.log('get-product-promotions.action', input.recordId, matchingDimensionValues);\r\n const productVariant = await getProductVariantOrMaster(input.recordId, matchingDimensionValues, context);\r\n\r\n const distinctProductVariantId = productVariant.RecordId;\r\n process.env.NODE_ENV === 'development' && console.log('get-product-promotions.action', input.recordId, distinctProductVariantId);\r\n const productPromotionsInput = getProductPromotionsV2Input(input.recordId, distinctProductVariantId);\r\n return retailAction(productPromotionsInput, context);\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >getProductPromotionsAction,\r\n id: 'hei-get-product-promotions',\r\n input: createInput\r\n // isBatched: true\r\n});\r\n","import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n QueryResultSettingsProxy,\r\n generateProductImageUrl,\r\n createInventoryAvailabilitySearchCriteria,\r\n ArrayExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n ProductDimension,\r\n ProductDimensionAvailabilitySearchCriteria,\r\n ProductsDataActions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\r\n\r\n/**\r\n * Retrieves product dimensions with availabilities.\r\n * @param product - Product for which the dimensions need to be retrieved.\r\n * @param matchingDimensionValues - Selected dimensions - filter criteria for the dimensions API.\r\n * @param context - Action context.\r\n * @param catalogId - Catalog id.\r\n * @returns Array of dimensions.\r\n */\r\nconst getFullDimensions = async (\r\n product: SimpleProduct,\r\n matchingDimensionValues: ProductDimension[],\r\n context: Msdyn365.IActionContext,\r\n catalogId?: number\r\n) => {\r\n let fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = [];\r\n const fullDimensionPromises = (product.Dimensions ?? []).map(dimension => {\r\n const shippingInventoryConfiguration = createInventoryAvailabilitySearchCriteria(context, [], true, undefined, undefined);\r\n const searchCriteria: ProductDimensionAvailabilitySearchCriteria = {\r\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\r\n MatchingDimensionValues: matchingDimensionValues,\r\n DefaultWarehouseOnly: shippingInventoryConfiguration.DefaultWarehouseOnly,\r\n FilterByChannelFulfillmentGroup: shippingInventoryConfiguration.FilterByChannelFulfillmentGroup,\r\n DeliveryModeTypeFilterValue: shippingInventoryConfiguration.DeliveryModeTypeFilterValue,\r\n CatalogId: catalogId\r\n };\r\n const dimensionValuesPromise = ProductsDataActions.getDimensionValuesWithEstimatedAvailabilitiesAsync(\r\n { callerContext: context, queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context) },\r\n product.MasterProductId ? product.MasterProductId : product.RecordId,\r\n searchCriteria\r\n );\r\n\r\n return dimensionValuesPromise.then(dimensionValues => {\r\n const fullDimension: IProductDimensionsWithAvailabilitiesFull = {\r\n ...dimension,\r\n dimensionValuesWithInventory: dimensionValues\r\n };\r\n return fullDimension;\r\n });\r\n });\r\n fullDimensions = await Promise.all(fullDimensionPromises);\r\n return fullDimensions;\r\n};\r\n\r\n/**\r\n * Retrieves product variant for the given input or undefined if not found.\r\n * @param input - Action input.\r\n * @param context - Action context.\r\n * @param fullDimensions - Product dimensions with availabilities.\r\n * @returns A product variant that is available or undefined.\r\n */\r\nconst getProductVariant = async (context: Msdyn365.IActionContext, fullDimensions: IProductDimensionsWithAvailabilitiesFull[]) => {\r\n let productVariant: SimpleProduct | undefined;\r\n if (\r\n ArrayExtensions.hasElements(fullDimensions) &&\r\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory) &&\r\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory[0].ProductIds)\r\n ) {\r\n const variantProductId = fullDimensions[0].dimensionValuesWithInventory[0].ProductIds[0];\r\n const result = await ProductsDataActions.getByIdsAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\r\n //bypassCache: input.bypassCache\r\n },\r\n context.requestContext.apiSettings.channelId,\r\n [variantProductId],\r\n null,\r\n context.requestContext.apiSettings.catalogId\r\n );\r\n productVariant = result[0];\r\n productVariant = { ...productVariant };\r\n const variantImageUrl = generateProductImageUrl(productVariant, context.requestContext.apiSettings);\r\n\r\n if (variantImageUrl) {\r\n productVariant.PrimaryImageUrl = variantImageUrl;\r\n }\r\n }\r\n\r\n return productVariant;\r\n};\r\n\r\n/**\r\n * Checks if given product has any unmatched dimensions.\r\n * Modifies product entity to use matched dimension values.\r\n * @param product - The product to analyze and modify.\r\n * @param matchingDimensionValues - Matched dimensions.\r\n * @returns True if has any unmatched dimension, false if all dimensions are specified.\r\n */\r\nconst checkIfHasUnmatchedDimensions = (product: SimpleProduct, matchingDimensionValues: ProductDimension[]): boolean => {\r\n let hasUnmatchedDimension: boolean = false;\r\n if (product.Dimensions) {\r\n product.Dimensions = product.Dimensions.map(dimension => {\r\n return { ...dimension };\r\n });\r\n for (const dimension of product.Dimensions) {\r\n const matchedTargetDimension = matchingDimensionValues.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n\r\n if (matchedTargetDimension) {\r\n dimension.DimensionValue = matchedTargetDimension.DimensionValue;\r\n } else {\r\n hasUnmatchedDimension = true;\r\n }\r\n }\r\n }\r\n return hasUnmatchedDimension;\r\n};\r\n\r\nconst getProductVariantOrMaster = async (\r\n productId: number,\r\n matchingDimensionValues: ProductDimension[],\r\n context: Msdyn365.IActionContext\r\n) => {\r\n const result = await ProductsDataActions.getByIdsAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\r\n // bypassCache: input.bypassCache\r\n },\r\n context.requestContext.apiSettings.channelId,\r\n [productId],\r\n null,\r\n context.requestContext.apiSettings.catalogId\r\n );\r\n\r\n let product = result[0];\r\n\r\n // Need to dereference this before editing it. Otherwise we might not\r\n // properly get the mobx events because if things aren't properly observable\r\n // they won't fire when you set them, and then if you don't deref the value in\r\n // the cache will match the value when you try to save it, so it won't detect any\r\n // changes there either\r\n product = { ...product };\r\n\r\n // Not all dimensions are selected\r\n if (matchingDimensionValues.find(dv => !dv.DimensionValue)) {\r\n return product;\r\n }\r\n\r\n const hasUnmatchedDimension = checkIfHasUnmatchedDimensions(product, matchingDimensionValues);\r\n\r\n if (hasUnmatchedDimension) {\r\n return product;\r\n }\r\n\r\n const fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = await getFullDimensions(\r\n product,\r\n matchingDimensionValues,\r\n context,\r\n context.requestContext.apiSettings.catalogId\r\n );\r\n\r\n // Retrieve product variants only if matching dimensions are provided.\r\n const productVariant: SimpleProduct | undefined = ArrayExtensions.hasElements(matchingDimensionValues)\r\n ? await getProductVariant(context, fullDimensions)\r\n : undefined;\r\n\r\n return productVariant ?? product;\r\n};\r\n\r\nexport { getProductVariantOrMaster };\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\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Interface Pickup option list.\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\n/**\r\n * Interface pickup option list state.\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 private readonly _pickupListOptionButton: React.RefObject;\r\n\r\n private readonly eventsToBeBind = ['click', 'touchstart'];\r\n\r\n public constructor(props: IPickUpOptionListProps) {\r\n super(props);\r\n this._renderDeliveryOptions = this._renderDeliveryOptions.bind(this);\r\n this._pickupListOptionMenu = React.createRef();\r\n this._pickupListOptionButton = React.createRef();\r\n this.state = {\r\n expandSiteOptions: false\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n for (const event of this.eventsToBeBind) {\r\n window.addEventListener(event, this.handleDocumentClick, true);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n for (const event of this.eventsToBeBind) {\r\n window.removeEventListener(event, this.handleDocumentClick, true);\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 {pickupListOptionMenuText}\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 /**\r\n * Handle the document click.\r\n * @param event -- Event object.\r\n */\r\n private readonly handleDocumentClick = (event: Event): void => {\r\n const htmlElement = event.target as HTMLElement;\r\n if (\r\n !(\r\n (this._pickupListOptionButton.current !== null &&\r\n (event.target === this._pickupListOptionButton.current ||\r\n this._pickupListOptionButton.current.contains(htmlElement))) ||\r\n (this._pickupListOptionMenu.current !== null &&\r\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement)))\r\n )\r\n ) {\r\n this.setState({\r\n expandSiteOptions: false\r\n });\r\n }\r\n };\r\n\r\n private _renderDeliveryOptions(event: React.MouseEvent): void {\r\n event.stopPropagation();\r\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\r\n this.setState({\r\n expandSiteOptions: !isExpandSiteOptionsState\r\n });\r\n }\r\n\r\n /**\r\n * Select Delivery option.\r\n * @param event -- Event Object.\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 && 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 const role = 'menu';\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 { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n IPayLoad,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { PickUpOptionList } from '../pickup-option-list';\r\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\r\n\r\n/**\r\n * Store Locator line item resources.\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 pickupDeliveryOptionErrorMessage?: 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\n/**\r\n * Store Locator line item props.\r\n */\r\nexport interface IStoreSelectorLocationLineItemProps {\r\n location: OrgUnitLocation;\r\n storeHours?: StoreHours;\r\n\r\n storeUrl?: string;\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 filteredPickupMode?: string;\r\n shouldShowIndex?: boolean;\r\n\r\n /**\r\n * The telemetry content.\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}\r\n\r\n/**\r\n * Store Locator line item action component.\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\n/**\r\n * Function to render store hours.\r\n * @param storeHours - Store Hours object.\r\n * @param location - Store Unit.\r\n * @param resources - Resources.\r\n * @returns - Jsx element.\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?.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\n/**\r\n * Function to return distance measure unit.\r\n * @param distance - Store location within radius.\r\n * @param preferredDistanceUnit - Unit configuration.\r\n * @param isLocationDisabled - Flag to check user location.\r\n * @returns - Unit of distance.\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\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\r\n if (!contacts) {\r\n return undefined;\r\n }\r\n\r\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\r\n\r\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\r\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\r\n\r\n if (primaryPhoneContact) {\r\n return primaryPhoneContact.Locator;\r\n }\r\n\r\n return allPhoneContacts[0].Locator;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\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\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\r\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\r\n};\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\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\r\n};\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\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\r\n};\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\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/**\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\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 (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method to check if we have atleast one common delivery code between product and channel.\r\n * @param productdeliveryOptions - Product DeliveryOption List.\r\n * @param storePickUpOptionList - Channel DeliveryOption List.\r\n * @returns DeliveryOptionList.\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\n/**\r\n * Renders store location line items.\r\n * @param props - Store location line items props.\r\n * @returns - HTML.\r\n */\r\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\r\n const {\r\n storeUrl,\r\n hideStockStatus,\r\n isCurrentLocation,\r\n isInStock,\r\n location,\r\n resources,\r\n storeHours,\r\n stockStatusLabel,\r\n storeLocatorView,\r\n index,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n isLocationDisabled,\r\n telemetryContent,\r\n storePickUpOptionList,\r\n productPickUpOptionList,\r\n shouldShowIndex\r\n } = props;\r\n\r\n const storeName: string | undefined = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\r\n const storeAddress: string | undefined = location.Address;\r\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\r\n\r\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\r\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\r\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\r\n const canSelectLocation = hideStockStatus || isInStock;\r\n const pickupInStoreButtonText: string = resources.selectLocation;\r\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\r\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\r\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\r\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n const [isError, setError] = React.useState(false);\r\n\r\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\r\n if (deliveryOptionList.length === 0) {\r\n setError(true);\r\n } else {\r\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\r\n }\r\n };\r\n\r\n /* eslint-disable prettier/prettier */\r\n return (\r\n
\r\n
\r\n {(shouldShowIndex || storeLocatorView) && {index}}\r\n \r\n {storeUrl && {storeName}}\r\n {!storeUrl && <>{storeName}}\r\n \r\n {distanceAsString ? \r\n {' '}\r\n {distanceAsString}\r\n : false}\r\n
\r\n
\r\n
\r\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

}\r\n {stockText &&

{stockText}

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

{resources.currentLocation}

\r\n ) : canSelectLocation ? (\r\n deliveryOptionList.length === 1 ? (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n ) : (\r\n renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel)\r\n )\r\n ) : (\r\n false\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 {isError ? (\r\n \r\n \r\n ) : ('')}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Store location line item component.\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 no-duplicate-imports */\r\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { observable, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IStoreSelectorResources } from '../store-selector.props.autogenerated';\r\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './store-selector-location-line-item';\r\n\r\n/**\r\n * Store selector location lines props interface.\r\n */\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: IFullOrgUnitAvailability[];\r\n resources: IStoreSelectorResources;\r\n preferredDistanceUnit?: string;\r\n storeUrlFormat?: 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 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 shouldShowIndex?: boolean;\r\n inStockOnly?: boolean;\r\n\r\n /**\r\n * The telemetry content.\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onLocationSelected(location: OrgUnitLocation | undefined): void;\r\n}\r\n\r\n/**\r\n * Displays all the location line items, or null if none exists.\r\n */\r\n@observer\r\nexport class StoreSelectorLocationLines extends React.PureComponent {\r\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\r\n\r\n private readonly selectedLocationRef: React.RefObject;\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(previousProps: IStoreSelectorLocationLinesProps): void {\r\n if (this.props.selectedStoreLocationId !== previousProps.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 reaction(\r\n () => this.props.locations,\r\n () => {\r\n if (this.props.locations) {\r\n this._stores = this._sortStores(this.props.locations);\r\n }\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(this._stores)) {\r\n return null;\r\n }\r\n\r\n this.storeCounter = 0;\r\n const regex = /\\{OrgUnitNumber\\}/g;\r\n const storeUrlFormat = this.props.storeUrlFormat;\r\n\r\n return (\r\n
\r\n {this._stores.map((store, index) => {\r\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\r\n const orgUnitNumber = orgUnitLocation?.OrgUnitNumber;\r\n const url = orgUnitNumber && storeUrlFormat && storeUrlFormat.replace(regex, orgUnitNumber);\r\n return this._renderStoreLocation(store, index, url);\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 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, storeUrl?: string): 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 if (orgUnitLocation) {\r\n const isInStock = this._isProductInStock(store?.OrgUnitAvailability?.ItemAvailabilities);\r\n if (!isInStock && this.props.inStockOnly) {\r\n return undefined;\r\n }\r\n\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 /**\r\n * Sort store.\r\n * @param stores - Array of stores data.\r\n * @returns Sorted stores array.\r\n */\r\n private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\r\n /**\r\n * IsPreferredStore.\r\n * @param value - Array of stores data.\r\n * @returns IsPreferred store boolean value.\r\n */\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 /**\r\n * Scroll into view.\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 /**\r\n * Is current location.\r\n * @param location - Org unit location.\r\n * @returns The current location.\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 /**\r\n * Check the product is in stock or not.\r\n * @param itemAvailabilities - Item availabilities.\r\n * @returns If the product is in stock.\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 (ArrayExtensions.hasElements(itemAvailabilities)) {\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 /**\r\n * Get the stock inventory label.\r\n * @param availabilityWithHours - Full org unit availability.\r\n * @returns The stock label.\r\n */\r\n private readonly _stockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\r\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\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 /**\r\n * Map resources.\r\n * @param resources - Store resources.\r\n * @returns Resources.\r\n */\r\n private readonly _mapResources = (resources: IStoreSelectorResources): 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 pickupDeliveryOptionErrorMessage: resources.pickupDeliveryOptionErrorMessage,\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\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 React from 'react';\r\n\r\nimport { StorePickUpOptionList } from './store-pickup-option-list';\r\n\r\n/**\r\n * Store Selector Search Form Props interface.\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 inStockOnlyLabel: 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 isLocatorView?: boolean;\r\n inStockOnly: boolean;\r\n toggleInStockOnly: () => void;\r\n\r\n /**\r\n * The telemetry content.\r\n */\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\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 private previousValue: string = '';\r\n\r\n private isSearchResultOpened: boolean = false;\r\n\r\n public 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 inStockOnlyLabel\r\n },\r\n id,\r\n value,\r\n isMapDisabled,\r\n showAllStores,\r\n displayList,\r\n locatorView,\r\n isLocatorView,\r\n inStockOnly,\r\n toggleInStockOnly,\r\n onShowAllStores,\r\n productPickUpDeliveryOptions,\r\n hasEnabledPickupFilterToShowStore\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 {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 displayList\r\n )}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handles the key press on the input box.\r\n * @param event - Event object.\r\n */\r\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\r\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\r\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\r\n // In order to avoid that. Checking if the search result is open or not.\r\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\r\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\r\n if (activeDescedantValue) {\r\n if (this.previousValue === '') {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n return;\r\n }\r\n\r\n if (activeDescedantValue !== this.previousValue) {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n } else {\r\n this.isSearchResultOpened = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Calls method display result.\r\n * @param 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 /**\r\n * Method called on search text changed.\r\n * @param event - Input value.\r\n */\r\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\r\n const inputValue: string = event.target.value;\r\n\r\n await this.props.searchTermChanged(inputValue);\r\n };\r\n\r\n /**\r\n * Method called on search submit.\r\n * @param event - Input value.\r\n */\r\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\r\n event.preventDefault(); // Prevents form submission\r\n this.searchBoxRef.current?.blur();\r\n if (!this.isSearchResultOpened) {\r\n await this.props.performSearch(this.props.value);\r\n }\r\n this.isSearchResultOpened = false;\r\n };\r\n\r\n /**\r\n * Method called on product pickup option change.\r\n * @returns - Void.\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 /**\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 * @param shouldDisplayList - Display List.\r\n * @returns Jsx component.\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 shouldDisplayList?: boolean\r\n ): JSX.Element | null => {\r\n const toggleButtonClass = shouldDisplayList ? 'view-map' : 'list-view';\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 {toggleButtonText}\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 { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IStoreSelectorResources, ITermsOfServiceLinkData } from '../store-selector.props.autogenerated';\r\n\r\nexport interface IStoreSelectorEmptyMessageProps {\r\n resources: IStoreSelectorResources;\r\n}\r\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources }) => (\r\n
\r\n

{resources.emptyLocationsText}

\r\n
\r\n);\r\n\r\nexport const StoreSelectorWaiting: React.FC = () => (\r\n
\r\n \r\n
\r\n);\r\n\r\nexport interface IStoreSelectorTermsOfServiceProps {\r\n link?: ITermsOfServiceLinkData;\r\n requestContext: Msdyn365.IRequestContext;\r\n onTextChange?(event: Msdyn365.ContentEditableEvent): void;\r\n}\r\n\r\nexport const StoreSelectorTermsOfService: React.FC = ({ link, requestContext, onTextChange }) => {\r\n if (link) {\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'ms-store-select__terms-link',\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: '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: IStoreSelectorResources;\r\n locations?: IFullOrgUnitAvailability[];\r\n searchRadius: number;\r\n preferredDistanceUnit: string;\r\n isSeeAllStore: boolean;\r\n}\r\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({\r\n locations,\r\n searchRadius,\r\n resources,\r\n isSeeAllStore,\r\n preferredDistanceUnit\r\n}) => {\r\n if (locations) {\r\n const storeCountMessage =\r\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\r\n return (\r\n
\r\n {isSeeAllStore\r\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\r\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\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, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n IPayLoad,\r\n ITelemetryContent,\r\n NodeTag,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { PickUpOptionList } from '../pickup-option-list';\r\nimport { buildDistanceString, matchDeliveryOptions } from '../store-selector-location-line-item';\r\n\r\n/**\r\n * Store Locator line item resources.\r\n */\r\nexport interface ISelectedStoreResources {\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}\r\n\r\n/**\r\n * Store Selector resources.\r\n */\r\nexport interface ISelectedStoreProps {\r\n className?: string;\r\n shouldHideStockStatus?: boolean;\r\n isCurrentLocation?: boolean;\r\n isInStock?: boolean;\r\n selectedStore?: IFullOrgUnitAvailability;\r\n resources: ISelectedStoreResources;\r\n stockStatusLabel?: string;\r\n preferredStoreLocationId: string | null;\r\n isPreferredStoreEnabled?: boolean;\r\n isLocationDisabled?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n storePickUpOptionList?: DeliveryOption[];\r\n productPickUpOptionList?: DeliveryOption[];\r\n preferredDistanceUnit: string;\r\n filteredPickupMode?: string;\r\n handlers: {\r\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\r\n onSetAsPreferredStore(locationId: string | undefined): void;\r\n onRemovePreferredStore(): void;\r\n closeStoreDetailsModal(): Promise;\r\n };\r\n}\r\n\r\n/**\r\n * Store Selector resources.\r\n */\r\nexport interface ISelectedStoreViewProps {\r\n isCurrentLocation?: boolean;\r\n canSelectLocation?: boolean;\r\n selectedStore?: IFullOrgUnitAvailability;\r\n deliveryOptions?: DeliveryOption[];\r\n isPreferredStore?: boolean;\r\n resources: ISelectedStoreResources;\r\n\r\n storeDetailsMain: INodeProps;\r\n storeHeader: INodeProps;\r\n storeName: React.ReactNode;\r\n storeDistance: React.ReactNode;\r\n storeDetailsAvailabilityContainer: INodeProps;\r\n productAvailability: React.ReactNode;\r\n stockStatus: React.ReactNode;\r\n currentLocation: React.ReactNode;\r\n pickUpDeliveryOptionButton: React.ReactNode;\r\n pickupModes?: React.ReactNode;\r\n preferredStoreButton?: React.ReactNode;\r\n removePreferredStoreButton?: React.ReactNode;\r\n storeDetailsCloseButton?: React.ReactNode;\r\n handlers: {\r\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\r\n onSetAsPreferredStore(locationId: string | undefined): void;\r\n onRemovePreferredStore(): void;\r\n closeStoreDetailsModal(): Promise;\r\n };\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\nconst onPickupInStoreClickHandler = (props: ISelectedStoreProps) => () => {\r\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\r\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation);\r\n }\r\n};\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\nconst onSetPreferredStoreClickHandler = (props: ISelectedStoreProps) => () => {\r\n props.handlers.onSetAsPreferredStore(props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber);\r\n};\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\nconst onChangeHandler = (props: ISelectedStoreProps) => async (deliveryCode: string): Promise => {\r\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\r\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, deliveryCode);\r\n }\r\n return Promise.resolve();\r\n};\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\nconst removePreferredStoreHandler = (props: ISelectedStoreProps) => () => {\r\n props.handlers.onRemovePreferredStore();\r\n};\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\nconst onPickupModeSelectHandler = (props: ISelectedStoreProps, pickupMode?: string) => () => {\r\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\r\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, pickupMode);\r\n }\r\n};\r\n\r\n/**\r\n * On store details close functionality.\r\n * @param props -Store locator location items.\r\n * @returns Void promise.\r\n */\r\nconst storeDetailsModalHandler = (props: ISelectedStoreProps) => async (): Promise => {\r\n await props.handlers.closeStoreDetailsModal();\r\n};\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\nconst renderPickupModes = (\r\n props: ISelectedStoreProps,\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 (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Renders selected store details.\r\n * @param props - Store location details props.\r\n * @returns - Selected Store view props.\r\n */\r\nconst selectedStoreDetails = (props: ISelectedStoreProps): ISelectedStoreViewProps => {\r\n const {\r\n className,\r\n shouldHideStockStatus,\r\n isCurrentLocation,\r\n isInStock,\r\n selectedStore,\r\n resources,\r\n stockStatusLabel,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n isLocationDisabled,\r\n telemetryContent,\r\n storePickUpOptionList,\r\n productPickUpOptionList,\r\n preferredDistanceUnit\r\n } = props;\r\n\r\n const parentClassName = className ? className : 'ms-store-select__map__selected_store';\r\n const storeName: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\r\n const location = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\r\n const distanceAsString: string | undefined = buildDistanceString(location?.Distance, preferredDistanceUnit, isLocationDisabled);\r\n\r\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\r\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\r\n // eslint-disable-next-line no-nested-ternary -- Required to check stock Label\r\n const stockText: string | undefined = shouldHideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\r\n const canSelectLocation = !shouldHideStockStatus && 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 preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\r\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n\r\n const viewProps: ISelectedStoreViewProps = {\r\n selectedStore,\r\n isCurrentLocation,\r\n canSelectLocation,\r\n isPreferredStore,\r\n resources,\r\n deliveryOptions: deliveryOptionList,\r\n storeDetailsMain: {\r\n tag: 'div' as NodeTag,\r\n className: `${parentClassName}__main`\r\n },\r\n storeHeader: {\r\n tag: 'div' as NodeTag,\r\n className: `${parentClassName}__header`\r\n },\r\n storeName: {storeName},\r\n storeDetailsCloseButton: \r\n ),\r\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\r\n preferredStoreButton: isPreferredStoreEnabled ? (\r\n \r\n {resources.preferredStoreText}\r\n \r\n ) : null,\r\n removePreferredStoreButton: isPreferredStoreEnabled ? (\r\n \r\n {resources.setAsPreferredStoreText}\r\n \r\n ) : null,\r\n handlers: {\r\n onSelected: props.handlers.onSelected,\r\n onSetAsPreferredStore: props.handlers.onSetAsPreferredStore,\r\n onRemovePreferredStore: props.handlers.onRemovePreferredStore,\r\n closeStoreDetailsModal: props.handlers.closeStoreDetailsModal\r\n }\r\n };\r\n\r\n return viewProps;\r\n};\r\n\r\n/**\r\n * Store location line item component.\r\n */\r\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\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 * IStoreSelector 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 IStoreSelectorConfig 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 autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n storeUrlFormat?: string;\r\n className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IStoreSelectorResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n outOfStockText: string;\r\n inStockText: string;\r\n selectedStoreLocationText: string;\r\n emptyLocationsText: string;\r\n selectStoreText: string;\r\n selectStoreAriaFormatText: string;\r\n setAsPreferredStoreText: string;\r\n setAsPreferredStoreTextAriaLabel: string;\r\n preferredStoreText: string;\r\n preferredStoreAriaLabel: string;\r\n timeText: string;\r\n captionText: string;\r\n milesShortText: string;\r\n kilometersShortText: string;\r\n contactText: string;\r\n availabilityText: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeConfiguration: string;\r\n productDimensionTypeSize: string;\r\n productDimensionTypeStyle: string;\r\n storeHoursClosedText: string;\r\n storeHoursMondayText: string;\r\n storeHoursTuesdayText: string;\r\n storeHoursWednesdayText: string;\r\n storeHoursThursdayText: string;\r\n storeHoursFridayText: string;\r\n storeHoursSaturdayText: string;\r\n storeHoursSundayText: string;\r\n storeHoursMondayFullText: string;\r\n storeHoursTuesdayFullText: string;\r\n storeHoursWednesdayFullText: string;\r\n storeHoursThursdayFullText: string;\r\n storeHoursFridayFullText: string;\r\n storeHoursSaturdayFullText: string;\r\n storeHoursSundayFullText: string;\r\n storePhoneAriaLabel: string;\r\n storeAddressAriaLabel: string;\r\n storeCountMessage: string;\r\n storeAllCountMessage: string;\r\n storeCountMessageInKm: string;\r\n storeSelectorHeaderText: string;\r\n storeLocatorHeaderText: string;\r\n seeAllStoresText: string;\r\n viewMapText: string;\r\n viewListText: string;\r\n pickupFilterByHeading: string;\r\n pickupFilterMenuHeading: string;\r\n inStockOnlyLabel: 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 IStoreSelectorProps extends Msdyn365.IModule {\r\n resources: IStoreSelectorResources;\r\n config: IStoreSelectorConfig;\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\r\n/// \r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport { IStoreInfo, IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n ArrayExtensions,\r\n GetFullAvailableInventoryNearbyInput,\r\n getOrgUnitLocationsByArea,\r\n GetOrgUnitLocationsByAreaInput,\r\n IFullOrgUnitAvailability\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getTelemetryObject,\r\n IModuleProps,\r\n INodeProps,\r\n isMobile,\r\n ITelemetryContent,\r\n Modal,\r\n ModalBody,\r\n ModalFooter,\r\n ModalHeader,\r\n NodeTag,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport getFullAvailableInventoryNearby from '../../actions/get-full-available-inventory-nearby.action';\r\nimport classname from 'classnames';\r\nimport { reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\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 { ISelectedStoreProps, ISelectedStoreViewProps, SelectedStoreComponent } from './components/selected-store/selected-store';\r\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './components/store-selector-location-line-item/date-time-helpers';\r\nimport { IStoreSelectorData } from './store-selector.data';\r\nimport {\r\n IStoreSelectorProps,\r\n IStoreSelectorResources,\r\n mode as modeEnum,\r\n searchRadiusUnit as SearchRadiusUnit,\r\n style as styleEnum\r\n} from './store-selector.props.autogenerated';\r\n\r\n/**\r\n * StoreSelector State Interface.\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 inStockStoreOnly: boolean;\r\n}\r\n\r\n/**\r\n * StoreSelector View Props Interface.\r\n */\r\nexport interface IStoreSelectorViewProps extends IStoreSelectorProps {\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 selectedLocation?: ISelectedStoreViewProps;\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 bodyWrapperProps?: INodeProps;\r\n storeResultContainerProps?: INodeProps;\r\n mapContainerProps?: INodeProps;\r\n maps?: React.ReactNode;\r\n isMobileView?: boolean;\r\n storeDetailsModal?: INodeProps;\r\n\r\n callbacks: {\r\n closeDialog(): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n performSearch(searchTerm: string): Promise;\r\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\r\n getAndUpdateUserLocation(): Promise;\r\n attachMapAutoSuggest(): Promise;\r\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): Promise;\r\n setPreferredStore(storeId: string | undefined): Promise;\r\n removePreferredStore(): Promise;\r\n setSelectedStore(storeId: string | undefined): Promise;\r\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\r\n };\r\n}\r\n\r\n/**\r\n * StoreSelectorLocation Line Resources Interface.\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\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/**\r\n * ILocationHours Interface.\r\n */\r\nexport interface ILocationHours {\r\n openFrom?: string;\r\n openTo?: string;\r\n}\r\n\r\n/**\r\n * StoreSelectorLocation Line Item Props Interface.\r\n */\r\nexport interface IStoreSelectorLocationLineItemProps {\r\n location: OrgUnitLocation;\r\n storeHours?: StoreHours;\r\n storeHoursList?: IHoursDisplayInfo[];\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 selectedStoreLocationId?: string;\r\n locationOpen?: ILocationHours;\r\n\r\n /**\r\n * The telemetry content.\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 closeStoreDetailsModal(): Promise;\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 private isPreferredStoreEnabled?: boolean;\r\n\r\n public constructor(props: IStoreSelectorProps) {\r\n super(props);\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.state = {\r\n isSearchInProgress: true,\r\n searchTerm: '',\r\n isSeeAllStoreValue: false,\r\n filteredPickupMode: undefined,\r\n inStockStoreOnly: 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 async componentDidMount(): Promise {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\r\n } = this.props;\r\n\r\n // Adding Timeout to make sure it loads the data based upon the preferred store.\r\n setTimeout(() => {\r\n this._getAndUpdateStoreLocation();\r\n }, 0);\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isDialogOpen,\r\n async () => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (context?.id === this.props.id) {\r\n this._getAndUpdateStoreLocation();\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.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 (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\r\n await 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 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 reaction(\r\n () => this.props.data.availabilitiesWithHours.result,\r\n async () => {\r\n if (this.props.data.storeSelectorStateManager.result?.isDialogOpen) {\r\n const storeLocationList = this.props.data.availabilitiesWithHours.result;\r\n if (storeLocationList) {\r\n await this._setOrgUnitStoreInformation(storeLocationList);\r\n }\r\n }\r\n }\r\n );\r\n\r\n if (isAutoSuggestionEnabled) {\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 () => {\r\n setTimeout(async () => {\r\n await this._attachMapAutoSuggest();\r\n }, 0);\r\n }\r\n );\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(): boolean {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n if (context && context.id === this.props.id) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // 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: shouldSetAsPreferredStore,\r\n showAllStores: shouldShowAllStores,\r\n lookupRadius,\r\n enablePickupFilterToShowStore: hasEnablePickupFilterToShowStore,\r\n searchRadiusUnit\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 slots: { maps: mapSlot },\r\n resources,\r\n data: {\r\n availabilitiesWithHours: { result: availabilitiesWithHours },\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeLocations: { result: storeLocations }\r\n }\r\n } = this.props;\r\n\r\n this.storeCounter = 0;\r\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\r\n const isMapDisabled = !(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 isInlineView = styleDefault === styleEnum.inline;\r\n const isLocatorView = modeDefault === modeEnum.findStores;\r\n const shouldHideInventory = isLocatorView;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\r\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\r\n this.isPreferredStoreEnabled = shouldSetAsPreferredStore && cookies?.isConsentGiven();\r\n const canShowLocationView =\r\n context && (context.showMapViewLink === undefined || context.showMapViewLink) && storeSelectorStateManager?.isMapModuleLoaded;\r\n\r\n const storeSelectorActions = {\r\n async toggleListMapViewState(): Promise {\r\n await storeSelectorStateManager?.toggleListMapViewState();\r\n }\r\n };\r\n\r\n if (!channel?.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n }\r\n\r\n const configHeading = heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\r\n const preferredDistanceUnit =\r\n searchRadiusUnit === SearchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\r\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\r\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = shouldHideInventory ? storeLocations : availabilitiesWithHours;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Reading value from app config.\r\n const isEnableOutofStock: boolean = 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\r\n let sortLocation = null;\r\n if (storeLocationList) {\r\n sortLocation = this._sortStores(storeLocationList, this.isPreferredStoreEnabled, preferredLocationId);\r\n }\r\n\r\n const locationListProps = this._getStoreLocationListProps(\r\n isEnableOutofStock,\r\n isLocatorView,\r\n preferredLocationId,\r\n this.isPreferredStoreEnabled,\r\n selectedStoreLocationId,\r\n sortLocation ?? null,\r\n preferredDistanceUnit,\r\n alreadySelectedLocation,\r\n productPickUpOptionList\r\n );\r\n\r\n const hasMapSlot = ArrayExtensions.hasElements(mapSlot);\r\n const dialogClassName = hasMapSlot ? 'ms-store-select__map' : '';\r\n const viewProps: IStoreSelectorViewProps = {\r\n ...(this.props as IStoreSelectorProps),\r\n state: this.state,\r\n maps: hasMapSlot ? mapSlot[0] : undefined,\r\n\r\n ModuleProps: {\r\n tag: isInlineView ? ('div' as NodeTag) : Modal,\r\n moduleProps: this.props,\r\n className: classname(\r\n `ms-store-${isInlineView ? 'locate' : 'select'}`,\r\n className,\r\n dialogClassName,\r\n isInlineView ? '' : '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 isMobileView: isMobileDevice,\r\n HeaderContainerProps: {\r\n tag: isInlineView ? ('div' as NodeTag) : ModalHeader,\r\n className: `ms-store-select__${isInlineView ? 'header' : 'modal-header'}`,\r\n toggle: this._closeDialog\r\n },\r\n HeaderProps: configHeading && (\r\n \r\n ),\r\n FooterContainerProps: {\r\n tag: isInlineView ? ('div' as NodeTag) : ModalFooter,\r\n className: `ms-store-select__${isInlineView ? 'footer' : 'modal-footer'} ${!shouldDisplayList ? 'map-only-view' : ''}`\r\n },\r\n BodyContainerProps: {\r\n tag: isInlineView ? ('div' as NodeTag) : ModalBody,\r\n className: `ms-store-select__${isInlineView ? 'body' : 'modal-body'}`\r\n },\r\n bodyWrapperProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__body_wrapper'\r\n },\r\n storeResultContainerProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__store_container'\r\n },\r\n mapContainerProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__map_container'\r\n },\r\n storeDetailsModal: {\r\n tag: 'div' as NodeTag,\r\n className: `ms-store-select__map__selected_store__modal ${\r\n selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'\r\n }`\r\n },\r\n locationsMessage: !this.state.isLocationDisabled && (\r\n \r\n ),\r\n selectedLocation: this.renderSelectedStore(\r\n shouldHideInventory,\r\n preferredDistanceUnit,\r\n preferredStore,\r\n this.isPreferredStoreEnabled,\r\n isEnableOutofStock,\r\n productPickUpOptionList,\r\n shouldDisplayList\r\n ),\r\n search: (\r\n this.setState(s => ({ inStockStoreOnly: !s.inStockStoreOnly }))}\r\n />\r\n ),\r\n spinner: ,\r\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\r\n \r\n ) : (\r\n undefined\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: (\r\n {heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\r\n ),\r\n sortLocations: sortLocation,\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 /**\r\n * Render the selected store for the mobile devices.\r\n * @param shouldHideInventory -- Hide Inventory.\r\n * @param preferredDistanceUnit -- Preferred Distance Unit.\r\n * @param preferredStore -- Preferred Store.\r\n * @param isPreferredStoreEnabled -- Is Preferred Store Enabled.\r\n * @param hasEnabledOutOfStockCheck -- Stock check is enabled or not.\r\n * @param productPickUpOptionList -- Product pickup option list.\r\n * @param shouldDisplayList - Should Display list.\r\n * @returns -- Returns the view props.\r\n */\r\n public renderSelectedStore = (\r\n shouldHideInventory: boolean,\r\n preferredDistanceUnit: string,\r\n preferredStore: IStoreInfo | undefined,\r\n isPreferredStoreEnabled: boolean | undefined,\r\n hasEnabledOutOfStockCheck: boolean,\r\n productPickUpOptionList?: DeliveryOption[],\r\n shouldDisplayList?: boolean\r\n ): ISelectedStoreViewProps | undefined => {\r\n const {\r\n resources,\r\n data: {\r\n availabilitiesWithHours: { result: availabilitiesWithHours },\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n storeLocations: { result: storeLocations }\r\n }\r\n } = this.props;\r\n\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n const selectedStore = (shouldHideInventory ? storeLocations : availabilitiesWithHours)?.find(\r\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === selectedStoreLocationId\r\n );\r\n const orgUnitLocation = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\r\n const selectedStoreResources = this._mapResources(resources);\r\n\r\n if (!shouldDisplayList && selectedStore) {\r\n const selectedProps: ISelectedStoreProps = {\r\n shouldHideStockStatus: shouldHideInventory,\r\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, context?.alreadySelectedLocation),\r\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, selectedStore.OrgUnitAvailability?.ItemAvailabilities),\r\n selectedStore,\r\n resources: selectedStoreResources,\r\n stockStatusLabel: this._stockInventoryLabel(selectedStore),\r\n preferredStoreLocationId: preferredStore?.StoreId ? preferredStore.StoreId : '',\r\n isPreferredStoreEnabled,\r\n isLocationDisabled: this.state.isLocationDisabled,\r\n telemetryContent: this.telemetryContent,\r\n storePickUpOptionList: selectedStore.OrgUnitPickUpDeliveryModes?.DeliveryOptions,\r\n productPickUpOptionList,\r\n preferredDistanceUnit,\r\n handlers: {\r\n onSelected: this._onOrgUnitLocationSelected,\r\n onSetAsPreferredStore: this._setPreferredStore,\r\n onRemovePreferredStore: this._removePreferredStore,\r\n closeStoreDetailsModal: this._closeStoreDetailModal\r\n }\r\n };\r\n\r\n return SelectedStoreComponent(selectedProps);\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Method to be called on link text change.\r\n * @param event -Content Edit Event.\r\n */\r\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent): void => {\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 /**\r\n * Method to be called on heading change.\r\n * @param event -Content Edit Event.\r\n */\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\r\n this.props.config.heading = event.target.value;\r\n };\r\n\r\n /**\r\n * Show all stores handler function.\r\n */\r\n private readonly onShowAllStoresHandler = () => {\r\n this._getAndUpdateStoreLocation(true);\r\n this.setState({ filteredPickupMode: undefined });\r\n };\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 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 /**\r\n * Filter Store by pickup mode.\r\n * @param deliveryCode -Delivery Code.\r\n */\r\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\r\n this.setState({ filteredPickupMode: deliveryCode });\r\n };\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 // 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\r\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\r\n }\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 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 /**\r\n * Initialize Map AutoSuggest.\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 /**\r\n * Callback for the autosuggest API.\r\n */\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\r\n /**\r\n * Error call back for autosuggest API.\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 /**\r\n * On Selecting Location Suggestion.\r\n * @param result - Map Suggestions List.\r\n */\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n const context = 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 /**\r\n * On Selecting Preferred Store.\r\n * @param storeId - Store Id.\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 preferredStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\r\n\r\n await storeSelectorStateManager.setPreferredStoreLocation(\r\n storeId,\r\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\r\n cookies.isConsentGiven(),\r\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\r\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\r\n );\r\n };\r\n\r\n /**\r\n * On Removing Preferred Store.\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 /**\r\n * Method called to close the store details modal that comes up on clicking the pushpin.\r\n * @returns Void promise.\r\n */\r\n private readonly _closeStoreDetailModal = async (): Promise => {\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\r\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\r\n };\r\n\r\n /**\r\n * On Selecting Store for pickup.\r\n * @param storeId - Store Id.\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 /**\r\n * Method to be called on search.\r\n * @param searchTerm - Search string.\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 // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\r\n\r\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\r\n\r\n if (location) {\r\n await this._updateLocations(location.latitude, location.longitude);\r\n } else {\r\n await this._updateLocations();\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n };\r\n\r\n /**\r\n * Method to be called on search term changed.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\r\n this.setState({ searchTerm });\r\n };\r\n\r\n /**\r\n * Method to be called updating the store location.\r\n * @param shouldShowAllStores - Flag to show all stores.\r\n */\r\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: 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 // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\r\n\r\n if (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 });\r\n if (shouldShowAllStores) {\r\n this.setState({ isSeeAllStoreValue: true });\r\n await this._searchTermChanged('');\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\r\n } else {\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\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, isSeeAllStoreValue: true });\r\n await this._searchTermChanged('');\r\n await this._updateLocations(0, 0, 0);\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n { timeout: 5000 }\r\n );\r\n } else {\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called closing the store selector dialog.\r\n * @returns Void promise.\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 /**\r\n * Method to set store info.\r\n * @param orgUnitStoreInformation - Store Info Object.\r\n * @returns Void promise.\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 const moduleId: string = context?.id ? context.id : this.props.id;\r\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\r\n let input: IStoreSelectionStateContext = {\r\n /**\r\n * On Location selected.\r\n * @returns - Returns promise.\r\n */\r\n onLocationSelected: async () => {\r\n // TO-DO handle event for when location in selected\r\n return Promise.resolve();\r\n }\r\n };\r\n\r\n if (storeSelectorStateManager.context) {\r\n input = storeSelectorStateManager.context;\r\n }\r\n\r\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager.preferredStore;\r\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\r\n const storeLocationList = this._sortStores(orgUnitStoreInformation, this.isPreferredStoreEnabled, preferredLocationId);\r\n\r\n input = {\r\n ...input,\r\n id: moduleId,\r\n showMapViewLink: context?.showMapViewLink,\r\n parentElementRef: context?.parentElementRef,\r\n isDialog: styleDefault === styleEnum.dialog,\r\n orgUnitStoreInformation: storeLocationList,\r\n product: context?.product\r\n };\r\n\r\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).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 });\r\n };\r\n\r\n /**\r\n * Method to update user location.\r\n * @param latitude - User location.\r\n * @param longitude - User location.\r\n * @param radius - Search Criteria Radius.\r\n * @returns Void promise.\r\n */\r\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\r\n const {\r\n config: { mode, lookupRadius, style, searchRadiusUnit },\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 = 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 localLatitude = 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 localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\r\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\r\n }\r\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\r\n }\r\n\r\n if (modeDefault === modeEnum.findStores) {\r\n await this.getOrgUnitLocationByArea(calRadius, distanceUnitValue, localLatitude, long);\r\n return;\r\n }\r\n\r\n await this.getFullAvailableInventoryNearby(calRadius, distanceUnitValue, localLatitude, long);\r\n };\r\n\r\n /**\r\n * Get org unit location by area.\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 getOrgUnitLocationByArea = 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 context: { actionContext }\r\n } = this.props;\r\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\r\n latitude,\r\n longitude,\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 };\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 getFullAvailableInventoryNearby = 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 input = new GetFullAvailableInventoryNearbyInput(\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 );\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 /**\r\n * Method to called on store selected.\r\n * @param location - Store Info.\r\n * @param deliveryMode - Pickup mode.\r\n * @returns Void promise.\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 /**\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 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\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 hideStockStatus: !hasEnabledOutOfStockCheck,\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 closeStoreDetailsModal: this._closeStoreDetailModal\r\n }\r\n };\r\n }\r\n return undefined;\r\n }\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 private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\r\n return {\r\n contactInfoHeader: resources.contactText,\r\n storeHoursHeader: resources.timeText,\r\n availabilityInfoHeader: resources.availabilityText,\r\n\r\n closedText: resources.storeHoursClosedText,\r\n outOfStock: resources.outOfStockText,\r\n inStock: resources.inStockText,\r\n\r\n currentLocation: resources.selectedStoreLocationText,\r\n selectLocation: resources.selectStoreText,\r\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\r\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\r\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\r\n preferredStoreText: resources.preferredStoreText,\r\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\r\n\r\n days: {\r\n monday: resources.storeHoursMondayText,\r\n tuesday: resources.storeHoursTuesdayText,\r\n wednesday: resources.storeHoursWednesdayText,\r\n thursday: resources.storeHoursThursdayText,\r\n friday: resources.storeHoursFridayText,\r\n saturday: resources.storeHoursSaturdayText,\r\n sunday: resources.storeHoursSundayText,\r\n mondayFull: resources.storeHoursMondayFullText,\r\n tuesdayFull: resources.storeHoursTuesdayFullText,\r\n wednesdayFull: resources.storeHoursWednesdayFullText,\r\n thursdayFull: resources.storeHoursThursdayFullText,\r\n fridayFull: resources.storeHoursFridayFullText,\r\n saturdayFull: resources.storeHoursSaturdayFullText,\r\n sundayFull: resources.storeHoursSundayFullText\r\n }\r\n };\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 /**\r\n * Method to get stock.\r\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\r\n * @param itemAvailabilities - Item quantity availability.\r\n * @returns Boolean value for item stock.\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\r\n return false;\r\n };\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 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\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ISelectedStoreViewProps } from './components/selected-store/selected-store';\r\nimport { IStoreSelectorViewProps } from './store-selector';\r\n\r\n/**\r\n * Renders the pickup Delivery options.\r\n * @param props -- Selected store view props.\r\n * @returns -- HTML.\r\n */\r\nconst renderDeliveryOptions: React.FC = props => {\r\n const { canSelectLocation, deliveryOptions, pickUpDeliveryOptionButton, pickupModes } = props;\r\n\r\n return (\r\n <>\r\n {/* eslint-disable-next-line no-nested-ternary -- Need this.*/}\r\n {canSelectLocation ? (ArrayExtensions.hasElements(deliveryOptions) ? pickupModes : pickUpDeliveryOptionButton) : false}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the selected store.\r\n * @param props -- Selected store view props.\r\n * @returns -- HTML.\r\n */\r\nconst renderSelectedStore: React.FC = props => {\r\n const {\r\n storeDetailsMain,\r\n storeHeader,\r\n storeName,\r\n storeDetailsCloseButton,\r\n storeDistance,\r\n storeDetailsAvailabilityContainer,\r\n productAvailability,\r\n stockStatus,\r\n isCurrentLocation,\r\n currentLocation,\r\n isPreferredStore,\r\n preferredStoreButton,\r\n removePreferredStoreButton\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n {storeDetailsCloseButton}\r\n {storeName}\r\n {storeDistance}\r\n \r\n \r\n {productAvailability}\r\n {stockStatus}\r\n \r\n {isCurrentLocation ? currentLocation : renderDeliveryOptions(props)}\r\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the body of the popup.\r\n * @param props -- Store selector view props.\r\n * @returns -- Returns the html.\r\n */\r\nconst renderBody: React.FC = props => {\r\n const {\r\n BodyContainerProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n noLocationsMessage,\r\n maps,\r\n bodyWrapperProps,\r\n storeResultContainerProps,\r\n mapContainerProps,\r\n isMobileView,\r\n storeDetailsModal,\r\n selectedLocation\r\n } = props;\r\n\r\n if (isMobileView) {\r\n return (\r\n \r\n {locationsMessage}\r\n {search}\r\n \r\n \r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\r\n {maps}\r\n {selectedLocation && renderSelectedStore(selectedLocation)}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {locationsMessage}\r\n {search}\r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\r\n \r\n {maps}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Store selector view props.\r\n * @param props - Store selector view props.\r\n * @returns - HTML.\r\n */\r\nconst StoreSelectorView: React.FC = props => {\r\n const {\r\n FooterContainerProps,\r\n HeaderContainerProps,\r\n HeaderProps,\r\n ModuleProps,\r\n\r\n terms\r\n } = props;\r\n\r\n return (\r\n \r\n {HeaderProps}\r\n {renderBody(props)}\r\n {terms}\r\n \r\n );\r\n};\r\n\r\nexport default StoreSelectorView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['store-selector'] = {\n c: () => require('partner/modules/store-selector/store-selector.tsx'),\n $type: 'containerModule',\n da: [{name:'availabilitiesWithHours', path:'actions/get-full-available-inventory-nearby.action', 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: 'store-selector',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/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-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-full-available-inventory-nearby.action';\n let dataAction = require('partner/actions/get-full-available-inventory-nearby.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|store-selector|store-selector'] = {\n c: () => require('partner/modules/store-selector/store-selector.view.tsx'),\n cn: '__local__-__local__-store-selector'\n };\nviewDictionary['@msdyn365-commerce-modules|store-selector|modules|store-selector|store-selector'] = {\n c: () => require('@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector.view.js'),\n cn: '@msdyn365-commerce-modules-store-selector-store-selector'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|store-selector'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/store-selector.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISelectedStoreViewProps } from './components/selected-store/selected-store';\nimport { IStoreSelectorViewProps } from './store-selector';\n\n/**\n * Renders the pickup Delivery options.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderDeliveryOptions: React.FC = props => {\n const { canSelectLocation, deliveryOptions, pickUpDeliveryOptionButton, pickupModes } = props;\n\n return (\n <>\n {/* eslint-disable-next-line no-nested-ternary -- Need this.*/}\n {canSelectLocation ? (ArrayExtensions.hasElements(deliveryOptions) ? pickupModes : pickUpDeliveryOptionButton) : false}\n \n );\n};\n\n/**\n * Render the selected store.\n * @param props -- Selected store view props.\n * @returns -- HTML.\n */\nconst renderSelectedStore: React.FC = props => {\n const {\n storeDetailsMain,\n storeHeader,\n storeName,\n storeDetailsCloseButton,\n storeDistance,\n storeDetailsAvailabilityContainer,\n productAvailability,\n stockStatus,\n isCurrentLocation,\n currentLocation,\n isPreferredStore,\n preferredStoreButton,\n removePreferredStoreButton\n } = props;\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n {productAvailability}\n {stockStatus}\n \n {isCurrentLocation ? currentLocation : renderDeliveryOptions(props)}\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n \n );\n};\n\n/**\n * Render the body of the popup.\n * @param props -- Store selector view props.\n * @returns -- Returns the html.\n */\nconst renderBody: React.FC = props => {\n const {\n BodyContainerProps,\n locationsMessage,\n search,\n state,\n spinner,\n locationsList,\n noLocationsMessage,\n maps,\n bodyWrapperProps,\n storeResultContainerProps,\n mapContainerProps,\n isMobileView,\n storeDetailsModal,\n selectedLocation\n } = props;\n\n if (isMobileView) {\n return (\n \n {locationsMessage}\n {search}\n \n \n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n {maps}\n {selectedLocation && renderSelectedStore(selectedLocation)}\n \n \n \n );\n }\n\n return (\n \n \n \n {locationsMessage}\n {search}\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}}\n \n {maps}\n \n \n );\n};\n\n/**\n * Store selector view props.\n * @param props - Store selector view props.\n * @returns - HTML.\n */\nconst StoreSelectorView: React.FC = props => {\n const {\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n\n terms\n } = props;\n\n return (\n \n {HeaderProps}\n {renderBody(props)}\n {terms}\n \n );\n};\n\nexport default StoreSelectorView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Interface Pickup option list.\n */\nexport interface IPickUpOptionListProps {\n pickupListOptionMenuText: string;\n pickupmodeList?: DeliveryOption[];\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Interface pickup option list state.\n */\nexport interface IPickOptionListState {\n expandSiteOptions: boolean;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class PickUpOptionList extends React.PureComponent {\n private readonly _pickupListOptionMenu: React.RefObject;\n\n private readonly _pickupListOptionButton: React.RefObject;\n\n private readonly eventsToBeBind = ['click', 'touchstart'];\n\n public constructor(props: IPickUpOptionListProps) {\n super(props);\n this._renderDeliveryOptions = this._renderDeliveryOptions.bind(this);\n this._pickupListOptionMenu = React.createRef();\n this._pickupListOptionButton = React.createRef();\n this.state = {\n expandSiteOptions: false\n };\n }\n\n public componentDidMount(): void {\n for (const event of this.eventsToBeBind) {\n window.addEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public componentWillUnmount(): void {\n for (const event of this.eventsToBeBind) {\n window.removeEventListener(event, this.handleDocumentClick, true);\n }\n }\n\n public render(): JSX.Element {\n const { pickupListOptionMenuText, pickupmodeList } = this.props;\n\n return (\n
\n \n {pickupListOptionMenuText}\n \n \n {this.state.expandSiteOptions ? (\n
    \n {pickupmodeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Handle the document click.\n * @param event -- Event object.\n */\n private readonly handleDocumentClick = (event: Event): void => {\n const htmlElement = event.target as HTMLElement;\n if (\n !(\n (this._pickupListOptionButton.current !== null &&\n (event.target === this._pickupListOptionButton.current ||\n this._pickupListOptionButton.current.contains(htmlElement))) ||\n (this._pickupListOptionMenu.current !== null &&\n (event.target === this._pickupListOptionMenu.current || this._pickupListOptionMenu.current.contains(htmlElement)))\n )\n ) {\n this.setState({\n expandSiteOptions: false\n });\n }\n };\n\n private _renderDeliveryOptions(event: React.MouseEvent): void {\n event.stopPropagation();\n const isExpandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !isExpandSiteOptionsState\n });\n }\n\n /**\n * Select Delivery option.\n * @param event -- Event Object.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode && deliveryCode.length > 0) {\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\n/**\n * Store Pickup option list interface.\n */\nexport interface IStorePickUpOptionListProps {\n productPickupListOptionMenuText?: string;\n productPickupModeList?: DeliveryOption[];\n defaultOptionText?: string;\n onChange(deliveryCode: string): Promise;\n}\n\n/**\n * Store Pickup option state interface.\n */\nexport interface IStorePickOptionListState {\n isFilterExpanded: boolean;\n selectedPickupMode?: string;\n}\n\n/**\n * Simple Pickup option dropdown with Button to get menu option.\n */\nexport class StorePickUpOptionList extends React.PureComponent {\n private readonly _storePickupListOptionMenu: React.RefObject;\n\n public constructor(props: IStorePickUpOptionListProps) {\n super(props);\n this._storePickupListOptionMenu = React.createRef();\n this.state = {\n isFilterExpanded: false,\n selectedPickupMode: ''\n };\n }\n\n public render(): JSX.Element {\n const { productPickupListOptionMenuText, productPickupModeList, defaultOptionText } = this.props;\n const selectedPickupModeDesc = defaultOptionText\n ? defaultOptionText\n : productPickupModeList?.find((delivery: DeliveryOption) => delivery.Code === this.state.selectedPickupMode)?.Description;\n const role = 'menu';\n return (\n
\n \n {this.state.isFilterExpanded ? (\n
    \n {productPickupModeList?.map((delivery: DeliveryOption) => {\n return (\n
  • \n \n \n {delivery.Description}\n \n \n
  • \n );\n })}\n
\n ) : null}\n
\n );\n }\n\n /**\n * Method to call when drop dwon get selected.\n */\n private readonly _rendeDeliveryOptions = () => {\n const isExpandOptionsState = this.state.isFilterExpanded;\n this.setState({\n isFilterExpanded: !isExpandOptionsState\n });\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onSelect = async (event: React.MouseEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n\n /**\n * Method to call on select pickup mode.\n * @param event - Mouse event.\n * @returns Void.\n */\n private readonly _onKeyDown = async (event: React.KeyboardEvent): Promise => {\n event.preventDefault();\n const deliveryCode = event.currentTarget.getAttribute('data-value');\n if (deliveryCode !== null) {\n this.setState({\n selectedPickupMode: deliveryCode\n });\n\n this._rendeDeliveryOptions();\n await this.props.onChange(deliveryCode);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RegularStoreHours } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\n\nimport { IStoreSelectorLocationLineItemResources } from '.';\n\nexport interface IHoursDisplayInfo {\n startDayShort: string;\n startDayFull: string;\n endDayShort?: string;\n endDayFull?: string;\n timeRange: string;\n}\n\ninterface IHoursInfo {\n isClosed: boolean;\n openTime?: number;\n closeTime?: number;\n}\n\ntype DayType = 'MON' | 'TUE' | 'WED' | 'THU' | 'FRI' | 'SAT' | 'SUN';\n\nexport const secondsToTime = (seconds: number | undefined): string | undefined => {\n if (seconds === undefined) {\n return undefined;\n }\n let hours = Math.floor(seconds / (60 * 60));\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours %= 12;\n hours = hours ? hours : 12;\n const divisorForMinutes = seconds % (60 * 60);\n const minutes = Math.floor(divisorForMinutes / 60) < 10 ? `0${Math.floor(divisorForMinutes / 60)}` : Math.floor(divisorForMinutes / 60);\n return `${hours}:${minutes} ${ampm}`;\n};\n\nconst getShortTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.monday;\n case 'TUE':\n return resources.days.tuesday;\n case 'WED':\n return resources.days.wednesday;\n case 'THU':\n return resources.days.thursday;\n case 'FRI':\n return resources.days.friday;\n case 'SAT':\n return resources.days.saturday;\n default:\n // Case 'SUN':\n return resources.days.sunday;\n }\n};\n\nconst getFullTimeString = (day: DayType, resources: IStoreSelectorLocationLineItemResources): string => {\n switch (day) {\n case 'MON':\n return resources.days.mondayFull;\n case 'TUE':\n return resources.days.tuesdayFull;\n case 'WED':\n return resources.days.wednesdayFull;\n case 'THU':\n return resources.days.thursdayFull;\n case 'FRI':\n return resources.days.fridayFull;\n case 'SAT':\n return resources.days.saturdayFull;\n default:\n // Case 'SUN':\n return resources.days.sundayFull;\n }\n};\n\nconst buildHoursDisplayInfo = (\n startDay: DayType,\n endDay: DayType,\n hoursInfo: string,\n resources: IStoreSelectorLocationLineItemResources\n): IHoursDisplayInfo => {\n return {\n startDayShort: getShortTimeString(startDay, resources),\n startDayFull: getFullTimeString(startDay, resources),\n endDayShort: startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,\n endDayFull: startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,\n timeRange: hoursInfo\n };\n};\n\nconst shouldMergeLines = (firstLine: IHoursInfo, secondLine: IHoursInfo): boolean => {\n if (firstLine.isClosed && secondLine.isClosed) {\n return true;\n }\n\n if (!firstLine.isClosed && !secondLine.isClosed) {\n return firstLine.openTime === secondLine.openTime && firstLine.closeTime === secondLine.closeTime;\n }\n\n return false;\n};\n\nconst getStoreHoursData = (storeHours: RegularStoreHours, dateForLookup: string): IHoursInfo => {\n return {\n isClosed: get(storeHours, `IsClosedOn${dateForLookup}`, false),\n openTime: get(storeHours, `${dateForLookup}OpenTime`, undefined),\n closeTime: get(storeHours, `${dateForLookup}CloseTime`, undefined)\n };\n};\n\nconst buildStoreHoursString = (hoursInfo: IHoursInfo, resources: IStoreSelectorLocationLineItemResources): string => {\n if (hoursInfo.isClosed) {\n return resources.closedText;\n }\n const openFrom: string | undefined = secondsToTime(hoursInfo.openTime);\n const openTo: string | undefined = secondsToTime(hoursInfo.closeTime);\n\n return `${openFrom}–${openTo}`;\n};\n\nexport const buildStoreHours = (storeHours: RegularStoreHours, resources: IStoreSelectorLocationLineItemResources): IHoursDisplayInfo[] => {\n const storeHoursList: IHoursDisplayInfo[] = [];\n\n const mondayHours = getStoreHoursData(storeHours, 'Monday');\n const tuesdayHours = getStoreHoursData(storeHours, 'Tuesday');\n const wednesdayHours = getStoreHoursData(storeHours, 'Wednesday');\n const thursdayHours = getStoreHoursData(storeHours, 'Thursday');\n const fridayHours = getStoreHoursData(storeHours, 'Friday');\n const saturdayHours = getStoreHoursData(storeHours, 'Saturday');\n const sundayHours = getStoreHoursData(storeHours, 'Sunday');\n\n let periodStart: DayType = 'MON';\n let periodEnd: DayType = 'MON';\n\n if (!shouldMergeLines(mondayHours, tuesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(mondayHours, resources), resources));\n\n periodStart = 'TUE';\n }\n periodEnd = 'TUE';\n\n if (!shouldMergeLines(tuesdayHours, wednesdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(tuesdayHours, resources), resources));\n\n periodStart = 'WED';\n }\n periodEnd = 'WED';\n\n if (!shouldMergeLines(wednesdayHours, thursdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(wednesdayHours, resources), resources));\n\n periodStart = 'THU';\n }\n periodEnd = 'THU';\n\n if (!shouldMergeLines(thursdayHours, fridayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(thursdayHours, resources), resources));\n\n periodStart = 'FRI';\n }\n periodEnd = 'FRI';\n\n if (!shouldMergeLines(fridayHours, saturdayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(fridayHours, resources), resources));\n\n periodStart = 'SAT';\n }\n periodEnd = 'SAT';\n\n if (!shouldMergeLines(saturdayHours, sundayHours)) {\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(saturdayHours, resources), resources));\n\n periodStart = 'SUN';\n }\n periodEnd = 'SUN';\n\n storeHoursList.push(buildHoursDisplayInfo(periodStart, periodEnd, buildStoreHoursString(sundayHours, resources), resources));\n\n return storeHoursList;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './date-time-helpers';\n\n/**\n * Store Locator line item resources.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n\n closedText: string;\n\n outOfStock: string;\n inStock: string;\n\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n pickupDeliveryOptionErrorMessage?: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * Store Locator line item props.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n };\n}\n\n/**\n * Store Locator line item action component.\n */\nconst storeSelectorLocationLineItemComponentActions = {\n onLocationSelected(props: IStoreSelectorLocationLineItemProps, deliveryMode?: string): void {\n props.handlers.onSelected(props.location, deliveryMode);\n },\n onSetAsPreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onSetAsPreferredStore(props.location.OrgUnitNumber);\n },\n onRemovePreferredStore(props: IStoreSelectorLocationLineItemProps): void {\n props.handlers.onRemovePreferredStore();\n }\n};\n\n/**\n * Function to render store hours.\n * @param storeHours - Store Hours object.\n * @param location - Store Unit.\n * @param resources - Resources.\n * @returns - Jsx element.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n location: OrgUnitLocation,\n resources: IStoreSelectorLocationLineItemResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day houts\n if (storeHours?.RegularStoreHours) {\n const storeHoursList: IHoursDisplayInfo[] = buildStoreHours(storeHours.RegularStoreHours, resources);\n\n return (\n
\n {storeHoursList.map(displayTime => (\n
\n {displayTime.endDayShort ? (\n
\n {displayTime.startDayShort}–\n {displayTime.endDayShort}\n
\n ) : (\n
\n {displayTime.startDayShort}\n
\n )}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string | undefined = secondsToTime(location.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(location.OpenTo);\n\n return (\n
\n {storeOpenFrom}-{storeOpenTo}\n
\n );\n};\n\n/**\n * Function to return distance measure unit.\n * @param distance - Store location within radius.\n * @param preferredDistanceUnit - Unit configuration.\n * @param isLocationDisabled - Flag to check user location.\n * @returns - Unit of distance.\n */\nexport const buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n isLocationDisabled?: boolean\n): string | undefined => {\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < 1) {\n return `(<1 ${preferredDistanceUnit})`;\n }\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\n};\n\n/**\n * Function to store contact.\n * @param contacts - Store location within radius.\n * @returns - Return primary contact number of store.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === 1 && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: IStoreSelectorLocationLineItemProps, pickupMode?: string) => () => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, pickupMode);\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onSetAsPreferredStore(props);\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n storeSelectorLocationLineItemComponentActions.onRemovePreferredStore(props);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: IStoreSelectorLocationLineItemProps) => async (deliveryCode: string): Promise => {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props, deliveryCode);\n return Promise.resolve();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: IStoreSelectorLocationLineItemProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns DeliveryOptionList.\n */\nexport const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n const deliveryOption: DeliveryOption[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(_delivery => _delivery.Code === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n });\n\n return deliveryOption;\n};\n\n/**\n * Renders store location line items.\n * @param props - Store location line items props.\n * @returns - HTML.\n */\nconst storeSelectorLocationLineItem: React.FC = (props: IStoreSelectorLocationLineItemProps) => {\n const {\n hideStockStatus,\n isCurrentLocation,\n isInStock,\n location,\n resources,\n storeHours,\n stockStatusLabel,\n storeLocatorView,\n index,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n shouldShowIndex\n } = props;\n\n const storeName: string | undefined = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit, isLocationDisabled);\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n const stockText: string | undefined = hideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = hideStockStatus || isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName || '');\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [isError, setError] = React.useState(false);\n\n const pickUpButtonClickHandler = (props: IStoreSelectorLocationLineItemProps) => () => {\n if (deliveryOptionList.length === 0) {\n setError(true);\n } else {\n storeSelectorLocationLineItemComponentActions.onLocationSelected(props);\n }\n };\n\n /* eslint-disable prettier/prettier */\n return (\n
\n
\n {(shouldShowIndex || storeLocatorView) && {index}}\n {storeName}\n {distanceAsString ? \n {' '}\n {distanceAsString}\n : false}\n
\n
\n
\n

{resources.contactInfoHeader}

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

{resources.storeHoursHeader}

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

{resources.availabilityInfoHeader}

}\n {stockText &&

{stockText}

}\n {isCurrentLocation ? (\n

{resources.currentLocation}

\n ) : canSelectLocation ? (\n deliveryOptionList.length === 0 ? (\n \n {pickupInStoreButtonText}\n \n ) : (\n renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel)\n )\n ) : (\n false\n )}\n
\n )}\n {isPreferredStoreEnabled ? (\n isPreferredStore ? (\n \n {resources.preferredStoreText}\n \n ) : (\n \n {resources.setAsPreferredStoreText}\n \n )\n ) : null}\n
\n {isError ? (\n \n \n ) : ('')}\n
\n );\n};\n\n/**\n * Store location line item component.\n */\nexport const StoreSelectorLocationLineItemComponent = storeSelectorLocationLineItem as (\n props: IStoreSelectorLocationLineItemProps\n) => JSX.Element;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources } from '../store-selector.props.autogenerated';\nimport { IStoreSelectorLocationLineItemResources, StoreSelectorLocationLineItemComponent } from './store-selector-location-line-item';\n\n/**\n * Store selector location lines props interface.\n */\nexport interface IStoreSelectorLocationLinesProps {\n locations?: IFullOrgUnitAvailability[];\n resources: IStoreSelectorResources;\n preferredDistanceUnit?: string;\n\n alreadySelectedLocation?: OrgUnitLocation;\n outOfStockThreshold: number;\n enableOutOfStockCheck: boolean;\n storeLocatorView?: boolean;\n selectedStoreLocationId?: string;\n isPreferredStoreEnabled?: boolean;\n displayList?: boolean;\n isLocationDisabled?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n onClick: (locationId: string | undefined) => void;\n preferredStoreLocationId: string | null;\n onSetAsPreferredStore: (locationId: string | undefined) => void;\n onRemovePreferredStore: () => void;\n filteredPickupMode?: string;\n shouldShowIndex?: boolean;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onLocationSelected(location: OrgUnitLocation | undefined): void;\n}\n\n/**\n * Displays all the location line items, or null if none exists.\n */\n@observer\nexport class StoreSelectorLocationLines extends React.PureComponent {\n @observable private _stores: IFullOrgUnitAvailability[] | undefined;\n\n private readonly selectedLocationRef: React.RefObject;\n\n private storeCounter: number;\n\n public constructor(props: IStoreSelectorLocationLinesProps) {\n super(props);\n this.selectedLocationRef = React.createRef();\n this.storeCounter = 0;\n }\n\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\n this._scrollIntoView();\n }\n }\n\n public componentDidMount(): void {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n\n reaction(\n () => this.props.locations,\n () => {\n if (this.props.locations) {\n this._stores = this._sortStores(this.props.locations);\n }\n }\n );\n }\n\n public render(): JSX.Element | null {\n if (!ArrayExtensions.hasElements(this._stores)) {\n return null;\n }\n\n this.storeCounter = 0;\n\n return (\n
\n {this._stores.map((store, index) => {\n return this._renderStoreLocation(store, index);\n })}\n
\n );\n }\n\n /**\n * On click Handler function.\n * @param orgUnitLocation -OrgUnit location.\n * @returns Click action on orgUnit Location.\n */\n private readonly onClickHandler = (orgUnitLocation: OrgUnitLocation | undefined) => () => {\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\n };\n\n private _renderStoreLocation(store: IFullOrgUnitAvailability, index: number): JSX.Element | undefined {\n const orgUnitLocation = store?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\n const deliveryOptions = store?.OrgUnitPickUpDeliveryModes;\n const defaultAriaSetsize = 0;\n if (orgUnitLocation) {\n ++this.storeCounter;\n return (\n \n \n \n );\n }\n return undefined;\n }\n\n /**\n * Sort store.\n * @param stores - Array of stores data.\n * @returns Sorted stores array.\n */\n private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\n /**\n * IsPreferredStore.\n * @param value - Array of stores data.\n * @returns IsPreferred store boolean value.\n */\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n this.props.isPreferredStoreEnabled &&\n this.props.preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === this.props.preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Scroll into view.\n */\n private readonly _scrollIntoView = () => {\n const selectedLocationDiv = this.selectedLocationRef.current;\n const parent = selectedLocationDiv?.parentElement;\n if (selectedLocationDiv && parent) {\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\n parent.scrollTop = selectedLocationDiv.offsetTop;\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\n }\n }\n };\n\n /**\n * Is current location.\n * @param location - Org unit location.\n * @returns The current location.\n */\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\n (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\n false;\n\n /**\n * Check the product is in stock or not.\n * @param itemAvailabilities - Item availabilities.\n * @returns If the product is in stock.\n */\n private readonly _isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\n if (!this.props.enableOutOfStockCheck) {\n return true;\n }\n\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > 0 : false;\n }\n\n return false;\n };\n\n /**\n * Get the stock inventory label.\n * @param availabilityWithHours - Full org unit availability.\n * @returns The stock label.\n */\n private readonly _stockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\n for (let i = 0; i < availabilityWithHours.ProductInventoryInformation.length; i++) {\n if (\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n availabilityWithHours.ProductInventoryInformation[i].InventLocationId\n ) {\n return availabilityWithHours.ProductInventoryInformation[i].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n /**\n * Map resources.\n * @param resources - Store resources.\n * @returns Resources.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n pickupDeliveryOptionErrorMessage: resources.pickupDeliveryOptionErrorMessage,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n KeyCodes,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { StorePickUpOptionList } from './store-pickup-option-list';\n\n/**\n * Store Selector Search Form Props interface.\n */\nexport interface IStoreSelectorSearchFormProps {\n resources: {\n searchInputAriaLabel: string;\n searchButtonAriaLabel: string;\n searchPlaceholderText: string;\n seeAllStoresText: string;\n viewListText: string;\n viewMapText: string;\n pickupFilterByHeading?: string;\n pickupFilterMenuHeading?: string;\n };\n\n id: string;\n value: string;\n isMapDisabled?: boolean;\n showAllStores?: boolean;\n displayList?: boolean;\n locatorView?: boolean;\n productPickUpDeliveryOptions?: DeliveryOption[];\n hasEnabledPickupFilterToShowStore?: boolean;\n filteredPickupMode?: string;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n onShowAllStores(): void;\n onToggleListMapViewState(): void;\n performSearch(searchTerm: string): Promise;\n searchTermChanged(searchTerm: string): Promise;\n filterPickupModeSelected(pickupMode: string): void;\n}\n\n/**\n * Simple search form consisting of search text and a search button.\n */\nexport class StoreSelectorSearchForm extends React.PureComponent {\n private readonly searchBoxRef: React.RefObject = React.createRef();\n\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly showAllStoreAttributes: Msdyn365.IDictionary | undefined;\n\n private readonly toggleMapViewAttributes: Msdyn365.IDictionary | undefined;\n\n private previousValue: string = '';\n\n private isSearchResultOpened: boolean = false;\n\n public constructor(props: IStoreSelectorSearchFormProps) {\n super(props);\n this.state = { value: '' };\n this._handleKeyPressPrev = this._handleKeyPressPrev.bind(this);\n const payLoad: IPayLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.SearchStore);\n this.storeSearchAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ShowAllStore;\n this.showAllStoreAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.ToggleMapView;\n this.toggleMapViewAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n const {\n resources: {\n searchButtonAriaLabel,\n searchPlaceholderText,\n seeAllStoresText,\n viewListText,\n viewMapText,\n pickupFilterByHeading,\n pickupFilterMenuHeading\n },\n id,\n value,\n isMapDisabled,\n showAllStores,\n displayList,\n locatorView,\n onShowAllStores,\n productPickUpDeliveryOptions,\n hasEnabledPickupFilterToShowStore\n } = this.props;\n\n const toggleButtonText = displayList ? viewMapText : viewListText;\n\n return (\n
\n \n
\n )}\n {this.renderPickupModesList(\n this.props,\n toggleButtonText,\n productPickUpDeliveryOptions,\n pickupFilterMenuHeading,\n locatorView,\n pickupFilterByHeading,\n hasEnabledPickupFilterToShowStore,\n displayList\n )}\n \n );\n }\n\n /**\n * Handles the key press on the input box.\n * @param event - Event object.\n */\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\n // In order to avoid that. Checking if the search result is open or not.\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\n if (activeDescedantValue) {\n if (this.previousValue === '') {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n return;\n }\n\n if (activeDescedantValue !== this.previousValue) {\n this.previousValue = activeDescedantValue;\n this.isSearchResultOpened = true;\n } else {\n this.isSearchResultOpened = false;\n }\n }\n }\n };\n\n /**\n * Calls method display result.\n * @param event - The first number.\n */\n private readonly _handleKeyPressPrev = (event: React.KeyboardEvent): void => {\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Space) {\n this.props.onShowAllStores();\n }\n };\n\n /**\n * Method called on search text changed.\n * @param event - Input value.\n */\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\n const inputValue: string = event.target.value;\n\n await this.props.searchTermChanged(inputValue);\n };\n\n /**\n * Method called on search submit.\n * @param event - Input value.\n */\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\n event.preventDefault(); // Prevents form submission\n this.searchBoxRef.current?.blur();\n if (!this.isSearchResultOpened) {\n await this.props.performSearch(this.props.value);\n }\n this.isSearchResultOpened = false;\n };\n\n /**\n * Method called on product pickup option change.\n * @returns - Void.\n */\n private readonly _onChangeHandler = () => async (deliveryCode: string): Promise => {\n this.props.filterPickupModeSelected(deliveryCode);\n return Promise.resolve();\n };\n\n /**\n * Method to render pickup mode list.\n * @param props - Store selector search form props.\n * @param toggleButtonText - Locator view button text.\n * @param productPickUpDeliveryOptions - Product DeliveryOption List.\n * @param pickupFilterMenuHeading - Pickup store button text.\n * @param locatorView - Locator View is on\\off.\n * @param pickupFilterByHeading - Pickup list label text.\n * @param hasEnabledPickupFilterToShowStore - Flag to check header filter is enabled.\n * @param shouldDisplayList - Display List.\n * @returns Jsx component.\n */\n private readonly renderPickupModesList = (\n props: IStoreSelectorSearchFormProps,\n toggleButtonText: string,\n productPickUpDeliveryOptions: DeliveryOption[] | undefined,\n pickupFilterMenuHeading: string | undefined,\n locatorView: boolean | undefined,\n pickupFilterByHeading: string | undefined,\n hasEnabledPickupFilterToShowStore: boolean | undefined,\n shouldDisplayList?: boolean\n ): JSX.Element | null => {\n const toggleButtonClass = shouldDisplayList ? 'view-map' : 'list-view';\n if (hasEnabledPickupFilterToShowStore) {\n return (\n
\n {locatorView && (\n \n {toggleButtonText}\n \n )}\n \n
{pickupFilterByHeading}
\n
\n );\n }\n if (locatorView) {\n return (\n \n {toggleButtonText}\n \n );\n }\n return null;\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IStoreSelectorResources, ITermsOfServiceLinkData } from '../store-selector.props.autogenerated';\n\nexport interface IStoreSelectorEmptyMessageProps {\n resources: IStoreSelectorResources;\n}\nexport const StoreSelectorEmptyMessage: React.FC = ({ resources }) => (\n
\n

{resources.emptyLocationsText}

\n
\n);\n\nexport const StoreSelectorWaiting: React.FC = () =>
;\n\nexport interface IStoreSelectorTermsOfServiceProps {\n link?: ITermsOfServiceLinkData;\n requestContext: Msdyn365.IRequestContext;\n onTextChange?(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const StoreSelectorTermsOfService: React.FC = ({ link, requestContext, onTextChange }) => {\n if (link) {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-store-select__terms-link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link'\n };\n\n return (\n
\n \n
\n );\n }\n return null;\n};\n\nexport interface IStoreSelectorFoundLocationsMessage {\n resources: IStoreSelectorResources;\n locations?: IFullOrgUnitAvailability[];\n searchRadius: number;\n preferredDistanceUnit: string;\n isSeeAllStore: boolean;\n}\nexport const StoreSelectorFoundLocationsMessage: React.FC = ({\n locations,\n searchRadius,\n resources,\n isSeeAllStore,\n preferredDistanceUnit\n}) => {\n if (locations) {\n const storeCountMessage =\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n return (\n
\n {isSeeAllStore\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\n
\n );\n }\n\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOption, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { PickUpOptionList } from '../pickup-option-list';\nimport { buildDistanceString, matchDeliveryOptions } from '../store-selector-location-line-item';\n\n/**\n * Store Locator line item resources.\n */\nexport interface ISelectedStoreResources {\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreProps {\n className?: string;\n shouldHideStockStatus?: boolean;\n isCurrentLocation?: boolean;\n isInStock?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n resources: ISelectedStoreResources;\n stockStatusLabel?: string;\n preferredStoreLocationId: string | null;\n isPreferredStoreEnabled?: boolean;\n isLocationDisabled?: boolean;\n telemetryContent?: ITelemetryContent;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n preferredDistanceUnit: string;\n filteredPickupMode?: string;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * Store Selector resources.\n */\nexport interface ISelectedStoreViewProps {\n isCurrentLocation?: boolean;\n canSelectLocation?: boolean;\n selectedStore?: IFullOrgUnitAvailability;\n deliveryOptions?: DeliveryOption[];\n isPreferredStore?: boolean;\n resources: ISelectedStoreResources;\n\n storeDetailsMain: INodeProps;\n storeHeader: INodeProps;\n storeName: React.ReactNode;\n storeDistance: React.ReactNode;\n storeDetailsAvailabilityContainer: INodeProps;\n productAvailability: React.ReactNode;\n stockStatus: React.ReactNode;\n currentLocation: React.ReactNode;\n pickUpDeliveryOptionButton: React.ReactNode;\n pickupModes?: React.ReactNode;\n preferredStoreButton?: React.ReactNode;\n removePreferredStoreButton?: React.ReactNode;\n storeDetailsCloseButton?: React.ReactNode;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n}\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupInStoreClickHandler = (props: ISelectedStoreProps) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation);\n }\n};\n\n/**\n * Set Preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onSetPreferredStoreClickHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onSetAsPreferredStore(props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber);\n};\n\n/**\n * On Change functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onChangeHandler = (props: ISelectedStoreProps) => async (deliveryCode: string): Promise => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, deliveryCode);\n }\n return Promise.resolve();\n};\n\n/**\n * Remove preferred store functionality.\n * @param props -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst removePreferredStoreHandler = (props: ISelectedStoreProps) => () => {\n props.handlers.onRemovePreferredStore();\n};\n\n/**\n * On Store locator click functionality.\n * @param props -Store locator location items.\n * @param pickupMode -Store locator location items.\n * @returns Store locator selected location line item action.\n */\nconst onPickupModeSelectHandler = (props: ISelectedStoreProps, pickupMode?: string) => () => {\n if (props.selectedStore?.OrgUnitAvailability?.OrgUnitLocation) {\n props.handlers.onSelected(props.selectedStore.OrgUnitAvailability.OrgUnitLocation, pickupMode);\n }\n};\n\n/**\n * On store details close functionality.\n * @param props -Store locator location items.\n * @returns Void promise.\n */\nconst storeDetailsModalHandler = (props: ISelectedStoreProps) => async (): Promise => {\n await props.handlers.closeStoreDetailsModal();\n};\n\n/**\n * Method to render pickup modes.\n * @param props - StoreSelector Line item props.\n * @param deliveryOptionList - Product DeliveryOption List.\n * @param pickupInStoreButtonText - Pickup store button text.\n * @param pickupInStoreAriaLabel - Pickup store aria label.\n * @returns Jsx component.\n */\nconst renderPickupModes = (\n props: ISelectedStoreProps,\n deliveryOptionList: DeliveryOption[],\n pickupInStoreButtonText: string,\n pickupInStoreAriaLabel: string\n): JSX.Element | null => {\n if (props.filteredPickupMode === undefined) {\n return (\n \n );\n }\n return (\n \n {pickupInStoreButtonText}\n \n );\n};\n\n/**\n * Renders selected store details.\n * @param props - Store location details props.\n * @returns - Selected Store view props.\n */\nconst selectedStoreDetails = (props: ISelectedStoreProps): ISelectedStoreViewProps => {\n const {\n className,\n shouldHideStockStatus,\n isCurrentLocation,\n isInStock,\n selectedStore,\n resources,\n stockStatusLabel,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n isLocationDisabled,\n telemetryContent,\n storePickUpOptionList,\n productPickUpOptionList,\n preferredDistanceUnit\n } = props;\n\n const parentClassName = className ? className : 'ms-store-select__map__selected_store';\n const storeName: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const location = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const distanceAsString: string | undefined = buildDistanceString(location?.Distance, preferredDistanceUnit, isLocationDisabled);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockLabel = stockStatusLabel ? stockStatusLabel : undefined;\n // eslint-disable-next-line no-nested-ternary -- Required to check stock Label\n const stockText: string | undefined = shouldHideStockStatus ? undefined : stockLabel ? stockLabel : resourceLabel;\n const canSelectLocation = !shouldHideStockStatus && isInStock;\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const isPreferredStore = preferredStoreLocationId === location?.OrgUnitNumber;\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n\n const viewProps: ISelectedStoreViewProps = {\n selectedStore,\n isCurrentLocation,\n canSelectLocation,\n isPreferredStore,\n resources,\n deliveryOptions: deliveryOptionList,\n storeDetailsMain: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__main`\n },\n storeHeader: {\n tag: 'div' as NodeTag,\n className: `${parentClassName}__header`\n },\n storeName: {storeName},\n storeDetailsCloseButton: \n ),\n pickupModes: renderPickupModes(props, deliveryOptionList, pickupInStoreButtonText, pickupInStoreAriaLabel),\n preferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.preferredStoreText}\n \n ) : null,\n removePreferredStoreButton: isPreferredStoreEnabled ? (\n \n {resources.setAsPreferredStoreText}\n \n ) : null,\n handlers: {\n onSelected: props.handlers.onSelected,\n onSetAsPreferredStore: props.handlers.onSetAsPreferredStore,\n onRemovePreferredStore: props.handlers.onRemovePreferredStore,\n closeStoreDetailsModal: props.handlers.closeStoreDetailsModal\n }\n };\n\n return viewProps;\n};\n\n/**\n * Store location line item component.\n */\nexport const SelectedStoreComponent = selectedStoreDetails as (props: ISelectedStoreProps) => ISelectedStoreViewProps;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { DeliveryOption, ItemAvailability, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo, IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n getOrgUnitLocationsByArea,\n GetOrgUnitLocationsByAreaInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n NodeTag,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n StoreSelectorEmptyMessage,\n StoreSelectorFoundLocationsMessage,\n StoreSelectorLocationLines,\n StoreSelectorSearchForm,\n StoreSelectorTermsOfService,\n StoreSelectorWaiting\n} from './components';\nimport { ISelectedStoreProps, ISelectedStoreViewProps, SelectedStoreComponent } from './components/selected-store/selected-store';\nimport { buildStoreHours, IHoursDisplayInfo, secondsToTime } from './components/store-selector-location-line-item/date-time-helpers';\nimport { IStoreSelectorData } from './store-selector.data';\nimport {\n IStoreSelectorProps,\n IStoreSelectorResources,\n mode as modeEnum,\n searchRadiusUnit as SearchRadiusUnit,\n style as styleEnum\n} from './store-selector.props.autogenerated';\n\n/**\n * StoreSelector State Interface.\n */\nexport interface IStoreSelectorState {\n isSearchInProgress: boolean;\n searchTerm?: string;\n isSeeAllStoreValue: boolean;\n isLocationDisabled?: boolean;\n filteredPickupMode?: string;\n}\n\n/**\n * StoreSelector View Props Interface.\n */\nexport interface IStoreSelectorViewProps extends IStoreSelectorProps {\n state: IStoreSelectorState;\n\n // Containers:\n ModuleProps: IModuleProps;\n BodyContainerProps: INodeProps;\n FooterContainerProps: INodeProps;\n HeaderContainerProps: INodeProps;\n HeaderProps?: React.ReactNode;\n\n // Components\n locationsMessage?: React.ReactNode;\n search?: React.ReactNode;\n spinner?: React.ReactNode;\n locationsList?: React.ReactNode;\n selectedLocation?: ISelectedStoreViewProps;\n noLocationsMessage?: React.ReactNode;\n terms?: React.ReactNode;\n headerText?: React.ReactNode;\n sortLocations?: IFullOrgUnitAvailability[];\n locationListProps?: IStoreSelectorLocationLineItemProps[];\n bodyWrapperProps?: INodeProps;\n storeResultContainerProps?: INodeProps;\n mapContainerProps?: INodeProps;\n maps?: React.ReactNode;\n isMobileView?: boolean;\n storeDetailsModal?: INodeProps;\n\n callbacks: {\n closeDialog(): Promise;\n searchTermChanged(searchTerm: string): Promise;\n performSearch(searchTerm: string): Promise;\n selectedLocation(location: OrgUnitLocation | undefined): Promise;\n getAndUpdateUserLocation(): Promise;\n attachMapAutoSuggest(): Promise;\n onSuggestionSelected(result: Microsoft.Maps.ISuggestionResult): Promise;\n setPreferredStore(storeId: string | undefined): Promise;\n removePreferredStore(): Promise;\n setSelectedStore(storeId: string | undefined): Promise;\n setOrgUnitStoreInformation(location: OrgUnitLocation | undefined): Promise;\n };\n}\n\n/**\n * StoreSelectorLocation Line Resources Interface.\n */\nexport interface IStoreSelectorLocationLineItemResources {\n contactInfoHeader: string;\n storeHoursHeader: string;\n availabilityInfoHeader: string;\n closedText: string;\n outOfStock: string;\n inStock: string;\n currentLocation: string;\n selectLocation: string;\n selectLocationAriaLabelFormat: string;\n setAsPreferredStoreText: string;\n setAsPreferredStoreTextAriaLabel: string;\n preferredStoreText: string;\n preferredStoreAriaLabel: string;\n\n days: {\n monday: string;\n tuesday: string;\n wednesday: string;\n thursday: string;\n friday: string;\n saturday: string;\n sunday: string;\n mondayFull: string;\n tuesdayFull: string;\n wednesdayFull: string;\n thursdayFull: string;\n fridayFull: string;\n saturdayFull: string;\n sundayFull: string;\n };\n}\n\n/**\n * ILocationHours Interface.\n */\nexport interface ILocationHours {\n openFrom?: string;\n openTo?: string;\n}\n\n/**\n * StoreSelectorLocation Line Item Props Interface.\n */\nexport interface IStoreSelectorLocationLineItemProps {\n location: OrgUnitLocation;\n storeHours?: StoreHours;\n storeHoursList?: IHoursDisplayInfo[];\n\n hideStockStatus?: boolean;\n isInStock?: boolean;\n isCurrentLocation?: boolean;\n\n resources: IStoreSelectorLocationLineItemResources;\n stockStatusLabel?: string;\n storeLocatorView?: boolean;\n isPreferredStoreEnabled?: boolean;\n index: string;\n preferredStoreLocationId: string | null;\n storePickUpOptionList?: DeliveryOption[];\n productPickUpOptionList?: DeliveryOption[];\n selectedStoreLocationId?: string;\n locationOpen?: ILocationHours;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n preferredDistanceUnit: string;\n isLocationDisabled?: boolean;\n handlers: {\n onSelected(location: OrgUnitLocation, deliveryMode?: string): void;\n onSetAsPreferredStore(locationId: string | undefined): void;\n onRemovePreferredStore(): void;\n closeStoreDetailsModal(): Promise;\n };\n onClick: (locationId: string | undefined) => void;\n}\n\n/**\n *\n * Pick Up In Store module.\n * @extends React.Component>}\n */\n@observer\nclass StoreSelector extends React.Component, IStoreSelectorState> {\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private storeCounter: number;\n\n private isPreferredStoreEnabled?: boolean;\n\n public constructor(props: IStoreSelectorProps) {\n super(props);\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.state = { isSearchInProgress: true, searchTerm: '', isSeeAllStoreValue: false, filteredPickupMode: undefined };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.storeCounter = 0;\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\n } = this.props;\n\n // Adding Timeout to make sure it loads the data based upon the preferred store.\n setTimeout(() => {\n this._getAndUpdateStoreLocation();\n }, 0);\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isDialogOpen,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context?.id === this.props.id) {\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\n async () => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (!context || context.id === this.props.id) {\n await this._searchTermChanged('');\n this._getAndUpdateStoreLocation();\n }\n }\n );\n\n if (this.props.data.storeSelectorStateManager.result?.loadMapApi) {\n await this.props.data.storeSelectorStateManager.result.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\n });\n }\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\n () => {\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\n key: channel?.BingMapsEnabled ? channel.BingMapsApiKey : '',\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context.actionContext.requestContext.channel?.ChannelCountryRegionISOCode\n });\n }\n );\n\n reaction(\n () => this.props.data.availabilitiesWithHours.result,\n async () => {\n if (this.props.data.storeSelectorStateManager.result?.isDialogOpen) {\n const storeLocationList = this.props.data.availabilitiesWithHours.result;\n if (storeLocationList) {\n await this._setOrgUnitStoreInformation(storeLocationList);\n }\n }\n }\n );\n\n if (isAutoSuggestionEnabled) {\n when(\n () => {\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\n return isMapApiLoaded && isDialogOpen && isSameContext;\n },\n () => {\n setTimeout(async () => {\n await this._attachMapAutoSuggest();\n }, 0);\n }\n );\n }\n }\n\n public shouldComponentUpdate(): boolean {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n if (context && context.id === this.props.id) {\n return true;\n }\n return false;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element {\n const {\n config: {\n termsOfServiceLink,\n className,\n heading,\n mode,\n style,\n setAsPreferredStore: shouldSetAsPreferredStore,\n showAllStores: shouldShowAllStores,\n lookupRadius,\n enablePickupFilterToShowStore: hasEnablePickupFilterToShowStore,\n searchRadiusUnit\n },\n context: {\n telemetry,\n app: { config: appConfig },\n actionContext: {\n requestContext: { channel, cookies }\n }\n },\n slots: { maps: mapSlot },\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n this.storeCounter = 0;\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n const isMapDisabled = !(channel?.BingMapsApiKey && channel.BingMapsEnabled);\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const isDialogOpen: boolean = storeSelectorStateManager\n ? storeSelectorStateManager.isDialogOpen && context?.id === this.props.id\n : false;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const isInlineView = styleDefault === styleEnum.inline;\n const isLocatorView = modeDefault === modeEnum.findStores;\n const shouldHideInventory = isLocatorView;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\n this.isPreferredStoreEnabled = shouldSetAsPreferredStore && cookies?.isConsentGiven();\n const canShowLocationView =\n context && (context.showMapViewLink === undefined || context.showMapViewLink) && storeSelectorStateManager?.isMapModuleLoaded;\n\n const storeSelectorActions = {\n async toggleListMapViewState(): Promise {\n await storeSelectorStateManager?.toggleListMapViewState();\n }\n };\n\n if (!channel?.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n }\n\n const configHeading = heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText;\n const preferredDistanceUnit =\n searchRadiusUnit === SearchRadiusUnit.kilometers ? resources.kilometersShortText : resources.milesShortText;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n let storeLocationList: IFullOrgUnitAvailability[] | undefined = shouldHideInventory ? storeLocations : availabilitiesWithHours;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Reading value from app config.\n const isEnableOutofStock: boolean = appConfig?.enableStockCheck || false;\n const alreadySelectedLocation = context ? context.alreadySelectedLocation : undefined;\n const productPickUpOptionList = storeSelectorStateManager?.context?.deliveryOptions?.DeliveryOptions;\n if (this.state.filteredPickupMode && storeLocationList) {\n storeLocationList = this.onFilterLocations(storeLocationList, this.state.filteredPickupMode);\n }\n\n let sortLocation = null;\n if (storeLocationList) {\n sortLocation = this._sortStores(storeLocationList, this.isPreferredStoreEnabled, preferredLocationId);\n }\n\n const locationListProps = this._getStoreLocationListProps(\n isEnableOutofStock,\n isLocatorView,\n preferredLocationId,\n this.isPreferredStoreEnabled,\n selectedStoreLocationId,\n sortLocation ?? null,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n\n const hasMapSlot = ArrayExtensions.hasElements(mapSlot);\n const dialogClassName = hasMapSlot ? 'ms-store-select__map' : '';\n const viewProps: IStoreSelectorViewProps = {\n ...(this.props as IStoreSelectorProps),\n state: this.state,\n maps: hasMapSlot ? mapSlot[0] : undefined,\n\n ModuleProps: {\n tag: isInlineView ? ('div' as NodeTag) : Modal,\n moduleProps: this.props,\n className: classname(\n `ms-store-${isInlineView ? 'locate' : 'select'}`,\n className,\n dialogClassName,\n isInlineView ? '' : 'msc-modal-input-required'\n ),\n autoFocus: true,\n fade: true,\n isOpen: isDialogOpen,\n 'aria-label': configHeading,\n onClosed: this._closeDialog,\n horizontalPosition: 'center',\n verticalPosition: 'center',\n toggle: this._closeDialog\n },\n isMobileView: isMobileDevice,\n HeaderContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalHeader,\n className: `ms-store-select__${isInlineView ? 'header' : 'modal-header'}`,\n toggle: this._closeDialog\n },\n HeaderProps: configHeading && (\n \n ),\n FooterContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalFooter,\n className: `ms-store-select__${isInlineView ? 'footer' : 'modal-footer'} ${!shouldDisplayList ? 'map-only-view' : ''}`\n },\n BodyContainerProps: {\n tag: isInlineView ? ('div' as NodeTag) : ModalBody,\n className: `ms-store-select__${isInlineView ? 'body' : 'modal-body'}`\n },\n bodyWrapperProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__body_wrapper'\n },\n storeResultContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__store_container'\n },\n mapContainerProps: {\n tag: 'div' as NodeTag,\n className: 'ms-store-select__map_container'\n },\n storeDetailsModal: {\n tag: 'div' as NodeTag,\n className: `ms-store-select__map__selected_store__modal ${\n selectedStoreLocationId && isDialogOpen && !shouldDisplayList ? 'show' : 'hide'\n }`\n },\n locationsMessage: !this.state.isLocationDisabled && (\n \n ),\n selectedLocation: this.renderSelectedStore(\n shouldHideInventory,\n preferredDistanceUnit,\n preferredStore,\n this.isPreferredStoreEnabled,\n isEnableOutofStock,\n productPickUpOptionList,\n shouldDisplayList\n ),\n search: (\n \n ),\n spinner: ,\n locationsList: ArrayExtensions.hasElements(storeLocationList) ? (\n \n ) : (\n undefined\n ),\n noLocationsMessage: ,\n terms: (\n \n ),\n\n // Not being used in current context, we can use it here to pass more props.\n headerText: (\n {heading ? heading : isLocatorView ? resources.storeLocatorHeaderText : resources.storeSelectorHeaderText}\n ),\n sortLocations: sortLocation,\n locationListProps,\n callbacks: {\n searchTermChanged: this._searchTermChanged,\n performSearch: this._performSearch,\n closeDialog: this._closeDialog,\n selectedLocation: this._onOrgUnitLocationSelected,\n getAndUpdateUserLocation: async () => {\n this._getAndUpdateStoreLocation();\n return Promise.resolve();\n },\n attachMapAutoSuggest: this._attachMapAutoSuggest,\n onSuggestionSelected: this._onOrgUnitLocationSelected,\n setPreferredStore: this._setPreferredStore,\n removePreferredStore: this._removePreferredStore,\n setSelectedStore: this._setSelectedStore,\n setOrgUnitStoreInformation: this._setOrgUnitStoreInformation\n }\n } as IStoreSelectorViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Render the selected store for the mobile devices.\n * @param shouldHideInventory -- Hide Inventory.\n * @param preferredDistanceUnit -- Preferred Distance Unit.\n * @param preferredStore -- Preferred Store.\n * @param isPreferredStoreEnabled -- Is Preferred Store Enabled.\n * @param hasEnabledOutOfStockCheck -- Stock check is enabled or not.\n * @param productPickUpOptionList -- Product pickup option list.\n * @param shouldDisplayList - Should Display list.\n * @returns -- Returns the view props.\n */\n public renderSelectedStore = (\n shouldHideInventory: boolean,\n preferredDistanceUnit: string,\n preferredStore: IStoreInfo | undefined,\n isPreferredStoreEnabled: boolean | undefined,\n hasEnabledOutOfStockCheck: boolean,\n productPickUpOptionList?: DeliveryOption[],\n shouldDisplayList?: boolean\n ): ISelectedStoreViewProps | undefined => {\n const {\n resources,\n data: {\n availabilitiesWithHours: { result: availabilitiesWithHours },\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations }\n }\n } = this.props;\n\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n const selectedStore = (shouldHideInventory ? storeLocations : availabilitiesWithHours)?.find(\n store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === selectedStoreLocationId\n );\n const orgUnitLocation = selectedStore?.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreResources = this._mapResources(resources);\n\n if (!shouldDisplayList && selectedStore) {\n const selectedProps: ISelectedStoreProps = {\n shouldHideStockStatus: shouldHideInventory,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, context?.alreadySelectedLocation),\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, selectedStore.OrgUnitAvailability?.ItemAvailabilities),\n selectedStore,\n resources: selectedStoreResources,\n stockStatusLabel: this._stockInventoryLabel(selectedStore),\n preferredStoreLocationId: preferredStore?.StoreId ? preferredStore.StoreId : '',\n isPreferredStoreEnabled,\n isLocationDisabled: this.state.isLocationDisabled,\n telemetryContent: this.telemetryContent,\n storePickUpOptionList: selectedStore.OrgUnitPickUpDeliveryModes?.DeliveryOptions,\n productPickUpOptionList,\n preferredDistanceUnit,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n\n return SelectedStoreComponent(selectedProps);\n }\n\n return undefined;\n };\n\n /**\n * Method to be called on link text change.\n * @param event -Content Edit Event.\n */\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.termsOfServiceLink) {\n this.props.config.termsOfServiceLink.linkText = event.target.value;\n }\n };\n\n /**\n * Method to be called on heading change.\n * @param event -Content Edit Event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading = event.target.value;\n };\n\n /**\n * Show all stores handler function.\n */\n private readonly onShowAllStoresHandler = () => {\n this._getAndUpdateStoreLocation(true);\n this.setState({ filteredPickupMode: undefined });\n };\n\n /**\n * Method to be called for filtered the store location based on the filter selected by the user.\n * @param stores -All the stores from the API.\n * @param filteredPickupMode -Filter selected by the user.\n * @returns -Filtered stores.\n */\n private readonly onFilterLocations = (stores: IFullOrgUnitAvailability[], filteredPickupMode: string) => {\n return stores.filter(location => {\n return location.OrgUnitPickUpDeliveryModes?.DeliveryOptions?.some(deliveryOption => {\n return deliveryOption.Code === filteredPickupMode;\n });\n });\n };\n\n /**\n * Filter Store by pickup mode.\n * @param deliveryCode -Delivery Code.\n */\n private readonly onFilteredPickupMode = (deliveryCode: string) => {\n this.setState({ filteredPickupMode: deliveryCode });\n };\n\n /**\n * Method will sort all stores.\n * @param stores -Stores List.\n * @param isPreferredStoreEnabled -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @returns List of Stores.\n */\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\n private _sortStores(\n stores: IFullOrgUnitAvailability[],\n isPreferredStoreEnabled: boolean | undefined,\n preferredStoreLocationId: string\n ): IFullOrgUnitAvailability[] {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n isPreferredStoreEnabled &&\n preferredStoreLocationId &&\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreLocationId;\n\n return [...stores.filter(isPreferredStore), ...stores.filter(store => !isPreferredStore(store))];\n }\n\n /**\n * Method will list of store selector location line.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param stores -Store Id.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns List of StoreSelectorLocation Line.\n */\n private _getStoreLocationListProps(\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n stores: IFullOrgUnitAvailability[] | null,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps[] {\n const storeList: IStoreSelectorLocationLineItemProps[] = [];\n if (ArrayExtensions.hasElements(stores)) {\n stores.map((store, index: number) => {\n const storeLineProps = this._createStoreLocationList(\n store,\n index,\n hasEnabledOutOfStockCheck,\n isStoreLocatorView,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n selectedStoreLocationId,\n preferredDistanceUnit,\n alreadySelectedLocation,\n productPickUpOptionList\n );\n if (storeLineProps) {\n storeList.push(storeLineProps);\n }\n });\n }\n return storeList;\n }\n\n /**\n * Initialize Map AutoSuggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n config: { autoSuggestOptions },\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\n /**\n * Callback for the autosuggest API.\n */\n callback: () => {\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\n this.autoSuggestManager.attachAutosuggest(\n `#ms-store-select__search-box_${this.props.id}`,\n `#ms-store-select__search-box-container_${this.props.id}`,\n this._onSuggestionSelected\n );\n },\n\n /**\n * Error call back for autosuggest API.\n */\n errorCallback: () => {\n if (telemetry) {\n telemetry.debug('Unable to attach map auto suggest.');\n }\n },\n credentials: channel?.BingMapsApiKey\n });\n }\n };\n\n /**\n * On Selecting Location Suggestion.\n * @param result - Map Suggestions List.\n */\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n const context = this.props.data.storeSelectorStateManager.result?.context;\n if (context && context.id === this.props.id) {\n await this._searchTermChanged(result.formattedSuggestion);\n await this._performSearch(result.formattedSuggestion);\n }\n };\n\n /**\n * On Selecting Preferred Store.\n * @param storeId - Store Id.\n */\n private readonly _setPreferredStore = async (storeId: string | undefined): Promise => {\n if (!storeId) {\n return;\n }\n\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n config: { mode },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n storeLocations: { result: storeLocations },\n availabilitiesWithHours: { result: availabilitiesWithHours }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n\n let stores: IFullOrgUnitAvailability[];\n if (modeDefault === modeEnum.findStores && storeLocations) {\n stores = storeLocations;\n } else {\n stores = availabilitiesWithHours!;\n }\n\n const preferredStore = stores.find(store => store.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === storeId);\n\n await storeSelectorStateManager.setPreferredStoreLocation(\n storeId,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName,\n cookies.isConsentGiven(),\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Latitude,\n preferredStore?.OrgUnitAvailability?.OrgUnitLocation?.Longitude\n );\n };\n\n /**\n * On Removing Preferred Store.\n */\n private readonly _removePreferredStore = async (): Promise => {\n const {\n context: {\n actionContext: {\n requestContext: { cookies }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.clearPreferredStore(cookies.isConsentGiven());\n };\n\n /**\n * Method called to close the store details modal that comes up on clicking the pushpin.\n * @returns Void promise.\n */\n private readonly _closeStoreDetailModal = async (): Promise => {\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\n };\n\n /**\n * On Selecting Store for pickup.\n * @param storeId - Store Id.\n */\n private readonly _setSelectedStore = async (storeId: string | undefined): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n await storeSelectorStateManager.setSelectedStoreLocationId(storeId);\n };\n\n /**\n * Method to be called on search.\n * @param searchTerm - Search string.\n */\n private readonly _performSearch = async (searchTerm: string): Promise => {\n const {\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!searchTerm || !storeSelectorStateManager) {\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\n\n if (location) {\n await this._updateLocations(location.latitude, location.longitude);\n } else {\n await this._updateLocations();\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n };\n\n /**\n * Method to be called on search term changed.\n * @param searchTerm - Search string.\n */\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\n this.setState({ searchTerm });\n };\n\n /**\n * Method to be called updating the store location.\n * @param shouldShowAllStores - Flag to show all stores.\n */\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\n const {\n config: { style },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n\n if (styleDefault !== styleEnum.inline && (!storeSelectorStateManager || !storeSelectorStateManager.isDialogOpen)) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: true, isSeeAllStoreValue: false });\n\n if (navigator?.geolocation) {\n navigator.geolocation.getCurrentPosition(\n async position => {\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\n this.setState({ isLocationDisabled: false, isSearchInProgress: true });\n if (shouldShowAllStores) {\n this.setState({ isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(position.coords.latitude, position.coords.longitude, 0);\n } else {\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n async error => {\n // If the location setting is turned off\n if (error.PERMISSION_DENIED) {\n this.setState({ isLocationDisabled: true, isSeeAllStoreValue: true });\n await this._searchTermChanged('');\n await this._updateLocations(0, 0, 0);\n }\n\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n },\n { timeout: 5000 }\n );\n } else {\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\n this.setState({ isSearchInProgress: false });\n }\n };\n\n /**\n * Method to be called closing the store selector dialog.\n * @returns Void promise.\n */\n private readonly _closeDialog = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n this.setState({ searchTerm: '' });\n\n if (storeSelectorStateManager) {\n storeSelectorStateManager.context?.parentElementRef?.current?.focus();\n return storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method to set store info.\n * @param orgUnitStoreInformation - Store Info Object.\n * @returns Void promise.\n */\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n config: { style },\n telemetry\n } = this.props;\n\n if (!storeSelectorStateManager) {\n return;\n }\n\n const context = storeSelectorStateManager.context;\n const moduleId: string = context?.id ? context.id : this.props.id;\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n let input: IStoreSelectionStateContext = {\n /**\n * On Location selected.\n * @returns - Returns promise.\n */\n onLocationSelected: async () => {\n // TO-DO handle event for when location in selected\n return Promise.resolve();\n }\n };\n\n if (storeSelectorStateManager.context) {\n input = storeSelectorStateManager.context;\n }\n\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager.preferredStore;\n const preferredLocationId = preferredStore?.StoreId ? preferredStore.StoreId : '';\n const storeLocationList = this._sortStores(orgUnitStoreInformation, this.isPreferredStoreEnabled, preferredLocationId);\n\n input = {\n ...input,\n id: moduleId,\n showMapViewLink: context?.showMapViewLink,\n parentElementRef: context?.parentElementRef,\n isDialog: styleDefault === styleEnum.dialog,\n orgUnitStoreInformation: storeLocationList,\n product: context?.product\n };\n\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\n if (telemetry) {\n telemetry.error(error.message);\n telemetry.debug('Unable to Update store location state');\n }\n });\n };\n\n /**\n * Method to update user location.\n * @param latitude - User location.\n * @param longitude - User location.\n * @param radius - Search Criteria Radius.\n * @returns Void promise.\n */\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\n const {\n config: { mode, lookupRadius, style, searchRadiusUnit },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const styleDefault = style !== undefined ? style : styleEnum.dialog;\n const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.kilometers ? 1 : 0;\n const modeDefault = mode !== undefined ? mode : modeEnum.pickupInStore;\n const preferredStore: IStoreInfo | undefined = storeSelectorStateManager?.preferredStore;\n let localLatitude = this.state.searchTerm || !preferredStore?.Latitude ? latitude : preferredStore.Latitude;\n let long = this.state.searchTerm || !preferredStore?.Longitude ? longitude : preferredStore.Longitude;\n if (styleDefault === styleEnum.inline) {\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\n if (lastInlineStoreLocation && !this.state.searchTerm) {\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\n }\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\n }\n\n if (modeDefault === modeEnum.findStores) {\n await this.getOrgUnitLocationByArea(calRadius, distanceUnitValue, localLatitude, long);\n return;\n }\n\n await this.getFullAvailableInventoryNearby(calRadius, distanceUnitValue, localLatitude, long);\n };\n\n /**\n * Get org unit location by area.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getOrgUnitLocationByArea = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n context: { actionContext }\n } = this.props;\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(\n latitude,\n longitude,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\n if (orgUnitLocations) {\n await this._setOrgUnitStoreInformation(orgUnitLocations);\n await this._setSelectedStore(undefined);\n }\n };\n\n /**\n * Get full available inventory nearby.\n * @param calRadius - Radius.\n * @param distanceUnitValue - Distance unit value.\n * @param latitude - Latitude.\n * @param longitude - Longitude.\n * @returns - Returns a void promise.\n */\n private readonly getFullAvailableInventoryNearby = async (\n calRadius: number,\n distanceUnitValue: number,\n latitude?: number,\n longitude?: number\n ): Promise => {\n const {\n telemetry,\n context: { actionContext },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (!storeSelectorStateManager || !storeSelectorStateManager.context) {\n // Store selector dialog isn't open yet, so don't try and update anything\n return;\n }\n\n if (!storeSelectorStateManager.context.product) {\n // TODO: Use alternative search method here to not make inventory check\n return;\n }\n\n const input = new GetFullAvailableInventoryNearbyInput(\n storeSelectorStateManager.context.product.RecordId,\n latitude ?? 0,\n longitude ?? 0,\n calRadius,\n distanceUnitValue,\n this.state.isLocationDisabled\n );\n\n await getFullAvailableInventoryNearby(input, actionContext).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get full available inventory near by');\n });\n };\n\n /**\n * Method to called on store selected.\n * @param location - Store Info.\n * @param deliveryMode - Pickup mode.\n * @returns Void promise.\n */\n private readonly _onOrgUnitLocationSelected = async (location: OrgUnitLocation | undefined, deliveryMode?: string): Promise => {\n const {\n telemetry,\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager) {\n if (location && storeSelectorStateManager.context) {\n // Want to eat exceptions here so that the dialog still closes even if the onLocationSelected call goes wrong\n await storeSelectorStateManager.context.onLocationSelected(location, deliveryMode).catch(error => {\n telemetry.warning(error);\n telemetry.error(error.message);\n telemetry.debug('Unable to get on org unit location selected');\n });\n }\n\n await storeSelectorStateManager.closeDialog();\n }\n };\n\n /**\n * Method will list of store selector location line.\n * @param store -Store Info.\n * @param index - List index.\n * @param hasEnabledOutOfStockCheck -Stores List.\n * @param isStoreLocatorView -Module config value.\n * @param preferredStoreLocationId -Store Id.\n * @param isPreferredStoreEnabled -Stores List.\n * @param selectedStoreLocationId -Module config value.\n * @param preferredDistanceUnit -Module config value.\n * @param alreadySelectedLocation -Already Selected Location.\n * @param productPickUpOptionList -Product supported Pickup Modes List.\n * @returns StoreSelectorLocation Line Prop.\n */\n private _createStoreLocationList(\n store: IFullOrgUnitAvailability,\n index: number,\n hasEnabledOutOfStockCheck: boolean,\n isStoreLocatorView: boolean,\n preferredStoreLocationId: string,\n isPreferredStoreEnabled: boolean | undefined,\n selectedStoreLocationId: string | undefined,\n preferredDistanceUnit?: string | undefined,\n alreadySelectedLocation?: OrgUnitLocation,\n productPickUpOptionList?: DeliveryOption[]\n ): IStoreSelectorLocationLineItemProps | undefined {\n const orgUnitLocation = store.OrgUnitAvailability?.OrgUnitLocation;\n const selectedStoreLocation = selectedStoreLocationId;\n const deliveryOptions = store.OrgUnitPickUpDeliveryModes;\n const lineResources = this._mapResources(this.props.resources);\n const storeOpenFrom: string | undefined = secondsToTime(orgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(orgUnitLocation?.OpenTo);\n const storeHours = store.StoreHours;\n\n if (orgUnitLocation) {\n ++this.storeCounter;\n return {\n location: orgUnitLocation,\n selectedStoreLocationId: selectedStoreLocation,\n storeHours,\n resources: lineResources,\n preferredDistanceUnit: preferredDistanceUnit!,\n isCurrentLocation: this._isCurrentLocation(orgUnitLocation, alreadySelectedLocation),\n hideStockStatus: !hasEnabledOutOfStockCheck,\n isInStock: this._isProductInStock(hasEnabledOutOfStockCheck, store.OrgUnitAvailability?.ItemAvailabilities),\n stockStatusLabel: this._stockInventoryLabel(store),\n storeLocatorView: isStoreLocatorView,\n index: this.storeCounter.toString(),\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n telemetryContent: this.telemetryContent,\n isLocationDisabled: this.state.isLocationDisabled,\n storePickUpOptionList: deliveryOptions?.DeliveryOptions,\n productPickUpOptionList,\n locationOpen: { openFrom: storeOpenFrom, openTo: storeOpenTo },\n storeHoursList: storeHours?.RegularStoreHours ? buildStoreHours(storeHours.RegularStoreHours, lineResources) : [],\n onClick: this._setSelectedStore,\n handlers: {\n onSelected: this._onOrgUnitLocationSelected,\n onSetAsPreferredStore: this._setPreferredStore,\n onRemovePreferredStore: this._removePreferredStore,\n closeStoreDetailsModal: this._closeStoreDetailModal\n }\n };\n }\n return undefined;\n }\n\n /**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\n private readonly _mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n };\n\n private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined, selectedLocation?: OrgUnitLocation): boolean =>\n (selectedLocation && location && selectedLocation.OrgUnitNumber === location.OrgUnitNumber) || false;\n\n /**\n * Method to get stock.\n * @param hasEnableOutOfStockCheck - Config to check for stock check enabled.\n * @param itemAvailabilities - Item quantity availability.\n * @returns Boolean value for item stock.\n */\n private readonly _isProductInStock = (\n hasEnableOutOfStockCheck: boolean,\n itemAvailabilities: ItemAvailability[] | undefined\n ): boolean => {\n if (!hasEnableOutOfStockCheck) {\n return true;\n }\n const quantityCount = 0;\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[0].AvailableQuantity ? itemAvailabilities[0].AvailableQuantity > quantityCount : false;\n }\n\n return false;\n };\n\n /**\n * Method to get stocklevel label.\n * @param isInStock - Stock available in store.\n * @returns Label for stock status.\n */\n private readonly _stockInventoryLabel = (isInStock: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (isInStock?.ProductInventoryInformation && ArrayExtensions.hasElements(isInStock.ProductInventoryInformation)) {\n for (let index = 0; index < isInStock.ProductInventoryInformation.length; index++) {\n if (\n isInStock.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n isInStock.ProductInventoryInformation[index].InventLocationId\n ) {\n return isInStock.ProductInventoryInformation[index].StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n}\n\nexport default StoreSelector;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { RichTextComponent } from '@msdyn365-commerce/core';\nimport {\n ContactInformationType,\n DeliveryOption,\n IDictionary,\n OrgUnitContact,\n OrgUnitLocation,\n StoreHours\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n buildStoreHours,\n IHoursDisplayInfo,\n ILocationHours,\n IStoreSelectorFoundLocationsMessage,\n IStoreSelectorLocationLineItemProps,\n IStoreSelectorLocationLineItemResources,\n IStoreSelectorViewProps,\n secondsToTime\n} from '@msdyn365-commerce-modules/store-selector';\nimport { ISelectedStoreViewProps } from '@msdyn365-commerce-modules/store-selector/src/modules/store-selector/components/selected-store/selected-store';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n isMobile,\n Module,\n Node,\n TelemetryConstant,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IStoreSelectorProps, IStoreSelectorResources } from '../definition-extensions/store-selector.ext.props.autogenerated';\n\n/**\n * PickUpMethodComponent View Props Interface.\n */\nexport interface IPickupComponent extends IStoreSelectorLocationLineItemProps {\n pickUpStatesProps: IStoreSelectorViewProps;\n}\n\nexport interface IPickUpButtonComponent {\n attributes: IDictionary | undefined;\n onPickupInStoreClickHandler?(): void;\n}\n\n/**\n * Found Locations Message component in Store Selector.\n * @param props - The component props.\n * @returns The JSX Element.\n */\nconst StoreSelectorFoundLocationsMessageComponent: React.FC = props => {\n const { locations, searchRadius, resources, isSeeAllStore, preferredDistanceUnit } = props;\n if (locations) {\n const storeCountMessage =\n preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\n\n return (\n ${locations.length.toString()}`\n )\n : storeCountMessage\n .replace(\n '{count}',\n `${locations.length.toString()}`\n )\n .replace(\n '{radius}',\n `${searchRadius.toString()}`\n )\n }\n />\n );\n }\n\n return null;\n};\n\n/**\n * Build distance string.\n * @param distance - The distance.\n * @param preferredDistanceUnit - The preferred distance unit.\n * @param resources - The module resources.\n * @param isLocationDisabled - True if location is disabled.\n * @returns The distance string.\n */\nconst buildDistanceString = (\n distance: number | undefined,\n preferredDistanceUnit: string,\n resources: IStoreSelectorResources & IStoreSelectorResources,\n isLocationDisabled?: boolean\n): string | undefined => {\n const closeDistance: number = 1;\n if (distance === undefined || isLocationDisabled) {\n return undefined;\n } else if (distance < closeDistance) {\n const closeDistanceString: string = resources.closeDistanceString;\n return closeDistanceString.replace('{preferredDistanceUnit}', preferredDistanceUnit);\n }\n const distanceAsString: string = resources.distanceString;\n return distanceAsString\n .replace('{preferredDistanceUnit}', preferredDistanceUnit)\n .replace('{distance}', Math.floor(distance).toString());\n};\n\n/**\n * Extract phone number.\n * @param contacts - Contacts array.\n * @returns Phone number.\n */\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\n if (!contacts) {\n return undefined;\n }\n\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === ContactInformationType.Phone && !contact.IsPrivate);\n\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\n\n if (primaryPhoneContact) {\n return primaryPhoneContact.Locator;\n }\n\n return allPhoneContacts[0].Locator;\n }\n\n return undefined;\n};\n\n/**\n * Render Store Hours Day.\n * @param displayTime - Store Hours Information.\n * @param storeHoursDayPeriodString - The string for store hours day period.\n * @param storeHoursDayString - The string for store hours day period.\n * @returns JSX element with store hours day.\n */\nconst buildStoreHoursDay = (displayTime: IHoursDisplayInfo, storeHoursDayPeriodString: string, storeHoursDayString: string) => {\n return (\n ${displayTime.startDayShort}`)\n .replace(\n '{endDay}',\n `${displayTime.endDayShort}`\n )\n : storeHoursDayString.replace(\n '{startDay}',\n `${displayTime.startDayShort}`\n )\n }\n />\n );\n};\n\n/**\n * Render Store Hours.\n * @param storeHours - Store hours.\n * @param storeHoursList - Store hours list.\n * @param locationOpen - Location open.\n * @param resources - The module resources.\n * @returns JSX element with store hours.\n */\nconst renderStoreHours = (\n storeHours: StoreHours | undefined,\n storeHoursList: IHoursDisplayInfo[] | undefined,\n locationOpen: ILocationHours | undefined,\n resources: IStoreSelectorResources & IStoreSelectorResources\n): JSX.Element | null => {\n // First, use the store hours. This will allow listing day by day hours\n if (storeHours?.RegularStoreHours) {\n return (\n
\n {storeHoursList?.map(displayTime => (\n
\n {buildStoreHoursDay(displayTime, resources.storeHoursDayPeriod, resources.storeHoursDay)}\n
{displayTime.timeRange}
\n
\n ))}\n
\n );\n }\n\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\n const storeOpenFrom: string = locationOpen?.openFrom ? locationOpen.openFrom : '';\n const storeOpenTo: string = locationOpen?.openTo ? locationOpen.openTo : '';\n return (\n
\n {resources.storeHoursDayPeriod.replace('{startDay}', storeOpenFrom).replace('{endDay}', storeOpenTo)}\n
\n );\n};\n\n/**\n * Match delivery options.\n * @param productDeliveryOptions - The list of product delivery options.\n * @param storePickUpOptionList - The list of store pick up options.\n * @returns Matched delivery option.\n */\nconst matchDeliveryOptions = (\n productDeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: DeliveryOption[] | undefined\n): DeliveryOption[] => {\n if (!productDeliveryOptions) {\n return [] as DeliveryOption[];\n }\n return productDeliveryOptions\n .map(productDeliveryOption => storePickUpOptionList?.find(delivery => delivery.Code === productDeliveryOption.Code))\n .filter(productDeliveryOption => productDeliveryOption) as DeliveryOption[];\n};\n\n/**\n * PickUpMethod Resources Interface.\n */\nexport interface IPickUpButtonResources {\n pickupInStoreAriaLabel: string;\n pickupInStoreButtonText: string;\n pickupDeliveryOptionErrorMessage: string;\n}\n\n/**\n * PickUpMethod Resources Interface.\n */\nexport interface IPickUpMethodResources {\n selectStoreText: string;\n pickUpMethodLabel: string;\n pickUpOptionPlaceholder: string;\n pickupOptionDropdownError: string;\n pickupButtonAriaLabel: string;\n}\n\n/**\n * PickUp method dropdown component.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst PickUpMethodDropdownComponent = (props: IPickupComponent & IPickUpMethodResources) => {\n const {\n handlers,\n location,\n pickUpStatesProps,\n selectStoreText,\n pickUpMethodLabel,\n pickUpOptionPlaceholder,\n pickupOptionDropdownError,\n pickupButtonAriaLabel,\n productPickUpOptionList,\n storePickUpOptionList\n } = props;\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const [selectedStorePickUpOption, selectStorePickUpOption] = React.useState('');\n const [currentStorePickUpOption, setCurrentStorePickUpOption] = React.useState(pickUpOptionPlaceholder);\n const [isDropdownOpen, toggleDropdown] = React.useState(false);\n const [isError, setError] = React.useState(false);\n\n /**\n * Method to handle the store pickup option change.\n * @param event - Change Event.\n */\n const onChangeHandler = React.useCallback((event: React.MouseEvent) => {\n event.preventDefault();\n selectStorePickUpOption(event.currentTarget.value);\n setCurrentStorePickUpOption(event.currentTarget.dataset.description ? event.currentTarget.dataset.description : '');\n toggleDropdown(false);\n setError(false);\n }, []);\n\n /**\n * Method to render store location line pick up button.\n * @param filteredDeliveryMode - Filtered Delivery Mode.\n * @returns JSX Element.\n */\n const renderLocationLinePickupButton = (filteredDeliveryMode: DeliveryOption | undefined) => {\n return filteredDeliveryMode !== undefined ? (\n
\n \n {filteredDeliveryMode.Description}\n \n
\n ) : null;\n };\n\n /**\n * Method to handle the store pickup option submit.\n */\n const onClickHandler = React.useCallback(() => {\n if (!StringExtensions.isNullOrEmpty(selectedStorePickUpOption)) {\n handlers.onSelected(location, selectedStorePickUpOption);\n } else if (pickUpStatesProps.state.filteredPickupMode !== undefined) {\n handlers.onSelected(location, pickUpStatesProps.state.filteredPickupMode);\n } else {\n toggleDropdown(false);\n setError(true);\n }\n }, [location, selectedStorePickUpOption, handlers, pickUpStatesProps.state.filteredPickupMode]);\n\n const handleDropdownToggle = React.useCallback(() => {\n toggleDropdown(!isDropdownOpen);\n setError(false);\n }, [isDropdownOpen]);\n\n const filterDeliveryOption = deliveryOptionList.find(\n (delivery: DeliveryOption) => delivery.Code === pickUpStatesProps.state.filteredPickupMode\n );\n\n const pickupInStoreButtonText: string = selectStoreText;\n const filteredDeliveryMode: DeliveryOption | undefined =\n pickUpStatesProps.state.filteredPickupMode !== undefined ? filterDeliveryOption : undefined;\n\n return (\n \n
{pickUpMethodLabel}
\n {pickUpStatesProps.state.filteredPickupMode === undefined ? (\n
\n \n {currentStorePickUpOption}\n \n
    \n {deliveryOptionList.map((delivery: DeliveryOption) => (\n \n \n {delivery.Description}\n \n \n ))}\n
\n
{pickupOptionDropdownError}
\n
\n ) : (\n renderLocationLinePickupButton(filteredDeliveryMode)\n )}\n \n
\n );\n};\n\n/**\n * PickUp button component.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst PickUpButtonComponent = (props: IPickUpButtonComponent & IPickUpButtonResources) => {\n const { pickupInStoreAriaLabel, pickupInStoreButtonText, pickupDeliveryOptionErrorMessage, attributes } = props;\n const [isError, setError] = React.useState(false);\n const onPickupButtonClickHandler = () => () => {\n setError(true);\n };\n\n return (\n <>\n \n {pickupInStoreButtonText}\n \n
\n {pickupDeliveryOptionErrorMessage}\n
\n \n );\n};\n\n/**\n * Method to render store location line item.\n * @param locationLineItem - The Location Line item view props.\n * @param props - The view props.\n * @returns JSX Element.\n */\nconst renderStoreLocationLineItem = (\n locationLineItem: IStoreSelectorLocationLineItemProps,\n props: IStoreSelectorViewProps & IStoreSelectorProps\n) => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n hideStockStatus,\n index,\n isInStock,\n preferredStoreLocationId,\n isPreferredStoreEnabled,\n location,\n resources,\n storeHours,\n storeHoursList,\n stockStatusLabel,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n storeLocatorView,\n telemetryContent\n } = locationLineItem;\n const storeName = location.OrgUnitName;\n const distanceAsString: string | undefined = buildDistanceString(\n location.Distance,\n locationLineItem.preferredDistanceUnit,\n props.resources,\n locationLineItem.isLocationDisabled\n );\n const storeAddress: string | undefined = location.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\n\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\n const stockStatus = stockStatusLabel ? stockStatusLabel : resourceLabel;\n const stockText: string | undefined = hideStockStatus ? undefined : stockStatus;\n\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n\n /**\n * Method to handle the change for preferred store.\n * @returns Void.\n */\n const onSetPreferredStoreClickHandler = () => {\n locationLineItem.handlers.onSetAsPreferredStore(locationLineItem.location.OrgUnitNumber);\n };\n\n /**\n * Method to handle the removal of the preferred store.\n * @returns Void.\n */\n const onRemovePreferredStoreClickHandler = async (event: React.MouseEvent) => {\n event.stopPropagation();\n locationLineItem.handlers.onRemovePreferredStore();\n await props.data.storeSelectorStateManager.result?.setSelectedStoreLocationId(undefined);\n };\n\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\n const preferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\n const removePreferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n
\n
\n {storeLocatorView && {index}}\n {storeName}\n {distanceAsString ? {distanceAsString} : false}\n
\n
\n
\n

{locationLineItem.resources.contactInfoHeader}

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

{locationLineItem.resources.storeHoursHeader}

\n {renderStoreHours(storeHours, storeHoursList, locationLineItem.locationOpen, props.resources)}\n
\n {!storeLocatorView && !hideStockStatus && (\n
\n

{resources.availabilityInfoHeader}

\n {stockText &&

{stockText}

}\n
\n )}\n {isPreferredStoreEnabled &&\n (isPreferredStore ? (\n \n {resources.preferredStoreText}\n \n ) : (\n \n {resources.setAsPreferredStoreText}\n \n ))}\n
\n
\n );\n};\n\n/**\n * Render Store Location.\n * @param location - The location props.\n * @param index - The location index.\n * @param props - The view props.\n * @param selectedLocationReference - The ref.\n * @returns The JSX Element.\n */\nconst renderStoreLocation = (\n location: IStoreSelectorLocationLineItemProps,\n index: number,\n props: IStoreSelectorViewProps & IStoreSelectorProps,\n selectedLocationReference: React.RefObject\n): JSX.Element | undefined => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\n hideStockStatus,\n storeLocatorView,\n isCurrentLocation,\n isInStock,\n productPickUpOptionList,\n resources,\n storePickUpOptionList,\n telemetryContent\n } = location;\n\n const orgUnitLocation = location.location;\n const selectedStoreLocationId = location.selectedStoreLocationId;\n const defaultAriaSetsize = 0;\n const canSelectLocation = hideStockStatus ?? isInStock;\n const storeName = location.location.OrgUnitName;\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\n const pickupInStoreButtonText: string = resources.selectLocation;\n const pickUpOptionDropdownPlaceholderText: string = props.resources.pickupOptionDropdownPlaceholderText;\n\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\n const selectStoreText = props.resources.selectStoreText;\n const pickUpMethodLabel = props.resources.pickUpMethodLabel;\n\n /**\n * Method to handle the pick up in store.\n * @returns Void.\n */\n const onPickupInStoreClickHandler = () => () => {\n location.handlers.onSelected(location.location);\n };\n\n /**\n * Render Store Locations.\n * @param unitLocation - The org unit location.\n * @returns Handler for onClick.\n */\n const onClickHandler = (unitLocation: OrgUnitLocation | undefined) => () => {\n location.onClick(unitLocation?.OrgUnitNumber);\n };\n\n const canSelectPickUpMethod = !ArrayExtensions.hasElements(deliveryOptionList) ? (\n \n ) : (\n \n );\n const pickUpMethodSelection = canSelectLocation ? canSelectPickUpMethod : false;\n\n return (\n \n \n {renderStoreLocationLineItem(location, props)}\n \n {!storeLocatorView &&\n (isCurrentLocation ? (\n

{resources.currentLocation}

\n ) : (\n pickUpMethodSelection\n ))}\n \n );\n};\n\n/**\n * Render Store Locations.\n * @param props - The view props.\n * @param selectedLocationReference - The ref.\n * @returns The JSX Element.\n */\nconst renderStoreLocations = (\n props: IStoreSelectorViewProps & IStoreSelectorProps,\n selectedLocationReference: React.RefObject\n) => {\n return (\n \n {props.locationListProps?.map((store, index) => {\n return renderStoreLocation(store, index, props, selectedLocationReference);\n })}\n \n );\n};\n\n/**\n * Method to map resources with Location Item.\n * @param resources - List of strings for module.\n * @returns Resources for StoreSelector location line.\n */\nconst mapResources = (resources: IStoreSelectorResources): IStoreSelectorLocationLineItemResources => {\n return {\n contactInfoHeader: resources.contactText,\n storeHoursHeader: resources.timeText,\n availabilityInfoHeader: resources.availabilityText,\n\n closedText: resources.storeHoursClosedText,\n outOfStock: resources.outOfStockText,\n inStock: resources.inStockText,\n\n currentLocation: resources.selectedStoreLocationText,\n selectLocation: resources.selectStoreText,\n selectLocationAriaLabelFormat: resources.selectStoreAriaFormatText,\n setAsPreferredStoreText: resources.setAsPreferredStoreText,\n setAsPreferredStoreTextAriaLabel: resources.setAsPreferredStoreTextAriaLabel,\n preferredStoreText: resources.preferredStoreText,\n preferredStoreAriaLabel: resources.preferredStoreAriaLabel,\n\n days: {\n monday: resources.storeHoursMondayText,\n tuesday: resources.storeHoursTuesdayText,\n wednesday: resources.storeHoursWednesdayText,\n thursday: resources.storeHoursThursdayText,\n friday: resources.storeHoursFridayText,\n saturday: resources.storeHoursSaturdayText,\n sunday: resources.storeHoursSundayText,\n mondayFull: resources.storeHoursMondayFullText,\n tuesdayFull: resources.storeHoursTuesdayFullText,\n wednesdayFull: resources.storeHoursWednesdayFullText,\n thursdayFull: resources.storeHoursThursdayFullText,\n fridayFull: resources.storeHoursFridayFullText,\n saturdayFull: resources.storeHoursSaturdayFullText,\n sundayFull: resources.storeHoursSundayFullText\n }\n };\n};\n\n/**\n * Render the selected store.\n * @param selectedLocationProps -- Selected store view props.\n * @param storeSelectorViewProps -- Store selector view props.\n * @returns -- HTML.\n */\nexport const renderSelectedStore = (\n selectedLocationProps: ISelectedStoreViewProps,\n storeSelectorViewProps: IStoreSelectorViewProps & IStoreSelectorProps\n): JSX.Element => {\n const {\n storeDetailsMain,\n storeHeader,\n storeName,\n storeDetailsCloseButton,\n storeDistance,\n storeDetailsAvailabilityContainer,\n productAvailability,\n stockStatus,\n isPreferredStore,\n preferredStoreButton,\n removePreferredStoreButton,\n selectedStore\n } = selectedLocationProps;\n\n const storeAddress: string | undefined = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.Address;\n const phoneNumber: string | undefined = extractPhoneNumber(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.Contacts);\n const storeHoursList = selectedStore?.StoreHours?.RegularStoreHours\n ? buildStoreHours(selectedStore.StoreHours.RegularStoreHours, mapResources(storeSelectorViewProps.resources))\n : [];\n const storeOpenFrom: string | undefined = secondsToTime(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OpenFrom);\n const storeOpenTo: string | undefined = secondsToTime(selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OpenTo);\n const locationOpen = { openFrom: storeOpenFrom, openTo: storeOpenTo };\n const storeNameValue = selectedStore?.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitName;\n const pickupInStoreAriaLabel: string = selectedLocationProps.resources.selectLocationAriaLabelFormat.replace(\n '{StoreName}',\n storeNameValue ?? ''\n );\n const telemetryContent = getTelemetryObject(\n storeSelectorViewProps.context.request.telemetryPageName!,\n storeSelectorViewProps.friendlyName,\n storeSelectorViewProps.telemetry\n );\n const payLoad = getPayloadObject('click', telemetryContent, TelemetryConstant.PickupInStore);\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n const pickupInStoreButtonText: string = selectedLocationProps.resources.selectLocation;\n const selectStoreText = storeSelectorViewProps.resources.selectStoreText;\n const pickUpMethodLabel = storeSelectorViewProps.resources.pickUpMethodLabel;\n const pickUpOptionDropdownPlaceholderText: string = storeSelectorViewProps.resources.pickupOptionDropdownPlaceholderText;\n const orgUnitNumber = selectedStore?.OrgUnitAvailability?.OrgUnitLocation!.OrgUnitNumber;\n const productPickUpOptionList = storeSelectorViewProps.data.storeSelectorStateManager.result?.context?.deliveryOptions?.DeliveryOptions;\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, selectedLocationProps.deliveryOptions);\n const selectedLocation = storeSelectorViewProps.locationListProps?.find(location => location.location.OrgUnitNumber === orgUnitNumber);\n\n /**\n * Method to handle the pick up in store.\n * @returns Void.\n */\n const onPickupInStoreClickHandler = () => () => {\n selectedLocationProps.handlers.onSelected(selectedStore!.OrgUnitAvailability!.OrgUnitLocation!);\n };\n const canSelectPickUpMethod = !ArrayExtensions.hasElements(deliveryOptionList) ? (\n \n ) : (\n selectedLocation && (\n \n )\n );\n\n return (\n \n \n {storeDetailsCloseButton}\n {storeName}\n {storeDistance}\n \n \n
\n

{storeSelectorViewProps.resources.contactText}

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

{storeSelectorViewProps.resources.timeText}

\n {renderStoreHours(selectedStore?.StoreHours, storeHoursList, locationOpen, storeSelectorViewProps.resources)}\n
\n {productAvailability && (\n
\n

{productAvailability}

\n {stockStatus &&

{stockStatus}

}\n
\n )}\n
\n {isPreferredStore ? preferredStoreButton : removePreferredStoreButton}\n {canSelectPickUpMethod}\n
\n );\n};\n\n/**\n * Store Selector View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst StoreSelectorViewComponent: React.FC> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Store-Selector.tsx file\n const {\n BodyContainerProps,\n storeResultContainerProps,\n FooterContainerProps,\n HeaderContainerProps,\n HeaderProps,\n ModuleProps,\n locationsMessage,\n search,\n state,\n spinner,\n maps,\n locationsList,\n noLocationsMessage,\n terms,\n storeDetailsModal,\n selectedLocation,\n bodyWrapperProps,\n data,\n context\n } = props;\n const selectedLocationReference = React.useRef(null);\n const [isDesktopPort, setIsDesktopPort] = React.useState(false);\n\n const isDesktopViewport = React.useCallback(() => {\n const portView = isMobile({ variant: VariantType.Browser, context: context.request });\n const isDesktopPorts = portView === 'md' || portView === 'xl' || portView === 'lg';\n setIsDesktopPort(isDesktopPorts);\n }, [context]);\n\n React.useEffect(() => {\n if (props.locationsList) {\n /**\n * Method to handle scrolling.\n */\n const scrollIntoView = () => {\n const selectedLocationDiv = (selectedLocationReference as React.RefObject).current;\n if (selectedLocationDiv !== null) {\n const offset = selectedLocationDiv.getBoundingClientRect();\n const parent = selectedLocationDiv.parentElement?.parentElement;\n if (parent && offset) {\n const totalHeight = parent.scrollTop + offset.top;\n parent.scrollTop = totalHeight - parent.clientHeight;\n }\n }\n };\n scrollIntoView();\n }\n }, [props.locationsList]);\n\n React.useEffect(() => {\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', isDesktopViewport);\n }\n isDesktopViewport();\n }, [isDesktopViewport]);\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\n\n const isDesktopView = viewport === 'md' || viewport === 'lg' || viewport === 'xl';\n\n if (!isDesktopView || !isDesktopPort) {\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n \n \n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n {maps}\n \n {selectedLocation && renderSelectedStore(selectedLocation, props)}\n \n \n \n \n {terms}\n \n );\n }\n return (\n \n {HeaderProps}\n \n \n {locationsMessage && (\n \n )}\n {search}\n {state.isSearchInProgress ? (\n spinner\n ) : (\n <>{locationsList ? renderStoreLocations(props, selectedLocationReference) : noLocationsMessage}\n )}\n \n \n {maps}\n \n \n {terms}\n \n );\n};\n\nexport default StoreSelectorViewComponent;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["mergeBonusProductInventoryInformation","productInventoryInformation","productId","bonusItemIds","length","filter","p","ProductAvailableQuantity","ProductId","map","bonusItemInv","InventLocationId","forEach","_bonusItemInv$Product","_p$ProductAvailableQu","AvailableQuantity","IsProductAvailable","StockLevelCode","StockLevelLabel","createGetFullAvailableInventoryNearbyInput","inputData","GetFullAvailableInventoryNearbyInput","async","getFullAvailableInventoryNearbyAction","input","ctx","_featureState$find","_promotions$FreeItemP","radius","latitude","longitude","IgnoreLocation","searchArea","Latitude","Longitude","Radius","DistanceUnitValue","featureState","getFeatureState","createGetFeatureStateInput","requestContext","retailMulitplePickupMFeatureState","find","item","Name","IsEnabled","matchingDimensionValues","getDimensionValuesFromQuery","url","requestUrl","getProductPromotionsInput","GetProductPromotionsInput","getProductPromotionsAction","FreeItemProductIds","searchCriteria","createInventoryAvailabilitySearchCriteria","DeliveryMode","pickup","ProductsDataActions","callerContext","then","mapProductInventoryInformation","productWarehouseInformation","ProductWarehouseInventoryAvailabilities","OrgUnitsDataActions","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","DeliveryModeTypeFilter","Pickup","storeMap","Map","stores","store","InventoryLocationId","set","locationDeliveryOptions","orgUnitChannel","ChannelId","channelCollection","undefined","channelIdList","id","push","channelDeliveryOptions","Error","catch","error","trace","message","telemetry","exception","debug","_getLocationPickUpDeliveryModes","availabilityPromiseList","_locationDeliveryOpti","locationDeliveryOption","_channeldeliveryoption","orgUnitLocation","channelDeleiveryOptions","OrgUnitNumber","OrgUnitAvailability","hours","itemAvailabilities","element","_element$ProductAvail","has","availability","OrgUnitLocation","ItemAvailabilities","ProductInventoryInformation","OrgUnitPickUpDeliveryModes","StoreHours","_getAvailabilityWithHours","Promise","all","getFullAvailableInventoryNearbyActionDataAction","createObservableDataAction","action","constructor","recordId","dimensionValues","getCacheKey","this","v","_v$DimensionValue$Val","_v$DimensionValue","DimensionValue","Value","join","getCacheObjectType","dataCacheType","context","distinctProductVariantId","getProductVariantOrMaster","RecordId","productPromotionsInput","getProductPromotionsV2Input","retailAction","Msdyn365","getSelectedProductIdFromActionInput","product","apiSettings","channelId","catalogId","_objectSpread","dv","checkIfHasUnmatchedDimensions","hasUnmatchedDimension","Dimensions","dimension","matchedTargetDimension","targetDimension","DimensionTypeValue","fullDimensions","_product$Dimensions","fullDimensionPromises","shippingInventoryConfiguration","RequestedDimensionTypeValue","MatchingDimensionValues","DefaultWarehouseOnly","FilterByChannelFulfillmentGroup","DeliveryModeTypeFilterValue","CatalogId","MasterProductId","dimensionValuesWithInventory","getFullDimensions","productVariant","ArrayExtensions","hasElements","ProductIds","variantProductId","variantImageUrl","generateProductImageUrl","PrimaryImageUrl","getProductVariant","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","PickUpOptionList","React","props","super","eventsToBeBind","handleDocumentClick","event","htmlElement","target","_pickupListOptionButton","current","contains","_pickupListOptionMenu","setState","expandSiteOptions","_onSelect","preventDefault","deliveryCode","currentTarget","getAttribute","onChange","_renderDeliveryOptions","bind","state","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","render","pickupListOptionMenuText","pickupmodeList","className","onClick","ref","role","delivery","key","Code","tabIndex","Description","stopPropagation","isExpandSiteOptionsState","StorePickUpOptionList","_rendeDeliveryOptions","isExpandOptionsState","isFilterExpanded","selectedPickupMode","_onKeyDown","_storePickupListOptionMenu","_productPickupModeLis","productPickupListOptionMenuText","productPickupModeList","defaultOptionText","selectedPickupModeDesc","onKeyDown","storeSelectorLocationLineItemComponentActions","onLocationSelected","deliveryMode","handlers","onSelected","location","onSetAsPreferredStore","onRemovePreferredStore","buildDistanceString","distance","preferredDistanceUnit","isLocationDisabled","onPickupModeSelectHandler","pickupMode","onSetPreferredStoreClickHandler","removePreferredStoreHandler","onChangeHandler","resolve","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","_delivery","StoreSelectorLocationLineItemComponent","storeUrl","hideStockStatus","isCurrentLocation","isInStock","stockStatusLabel","storeLocatorView","index","preferredStoreLocationId","isPreferredStoreEnabled","telemetryContent","productPickUpOptionList","shouldShowIndex","storeName","OrgUnitName","distanceAsString","Distance","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","resourceLabel","inStock","outOfStock","stockLabel","stockText","canSelectLocation","pickupInStoreButtonText","selectLocation","pickupInStoreAriaLabel","selectLocationAriaLabelFormat","replace","isPreferredStore","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","attributes","getTelemetryAttributes","contentAction","etext","PreferredStore","preferredStoreAttributes","RemovePreferredStore","removePreferredStoreAttributes","deliveryOptionList","isError","setError","href","contactInfoHeader","storeHoursHeader","renderStoreHours","RegularStoreHours","displayTime","JSON","stringify","title","storeOpenFrom","OpenFrom","storeOpenTo","OpenTo","availabilityInfoHeader","currentLocation","Object","assign","pickUpButtonClickHandler","renderPickupModes","filteredPickupMode","preferredStoreAriaLabel","preferredStoreText","setAsPreferredStoreTextAriaLabel","setAsPreferredStoreText","pickupDeliveryOptionErrorMessage","StoreSelectorLocationLines","onClickHandler","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","_isCurrentLocation","alreadySelectedLocation","_isProductInStock","enableOutOfStockCheck","_stockInventoryLabel","availabilityWithHours","i","_availabilityWithHour","_mapResources","contactText","timeText","availabilityText","storeHoursClosedText","outOfStockText","inStockText","selectedStoreLocationText","selectStoreText","selectStoreAriaFormatText","storeHoursMondayText","storeHoursTuesdayText","storeHoursWednesdayText","storeHoursThursdayText","storeHoursFridayText","storeHoursSaturdayText","storeHoursSundayText","storeHoursMondayFullText","storeHoursTuesdayFullText","storeHoursWednesdayFullText","storeHoursThursdayFullText","storeHoursFridayFullText","storeHoursSaturdayFullText","storeHoursSundayFullText","storeCounter","componentDidUpdate","previousProps","selectedStoreLocationId","locations","_stores","_sortStores","reaction","regex","storeUrlFormat","classnames","show","displayList","_store$OrgUnitAvailab","orgUnitNumber","_renderStoreLocation","_store$OrgUnitAvailab2","deliveryOptions","_store$OrgUnitAvailab3","inStockOnly","selected","toString","DeliveryOptions","productPickUpDeliveryOptions","value","_value$OrgUnitAvailab","__decorate","observable","observer","StoreSelectorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","keyCode","KeyCodes","ArrowUp","ArrowDown","activeDescedantValue","_handleKeyPressPrev","Enter","Space","onShowAllStores","_searchTextChanged","inputValue","searchTermChanged","_onSubmit","_this$searchBoxRef$cu","blur","performSearch","_onChangeHandler","filterPickupModeSelected","renderPickupModesList","toggleButtonText","pickupFilterMenuHeading","locatorView","pickupFilterByHeading","hasEnabledPickupFilterToShowStore","shouldDisplayList","toggleButtonClass","onToggleListMapViewState","toggleMapViewAttributes","SearchStore","storeSearchAttributes","ShowAllStore","showAllStoreAttributes","ToggleMapView","searchButtonAriaLabel","searchPlaceholderText","seeAllStoresText","viewListText","viewMapText","inStockOnlyLabel","isMapDisabled","showAllStores","isLocatorView","toggleInStockOnly","name","autoComplete","onSubmit","type","searchInputAriaLabel","placeholder","onKeyUp","color","checked","htmlFor","StoreSelectorEmptyMessage","_ref","emptyLocationsText","StoreSelectorWaiting","StoreSelectorTermsOfService","_ref2","link","onTextChange","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","editProps","StoreSelectorFoundLocationsMessage","_ref3","searchRadius","isSeeAllStore","storeCountMessage","milesShortText","storeCountMessageInKm","storeAllCountMessage","onPickupInStoreClickHandler","_props$selectedStore","selectedStore","_props$selectedStore2","_props$selectedStore3","_props$selectedStore4","storeDetailsModalHandler","closeStoreDetailsModal","SelectedStoreComponent","_selectedStore$OrgUni","_selectedStore$OrgUni2","shouldHideStockStatus","parentClassName","storeDetailsMain","tag","storeHeader","storeDetailsCloseButton","Button","storeDistance","storeDetailsAvailabilityContainer","productAvailability","stockStatus","pickUpDeliveryOptionButton","pickupModes","preferredStoreButton","removePreferredStoreButton","mode","searchRadiusUnit","style","StoreSelector","renderSelectedStore","shouldHideInventory","preferredStore","hasEnabledOutOfStockCheck","data","availabilitiesWithHours","result","storeSelectorStateManager","storeLocations","selectedStoreResources","_selectedStore$OrgUni3","selectedProps","StoreId","_onOrgUnitLocationSelected","_setPreferredStore","_removePreferredStore","_closeStoreDetailModal","handleLinkTextChange","config","termsOfServiceLink","handleHeadingChange","heading","onShowAllStoresHandler","_getAndUpdateStoreLocation","onFilterLocations","_location$OrgUnitPick","some","onFilteredPickupMode","_attachMapAutoSuggest","autoSuggestOptions","actionContext","channel","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_preferredStore$OrgUn","_preferredStore$OrgUn2","_preferredStore$OrgUn3","storeId","cookies","modeEnum","pickupInStore","findStores","setPreferredStoreLocation","isConsentGiven","clearPreferredStore","setSelectedStoreLocationId","_setSelectedStore","searchTerm","isSearchInProgress","isSeeAllStoreValue","geoLocate","trim","_updateLocations","shouldShowAllStores","_navigator","styleEnum","dialog","inline","isDialogOpen","navigator","geolocation","getCurrentPosition","position","coords","PERMISSION_DENIED","timeout","_closeDialog","_storeSelectorStateMa","parentElementRef","focus","closeDialog","_setOrgUnitStoreInformation","moduleId","styleDefault","preferredLocationId","storeLocationList","orgUnitStoreInformation","showMapViewLink","isDialog","setOrgUnitStoreInformation","lookupRadius","calRadius","distanceUnitValue","SearchRadiusUnit","kilometers","modeDefault","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getFullAvailableInventoryNearby","getOrgUnitLocationByArea","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","warning","selectedLocation","hasEnableOutOfStockCheck","_isInStock$OrgUnitAva","inStockStoreOnly","getTelemetryObject","request","telemetryPageName","friendlyName","_this$props$data$stor6","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$context","setTimeout","_this$props$data$stor2","_this$props$data$stor3","_this$props$data$stor4","_this$props$data$stor5","loadMapApi","BingMapsEnabled","lang","locale","market","_this$props$data$stor7","_this$props$data$stor8","_this$props$context$a","_this$props$data$stor9","when","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","isSameContext","shouldComponentUpdate","_storeSelectorStateMa2","_storeSelectorStateMa3","_sortLocation","_storeSelectorStateMa4","_storeSelectorStateMa5","setAsPreferredStore","shouldSetAsPreferredStore","enablePickupFilterToShowStore","hasEnablePickupFilterToShowStore","app","appConfig","slots","maps","mapSlot","isMobileDevice","isMobile","variant","VariantType","Viewport","isInlineView","listMapViewState","canShowLocationView","isMapModuleLoaded","storeSelectorActions","toggleListMapViewState","configHeading","storeLocatorHeaderText","storeSelectorHeaderText","kilometersShortText","isEnableOutofStock","enableStockCheck","sortLocation","locationListProps","_getStoreLocationListProps","hasMapSlot","dialogClassName","viewProps","ModuleProps","Modal","moduleProps","classname","autoFocus","fade","isOpen","onClosed","horizontalPosition","verticalPosition","toggle","isMobileView","HeaderContainerProps","ModalHeader","HeaderProps","text","onEdit","FooterContainerProps","ModalFooter","BodyContainerProps","ModalBody","bodyWrapperProps","storeResultContainerProps","mapContainerProps","storeDetailsModal","locationsMessage","search","s","spinner","locationsList","outOfStockThreshold","noLocationsMessage","terms","headerText","sortLocations","callbacks","getAndUpdateUserLocation","attachMapAutoSuggest","onSuggestionSelected","setPreferredStore","removePreferredStore","setSelectedStore","renderView","isStoreLocatorView","storeList","storeLineProps","_createStoreLocationList","selectedStoreLocation","lineResources","_store$OrgUnitAvailab4","locationOpen","openFrom","openTo","Node","renderDeliveryOptions","Module","renderBody","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","pdp","md","__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","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","StoreSelectorFoundLocationsMessageComponent","RichTextComponent","ContactInformationType","Phone","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","storeHoursDayPeriod","storeHoursDay","productDeliveryOptions","productDeliveryOption","PickUpMethodDropdownComponent","pickUpStatesProps","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","dataset","description","handleDropdownToggle","filterDeliveryOption","filteredDeliveryMode","renderLocationLinePickupButton","PickUpButtonComponent","renderStoreLocationLineItem","locationLineItem","closeDistanceString","distanceString","preferredStoreAttribute","removePreferredStoreAttribute","_props$data$storeSele","renderStoreLocations","selectedLocationReference","_props$data$storeSele2","_props$locationListPr","renderStoreLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","Number","parseInt","selectedLocationProps","storeSelectorViewProps","_selectedStore$StoreH","_selectedStore$OrgUni4","_selectedStore$OrgUni5","_selectedStore$OrgUni6","_storeSelectorViewPro","_storeSelectorViewPro2","storeNameValue","_data$storeSelectorSt2","_data$storeSelectorSt3","isDesktopPort","setIsDesktopPort","isDesktopViewport","portView","Browser","scrollIntoView","_selectedLocationDiv$","offset","getBoundingClientRect","totalHeight","top","viewport","_data$storeSelectorSt","module","exports","ReactDOM"],"sourceRoot":""}