{"version":3,"file":"static/js/a65cf7c00d10802ebaf0.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/../../src/get-selected-variant.ts?f0c0","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/data-structures/dictionary.ts?bab3","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/events/event.ts?15a9","webpack://Msdyn365.Commerce.Online/../../../src/utilities/product-inventory-information.ts?0ec6","webpack://Msdyn365.Commerce.Online/../../../src/utilities/product-inventory-utils.ts?58b5","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/promise-queue/finite-promise-queue.ts?77bf","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/promise-queue/promise-queue.ts?e362","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/random/guid.ts?1947","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/random/index.ts?1f9d","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/regex/email-regex.ts?6a6a","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/regex/password-regex.ts?456d","webpack://Msdyn365.Commerce.Online/../../../../src/utilities/regex/phone-regex.ts?9ada","webpack://Msdyn365.Commerce.Online/../../../src/utilities/validate-cartlines-inventory.ts?8b82"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport {\n BypassCache,\n ProductDimension,\n ProductDimensionAvailabilitySearchCriteria,\n ProductsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ArrayExtensions } from './utilities';\nimport { createInventoryAvailabilitySearchCriteria } from './utilities/product-inventory-utils';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\nimport { generateProductImageUrl, getDimensionValuesFromQuery, getSelectedProductIdFromActionInput } from './utilities/utils';\n\n/**\n * Stores data about the selected product.\n */\nexport interface ISelectedProduct extends SimpleProduct {\n productVariant?: SimpleProduct;\n}\n\n/**\n * Get selected variant action input class.\n */\nexport class SelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public matchingDimensionValues?: ProductDimension[];\n\n public bypassCache?: BypassCache;\n\n public catalogId?: number;\n\n public constructor(\n productId: number,\n channelId: number,\n matchingDimensionValues?: ProductDimension[],\n bypassCache?: BypassCache,\n requestContext?: IRequestContext\n ) {\n this.productId = productId;\n this.channelId = channelId;\n this.matchingDimensionValues = matchingDimensionValues;\n this.bypassCache = bypassCache;\n\n if (requestContext) {\n this.catalogId = getCatalogId(requestContext);\n }\n }\n\n /**\n * Cache key.\n * @returns String.\n */\n public getCacheKey: () => string = () => 'SelectedVariant';\n\n /**\n * Cache object type.\n * @returns String.\n */\n public getCacheObjectType: () => string = () => 'SimpleProduct';\n\n /**\n * Cache type.\n * @returns String.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the getSelectedVariant data action.\n * @param inputData - The input data passed to the createInput method.\n * @returns The input for the ata action getSelectedVariantNewAction.\n */\nconst createInput = (inputData: ICreateActionContext>): SelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new SelectedVariantInput(\n +productId,\n +inputData.requestContext.apiSettings.channelId,\n undefined,\n undefined,\n inputData.requestContext\n );\n }\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\n};\n\n/**\n * Checks if given product has any unmatched dimensions.\n * Modifies product entity to use matched dimension values.\n * @param product - The product to analyze and modify.\n * @param matchingDimensionValues - Matched dimensions.\n * @returns True if has any unmatched dimension, false if all dimensions are specified.\n */\nconst checkIfHasUnmatchedDimensions = (product: SimpleProduct, matchingDimensionValues: ProductDimension[]): boolean => {\n let hasUnmatchedDimension: boolean = false;\n if (product.Dimensions) {\n product.Dimensions = product.Dimensions.map(dimension => {\n return { ...dimension };\n });\n for (const dimension of product.Dimensions) {\n const matchedTargetDimension = matchingDimensionValues.find(\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\n );\n\n if (matchedTargetDimension) {\n dimension.DimensionValue = matchedTargetDimension.DimensionValue;\n } else {\n hasUnmatchedDimension = true;\n }\n }\n }\n return hasUnmatchedDimension;\n};\n\n/**\n * Retrieves product dimensions with availabilities.\n * @param product - Product for which the dimensions need to be retrieved.\n * @param matchingDimensionValues - Selected dimensions - filter criteria for the dimensions API.\n * @param context - Action context.\n * @param catalogId - Catalog id.\n * @returns Array of dimensions.\n */\nconst getFullDimensions = async (\n product: SimpleProduct,\n matchingDimensionValues: ProductDimension[],\n context: IActionContext,\n catalogId?: number\n) => {\n let fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = [];\n const fullDimensionPromises = (product.Dimensions ?? []).map(dimension => {\n const shippingInventoryConfiguration = createInventoryAvailabilitySearchCriteria(context, [], true, undefined, undefined);\n const searchCriteria: ProductDimensionAvailabilitySearchCriteria = {\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\n MatchingDimensionValues: matchingDimensionValues,\n DefaultWarehouseOnly: shippingInventoryConfiguration.DefaultWarehouseOnly,\n FilterByChannelFulfillmentGroup: shippingInventoryConfiguration.FilterByChannelFulfillmentGroup,\n DeliveryModeTypeFilterValue: shippingInventoryConfiguration.DeliveryModeTypeFilterValue,\n CatalogId: catalogId\n };\n const dimensionValuesPromise = ProductsDataActions.getDimensionValuesWithEstimatedAvailabilitiesAsync(\n { callerContext: context, queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context) },\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n searchCriteria\n );\n\n return dimensionValuesPromise.then(dimensionValues => {\n const fullDimension: IProductDimensionsWithAvailabilitiesFull = {\n ...dimension,\n dimensionValuesWithInventory: dimensionValues\n };\n return fullDimension;\n });\n });\n fullDimensions = await Promise.all(fullDimensionPromises);\n return fullDimensions;\n};\n\n/**\n * Retrieves product variant for the given input or undefined if not found.\n * @param input - Action input.\n * @param context - Action context.\n * @param fullDimensions - Product dimensions with availabilities.\n * @returns A product variant that is available or undefined.\n */\nconst getProductVariant = async (\n input: SelectedVariantInput,\n context: IActionContext,\n fullDimensions: IProductDimensionsWithAvailabilitiesFull[]\n) => {\n let productVariant: SimpleProduct | undefined;\n if (\n ArrayExtensions.hasElements(fullDimensions) &&\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory) &&\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory[0].ProductIds)\n ) {\n const variantProductId = fullDimensions[0].dimensionValuesWithInventory[0].ProductIds[0];\n const result = await ProductsDataActions.getByIdsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context),\n bypassCache: input.bypassCache\n },\n input.channelId,\n [variantProductId],\n null,\n input.catalogId ?? 0\n );\n productVariant = result[0];\n productVariant = { ...productVariant };\n const variantImageUrl = generateProductImageUrl(productVariant, context.requestContext.apiSettings);\n\n if (variantImageUrl) {\n productVariant.PrimaryImageUrl = variantImageUrl;\n }\n }\n\n return productVariant;\n};\n\n/**\n * Action method for the getSelectedVariant data action.\n * @param input - The action input class.\n * @param context - The action context.\n * @returns Simple product.\n */\nasync function getSelectedVariantAction(input: SelectedVariantInput, context: IActionContext): Promise {\n const matchingDimensionValues = input.matchingDimensionValues ?? getDimensionValuesFromQuery(context.requestContext.url.requestUrl);\n\n const result = await ProductsDataActions.getByIdsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context),\n bypassCache: input.bypassCache\n },\n input.channelId,\n [input.productId],\n null,\n input.catalogId ?? 0\n );\n let product = result[0];\n\n // Need to dereference this before editing it. Otherwise we might not\n // properly get the mobx events because if things aren't properly observable\n // they won't fire when you set them, and then if you don't deref the value in\n // the cache will match the value when you try to save it, so it won't detect any\n // changes there either\n product = { ...product };\n const hasUnmatchedDimension = checkIfHasUnmatchedDimensions(product, matchingDimensionValues);\n\n const newImageUrl = generateProductImageUrl(product, context.requestContext.apiSettings);\n\n if (newImageUrl) {\n product.PrimaryImageUrl = newImageUrl;\n }\n\n const fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = await getFullDimensions(\n product,\n matchingDimensionValues,\n context,\n input.catalogId\n );\n\n // Retrieve product variants only if matching dimensions are provided.\n const productVariant: SimpleProduct | undefined = ArrayExtensions.hasElements(matchingDimensionValues)\n ? await getProductVariant(input, context, fullDimensions)\n : undefined;\n\n // Update dimension value back to the one that comes from API since the URL query might have a different format for the dimension values.\n if (productVariant?.Dimensions && product.Dimensions) {\n for (const dimension of product.Dimensions) {\n const matchedTargetDimensionFromApi = productVariant.Dimensions.find(\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\n );\n const matchedTargetDimensionFromSearch = matchingDimensionValues.find(\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\n );\n\n if (matchedTargetDimensionFromSearch && matchedTargetDimensionFromApi) {\n dimension.DimensionValue = matchedTargetDimensionFromApi.DimensionValue;\n }\n }\n }\n\n if (!hasUnmatchedDimension && ArrayExtensions.hasElements(matchingDimensionValues) && productVariant) {\n return productVariant;\n }\n\n const selectedProduct: ISelectedProduct = product;\n selectedProduct.productVariant = productVariant;\n return selectedProduct;\n}\n\n/**\n * The complete getSelectedVariant data action.\n */\nexport const getSelectedVariantActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-selected-variant',\n action: getSelectedVariantAction as IAction,\n input: createInput\n});\n\nexport default getSelectedVariantActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Represents a pair of two fields: key and value.\n * Used to initialize a dictionary.\n */\nexport interface IKeyValuePair {\n readonly key: Key;\n readonly value: Value;\n}\n\n/**\n * Represents a dictionary in memory storage.\n */\nexport class Dictionary {\n /**\n * Values stored in the dictionary.\n */\n private _values: { [eventName: string]: Value };\n\n /**\n * The number of values stored in the dictionary (does not include keys).\n */\n private _length: number;\n\n /**\n * Initializes an empty dictionary or a dictionary with the given key value pairs.\n * @param {IKeyValuePair[]} entries The key value pairs which should be stored in the dictionary initially.\n */\n public constructor(...entries: IKeyValuePair[]) {\n this._values = {};\n this._length = 0;\n entries.forEach(keyValuePair => {\n this.setValue(keyValuePair.key, keyValuePair.value);\n });\n }\n\n /**\n * Removes value from the dictionary for the given key.\n * @param {Key} key The key to retrieve the value.\n * @remark Does nothing in case the key is not present in the dictionary.\n */\n public removeValue(key: Key): void {\n if (!this.hasValue(key)) {\n return;\n }\n\n --this._length;\n delete this._values[key];\n }\n\n /**\n * Retrieves a value from the dictionary or returns undefined in case it's not found.\n * @param {Key} key The key to retrieve the value.\n * @returns {Value | undefined} The value stored in the dictionary or undefined in case it's not found.\n */\n public getValue(key: Key): Value | undefined {\n return this._values[key];\n }\n\n /**\n * Retrieves a value from the dictionary.\n * In case it's not found, adds the default value to the dictionary and returns it.\n * @param {Key} key The key to retrieve the value.\n * @param defaultValue\n * @returns {Value} The value stored in the dictionary or the default value in case it's not found.\n */\n public getValueWithDefaultValue(key: Key, defaultValue: Value): Value {\n if (!this.hasValue(key)) {\n this.setValue(key, defaultValue);\n }\n return this.getValue(key)!;\n }\n\n /**\n * Sets the value to the dictionary for the given key.\n * @remarks In case undefined was passed, removes the value from the dictionary instead.\n * @param {Key} key The key under which the value should be stored.\n * @param {Value} value The value which should be stored in the dictionary.\n */\n public setValue(key: Key, value: Value): void {\n if (value === undefined) {\n this.removeValue(key);\n return;\n }\n\n if (!this.hasValue(key)) {\n ++this._length;\n }\n\n this._values[key] = value;\n }\n\n /**\n * Checks if the dictionary stores some value (except undefined) for the given key.\n * @param {Key} key The key to retrieve the value.\n * @returns {boolean} True in case the value is present, false otherwise or if it's undefined.\n */\n public hasValue(key: Key): boolean {\n return this._values[key] !== undefined;\n }\n\n /**\n * Checks if the dictionary is empty.\n * @returns {boolean} True if the dictionary is empty, false otherwise.\n */\n public isEmpty(): boolean {\n return this.length === 0;\n }\n\n /**\n * Retrieves the number of values stored in the dictionary.\n * @remark Use `isEmpty` to check if the dictionary has any elements.\n * @returns {number} The number of values stored.\n */\n public get length(): number {\n return this._length;\n }\n\n /**\n * Clears the dictionary by removing all elements from the storage.\n */\n public clear(): void {\n this._values = {};\n this._length = 0;\n }\n\n /**\n * Returns all values stored in the dictionary.\n * @returns {Value[]} List of values.\n */\n public getValues(): Value[] {\n return this.getKeys().map(key => this._values[key]);\n }\n\n /**\n * Returns all keys stored in the dictionary.\n * @returns {string[]} List of keys.\n */\n public getKeys(): Key[] {\n return Object.keys(this._values);\n }\n\n /**\n * Returns all key value pairs stored in the dictionary.\n * @returns {IKeyValuePair[]} List of key value pairs.\n */\n public getKeyValuePairs(): IKeyValuePair[] {\n return this.getKeys().map(key => {\n return { key, value: this._values[key] };\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 { IEventSubscriber } from './event-subscriber';\n\n/**\n * Represents a simple event with subscribers. Notifies the subscribers once the event is triggered.\n */\nexport class Event {\n /**\n * The list of subscribers.\n */\n private _subscribers: IEventSubscriber[];\n\n /**\n * Initializes the event with a empty subscribers list.\n */\n public constructor() {\n this._subscribers = [];\n }\n\n /**\n * Subscribes given instance to the event.\n * @param {IEventSubscriber} instance The info about the subscriber.\n */\n public subscribe(instance: IEventSubscriber): void {\n this._subscribers.push(instance);\n }\n\n /**\n * Removes the subscriber from the list of subscribers watching the event.\n * @param {string} instanceId The unique identifier of the subscriber which was earlier passed in `subscribe` method in `IEventSubscriber`.\n */\n public unsubscribe(instanceId: string): void {\n this._subscribers = this._subscribers.filter(element => element.instanceId !== instanceId);\n }\n\n /**\n * Clears the list of subscriber removing all instances watching the event.\n */\n public unsubscribeAll(): void {\n this._subscribers = [];\n }\n\n /**\n * Triggers the event.\n * Notifies the subscribers that the event is triggered by calling `handler` method.\n */\n public trigger(): void {\n this._subscribers.forEach(subscriber => {\n subscriber.handler();\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 {\n ProductAvailableQuantity,\n ProductDimensionValueInventoryAvailability,\n ProductInventoryAvailability\n} from '@msdyn365-commerce/retail-proxy';\n\n/**\n * This setting defines the delivery modes supported.\n */\nexport enum DeliveryMode {\n allWareHouses = 0,\n shipping = 1,\n pickup = 2\n}\n\n/**\n * This setting defines the inventory levels supported.\n */\nexport enum InventoryLevels {\n physicalAvailable = 'physicalAvailable',\n totalAvailable = 'totalAvailable',\n threshold = 'inventoryThreshold'\n}\n\n/**\n * Product inventory information class.\n */\nexport interface IProductInventoryInformation {\n ProductAvailableQuantity: ProductAvailableQuantity;\n StockLevelCode?: string;\n StockLevelLabel?: string;\n IsProductAvailable: boolean;\n InventLocationId?: string;\n deliveryType?: DeliveryMode;\n}\n\n/**\n * This setting defines the inventory level values return by the API.\n */\nexport enum InventoryLevelValues {\n outOfStock = 'OOS',\n available = 'AVAIL'\n}\n\n/**\n * Retrieves inventory level code from the dimension based on the app config setting.\n * @param dimensionValuesWithInventory - The dimension info.\n * @param inventoryLevel - App config setting for inventory level.\n * @returns Inventory level code value.\n */\nexport const getInventoryLevelCodeFromDimensionValue = (\n dimensionValuesWithInventory: ProductDimensionValueInventoryAvailability,\n inventoryLevel?: InventoryLevels | undefined\n): InventoryLevelValues | undefined => {\n if (inventoryLevel === InventoryLevels.totalAvailable) {\n return dimensionValuesWithInventory.TotalAvailableInventoryLevelCode as InventoryLevelValues | undefined;\n }\n if (inventoryLevel === InventoryLevels.physicalAvailable) {\n return dimensionValuesWithInventory.PhysicalAvailableInventoryLevelCode as InventoryLevelValues | undefined;\n }\n return undefined;\n};\n\n/**\n * Retrieves inventory level code from the product availability based on the app config setting.\n * @param productAvailability - The product availability info.\n * @param inventoryLevel - App config setting for inventory level.\n * @returns Inventory level code value.\n */\nexport const getInventoryLevelCodeFromProductAvailability = (\n productAvailability: ProductInventoryAvailability,\n inventoryLevel?: InventoryLevels | undefined\n): InventoryLevelValues | undefined => {\n if (inventoryLevel === InventoryLevels.totalAvailable) {\n return productAvailability.TotalAvailableInventoryLevelCode as InventoryLevelValues | undefined;\n }\n if (inventoryLevel === InventoryLevels.physicalAvailable) {\n return productAvailability.PhysicalAvailableInventoryLevelCode as InventoryLevelValues | undefined;\n }\n return undefined;\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 {\n InventoryAvailabilitySearchCriteria,\n ProductAvailableQuantity,\n ProductWarehouseInventoryAvailability,\n ProductWarehouseInventoryInformation,\n SearchArea\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { DeliveryMode, InventoryLevels, InventoryLevelValues, IProductInventoryInformation } from './product-inventory-information';\n\n/**\n * The function defines whether the inventory label should be displayed or not.\n * @param context - The action context.\n * @param inventoryCode - The inventory code.\n * @returns Boolean.\n */\nexport function displayLabelEnabled(context: IActionContext, inventoryCode?: string): boolean {\n if (!inventoryCode) {\n return false;\n }\n\n // eslint-disable-next-line default-case\n switch (context.requestContext.app.config.inventoryRanges) {\n case 'lowAndOutofStock':\n if (inventoryCode !== InventoryLevelValues.available) {\n return true;\n }\n break;\n case 'outOfStock':\n if (inventoryCode === InventoryLevelValues.outOfStock) {\n return true;\n }\n break;\n case 'all':\n return true;\n }\n return false;\n}\n\n/**\n * The function that maps a ProductWareHouse object into a ProductAvailabilityQuantity.\n * @param context - The action context.\n * @param productsWarehouseInventory - The product warehouse inventory information.\n * @returns IProductInventoryInformation[].\n */\nexport function mapProductInventoryInformation(\n context: IActionContext,\n productsWarehouseInventory?: ProductWarehouseInventoryAvailability[]\n): IProductInventoryInformation[] {\n const productInventoryInformation: IProductInventoryInformation[] = [];\n\n if (context.requestContext.app.config.enableStockCheck === undefined || context.requestContext.app.config.enableStockCheck === false) {\n return productInventoryInformation;\n }\n\n if (productsWarehouseInventory && productsWarehouseInventory.length > 0) {\n for (const product of productsWarehouseInventory) {\n switch (context.requestContext.app.config.inventoryLevel) {\n case InventoryLevels.physicalAvailable:\n // Inventory level is enabled with Physical inventory\n const physicalProductMap = mapInventoryWithPhysicalBufferEnabled(context, product);\n if (physicalProductMap) {\n productInventoryInformation.push(physicalProductMap);\n }\n break;\n case InventoryLevels.totalAvailable:\n // Inventory level is enabled with Total available inventory\n const totalAvailableProductMap = mapInventoryWithTotalAvailableBufferEnabled(context, product);\n if (totalAvailableProductMap) {\n productInventoryInformation.push(totalAvailableProductMap);\n }\n break;\n default:\n // When inventory level is inventoryThreshold or not defined\n const productMap = mapInventoryWithThresholdEnabled(context, product);\n if (productMap) {\n productInventoryInformation.push(productMap);\n }\n break;\n }\n }\n }\n\n return productInventoryInformation;\n}\n\n/**\n * The function that maps inventory for when threshold is selected.\n * @param context - The action context.\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\n * @returns IProductInventoryInformation.\n */\nexport function mapInventoryWithThresholdEnabled(\n context: IActionContext,\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability\n): IProductInventoryInformation | null {\n if (productWarehouseInventoryAvailability.ProductId && productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\n const productQty = productWarehouseInventoryAvailability.TotalAvailable - context.requestContext.app.config.outOfStockThreshold;\n const productAvailableQuantity: ProductAvailableQuantity = {\n ProductId: productWarehouseInventoryAvailability.ProductId,\n AvailableQuantity: productQty > 0 ? productQty : 0\n };\n\n return {\n ProductAvailableQuantity: productAvailableQuantity,\n IsProductAvailable: !!(productAvailableQuantity.AvailableQuantity && productAvailableQuantity.AvailableQuantity > 0),\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\n };\n }\n\n return null;\n}\n\n/**\n * The function that maps inventory for when physical available is selected.\n * @param context - The action context.\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\n * @returns IProductInventoryInformation.\n */\nexport function mapInventoryWithPhysicalBufferEnabled(\n context: IActionContext,\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability\n): IProductInventoryInformation | null {\n const shouldRenderLabel = displayLabelEnabled(context, productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode);\n\n if (productWarehouseInventoryAvailability.ProductId && productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\n // As per the new buffer logic from RS,\n // if code is out of stock then we set the available quantity to 0 regardless of the actual value from API\n let productQuantity: number | undefined = 0;\n if (productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode !== InventoryLevelValues.outOfStock) {\n productQuantity =\n productWarehouseInventoryAvailability.MaximumPurchasablePhysicalAvailableQuantity ??\n productWarehouseInventoryAvailability.PhysicalAvailable;\n }\n\n const productAvailableQuantity: ProductAvailableQuantity = {\n ProductId: productWarehouseInventoryAvailability.ProductId,\n AvailableQuantity: productQuantity\n };\n return {\n ProductAvailableQuantity: productAvailableQuantity,\n StockLevelCode: shouldRenderLabel ? productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode : undefined,\n StockLevelLabel: shouldRenderLabel ? productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelLabel : undefined,\n IsProductAvailable: productAvailableQuantity.AvailableQuantity !== undefined && productAvailableQuantity.AvailableQuantity > 0,\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\n };\n }\n\n return null;\n}\n\n/**\n * The function that maps inventory for when total available is selected.\n * @param context - The action context.\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\n * @returns IProductInventoryInformation.\n */\nexport function mapInventoryWithTotalAvailableBufferEnabled(\n context: IActionContext,\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability\n): IProductInventoryInformation | null {\n const shouldRenderLabel = displayLabelEnabled(context, productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode);\n if (productWarehouseInventoryAvailability.ProductId && productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\n // As per the new buffer logic from RS,\n // if code is out of stock then we set the available quantity to 0 regardless of the actual value from API\n let productQuantity: number | undefined = 0;\n if (productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode !== InventoryLevelValues.outOfStock) {\n productQuantity =\n productWarehouseInventoryAvailability.MaximumPurchasableTotalAvailableQuantity ??\n productWarehouseInventoryAvailability.TotalAvailable;\n }\n\n const productAvailableQuantity: ProductAvailableQuantity = {\n ProductId: productWarehouseInventoryAvailability.ProductId,\n AvailableQuantity: productQuantity\n };\n return {\n ProductAvailableQuantity: productAvailableQuantity,\n StockLevelCode: shouldRenderLabel ? productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode : undefined,\n StockLevelLabel: shouldRenderLabel ? productWarehouseInventoryAvailability.TotalAvailableInventoryLevelLabel : undefined,\n // eslint-disable-next-line eqeqeq\n IsProductAvailable: productAvailableQuantity.AvailableQuantity != undefined && productAvailableQuantity.AvailableQuantity > 0,\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\n };\n }\n\n return null;\n}\n\n/**\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\n * @param context - The action context.\n * @returns Boolean.\n */\nexport function isAggregatedInventory(context: IActionContext): boolean {\n // If warehouse aggregated is true then query inventory from multiple warehouses\n // else query from single warehouse\n return (\n (context.requestContext.app.config.inventoryLevel === InventoryLevels.totalAvailable ||\n context.requestContext.app.config.inventoryLevel === InventoryLevels.physicalAvailable) &&\n context.requestContext.app.config.warehouseAggregation === 'multiple'\n );\n}\n\n/**\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\n * @param context - The action context.\n * @param productWarehouseInventoryInformation - The product ware house inventory information.\n * @returns ProductWarehouseInventoryInformation.\n */\nexport function mapAggregatedProductInventoryInformation(\n context: IActionContext,\n productWarehouseInventoryInformation: ProductWarehouseInventoryInformation\n): IProductInventoryInformation[] {\n if (isAggregatedInventory(context)) {\n const productInventoryMapping:\n | ProductWarehouseInventoryAvailability[]\n | undefined = productWarehouseInventoryInformation.AggregatedProductInventoryAvailabilities?.map(product => {\n return {\n DataAreaId: product.DataAreaId,\n MaximumPurchasablePhysicalAvailableQuantity:\n product.MaximumPurchasablePhysicalAvailableQuantity ?? product.PhysicalAvailableQuantity,\n MaximumPurchasableTotalAvailableQuantity:\n product.MaximumPurchasableTotalAvailableQuantity ?? product.TotalAvailableQuantity,\n ProductId: product.ProductId,\n PhysicalAvailable: product.PhysicalAvailableQuantity,\n PhysicalAvailableInventoryLevelCode: product.PhysicalAvailableInventoryLevelCode,\n PhysicalAvailableInventoryLevelLabel: product.PhysicalAvailableInventoryLevelLabel,\n TotalAvailable: product.TotalAvailableQuantity,\n TotalAvailableInventoryLevelCode: product.TotalAvailableInventoryLevelCode,\n TotalAvailableInventoryLevelLabel: product.TotalAvailableInventoryLevelLabel\n };\n });\n return mapProductInventoryInformation(context, productInventoryMapping);\n }\n\n return mapProductInventoryInformation(context, productWarehouseInventoryInformation.ProductWarehouseInventoryAvailabilities);\n}\n\n/**\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\n * @param context - The action context.\n * @param productIds - The product id collection.\n * @param isDefaultWareHouse - Flag to define whether inventory is from default warehouse or not.\n * @param isFilterByChannelFulfillmentGroup - Filter by fulfillment group.\n * @param searchArea - The search area.\n * @param defaultDeliveryMode - The delivery mode.\n * @returns InventoryAvailabilitySearchCriteria.\n */\nexport function createInventoryAvailabilitySearchCriteria(\n context: IActionContext,\n productIds: number[],\n isDefaultWareHouse?: boolean,\n isFilterByChannelFulfillmentGroup?: boolean,\n searchArea?: SearchArea,\n defaultDeliveryMode?: DeliveryMode\n): InventoryAvailabilitySearchCriteria {\n const salesUnitType = 2;\n const deliveryMode = defaultDeliveryMode ? defaultDeliveryMode : DeliveryMode.shipping;\n\n const inventoryAvailabilitySearchCriteria: InventoryAvailabilitySearchCriteria = {\n ProductIds: productIds,\n QuantityUnitTypeValue: salesUnitType,\n SearchArea: searchArea\n };\n\n if (isAggregatedInventory(context)) {\n inventoryAvailabilitySearchCriteria.FilterByChannelFulfillmentGroup = true;\n inventoryAvailabilitySearchCriteria.DeliveryModeTypeFilterValue = deliveryMode;\n } else {\n inventoryAvailabilitySearchCriteria.DefaultWarehouseOnly = isDefaultWareHouse;\n inventoryAvailabilitySearchCriteria.FilterByChannelFulfillmentGroup = isFilterByChannelFulfillmentGroup;\n }\n\n return inventoryAvailabilitySearchCriteria;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PromiseBodyWrapper } from './base-promise-queue';\nimport { PromiseQueue } from './promise-queue';\n\nexport enum FinitePromiseQueueError {\n InvalidMaxQueueLengthPassed = 'Invalid maxQueueLength value passed to FinitePromiseQueue. maxQueueLength should be more or equal to 2.',\n ProcessWasDiscardedFromTheQueue = 'The process was discarded from FinitePromiseQueue.'\n}\n\n/**\n * Represents a FIFO queue over promises with a limited number of elements waiting for execution.\n * @remark\n * In case the queue reaches the limit,\n * before adding a new element the queue discards the oldest added element which is waiting to be processed.\n * Does not discard elements which are in progress under execution.\n * The discarded element will not be processed and executed.\n * @author Bohdan Yevchenko \n */\nexport class FinitePromiseQueue extends PromiseQueue {\n /**\n * @see constructor\n */\n private readonly _maxQueueLength: number;\n\n /**\n * Initializes the queue with the given limit.\n * @param {number} maxQueueLength\n * Defines the limit of maximum number of elements in the queue.\n * @remarks Includes both the number of elements waiting for the execution\n * and the element processed by the queue at the moment (in case there is some).\n * Value can't be less than 2.\n */\n public constructor(maxQueueLength: number) {\n if (maxQueueLength < 2) {\n throw new Error(FinitePromiseQueueError.InvalidMaxQueueLengthPassed);\n }\n\n super();\n this._maxQueueLength = maxQueueLength;\n }\n\n /**\n * Adds promise to the queue and automatically starts the queue execution.\n * @remarks In case the queue has reached the limit, also discards the oldest added element.\n * @param {PromiseBodyWrapper} promiseBody\n * The body of a function which contains a call to the promise which has to be executed in the queue.\n */\n public async enqueue(promiseBody: PromiseBodyWrapper): Promise {\n let totalElementsCount = this._queue.length;\n\n // If queue hasn't finished processing an element,\n // consider this element as pending.\n if (this._isBusy) {\n ++totalElementsCount;\n }\n\n // Discards the oldest added element from the queue to meet the given limitations.\n // The very first element in the queue is considered as oldest added.\n // Can't discard the element which is under execution as the promise can't be cancelled.\n if (totalElementsCount === this._maxQueueLength) {\n const element = this._queue.shift();\n if (element) {\n element.reject(FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue);\n }\n }\n\n return super.enqueue(promiseBody);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IPromiseQueue, PromiseBodyWrapper, PromiseRejectType, PromiseResolveType } from './base-promise-queue';\n\n/**\n * Represents an inner node which is stored in a promise queue.\n * Used internally in the PromiseQueue implementation.\n * @author Bohdan Yevchenko \n */\nclass PromiseQueueElement {\n /**\n * The body of a wrapper-function which contains a call to the promise which has to be executed in the queue.\n */\n public readonly body: PromiseBodyWrapper;\n\n /**\n * Method that resolves the promise after the promise from the body is resolved.\n */\n public readonly resolve: PromiseResolveType;\n\n /**\n * Method that rejects the promise after the promise from the body is rejected.\n */\n public readonly reject: PromiseRejectType;\n\n /**\n * Initializes queue element with the given data.\n * @param {PromiseBodyWrapper} body The body of a wrapper-function which contains a call to the promise which has to be executed in the queue.\n * @param {PromiseResolveType} resolve Method that resolves the promise after the promise from the body is resolved.\n * @param {PromiseRejectType} reject Method that rejects the promise after the promise from the body is rejected.\n */\n public constructor(\n body: PromiseBodyWrapper,\n resolve: PromiseResolveType,\n reject: PromiseRejectType\n ) {\n this.body = body;\n this.resolve = resolve;\n this.reject = reject;\n }\n}\n\n/**\n * Represents a FIFO basic queue over promises.\n * @author Bohdan Yevchenko \n */\nexport class PromiseQueue implements IPromiseQueue {\n /**\n * A list of promises waiting for execution.\n */\n protected readonly _queue: PromiseQueueElement[];\n\n /**\n * Defines whether the queue is processing some element.\n */\n protected _isBusy: boolean;\n\n /**\n * Defines whether the queue can start processing new element.\n */\n private get _canProcess(): boolean {\n return !this._isBusy && this._queue.length > 0;\n }\n\n /**\n * Creates a new instance of PromiseQueue.\n */\n public constructor() {\n this._queue = [];\n this._isBusy = false;\n }\n\n /**\n * Adds promise to the queue and automatically starts the queue execution.\n * @param {PromiseBodyWrapper} promiseBody\n * The body of a function which contains a call to the promise which has to be executed in the queue.\n */\n public async enqueue(promiseBody: PromiseBodyWrapper): Promise {\n return new Promise(async (resolve, reject) => {\n this._queue.push(new PromiseQueueElement(promiseBody, resolve, reject));\n await this._dequeue();\n });\n }\n\n /**\n * If the queue is free, starts processing the first element in the queue and waits until all the elements are processed.\n * Otherwise (if busy or has no elements to process), does nothing.\n */\n private async _dequeue(): Promise {\n // Skip if queue is not able to process any elements.\n if (!this._canProcess) {\n return;\n }\n\n // Lock queue to prevent parallel execution.\n this._isBusy = true;\n\n // Retrieve an element from the waiting queue and start processing.\n const element: PromiseQueueElement = this._queue.shift()!;\n await this._processElement(element);\n\n // Continue executing the subsequent queue elements.\n await this._processNext();\n }\n\n /**\n * Executes the given wrapper over the promise and calls initial resolve/reject correspondingly.\n * @param {PromiseQueueElement} element The queue element which should be processed now.\n */\n private async _processElement(element: PromiseQueueElement): Promise {\n try {\n await element\n .body()\n .then(element.resolve)\n .catch(element.reject);\n } catch (error) {\n element.reject(error);\n }\n }\n\n /**\n * Unlocks the queue and tries to process the next element in the queue.\n */\n private async _processNext(): Promise {\n this._isBusy = false;\n await this._dequeue();\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { v4 as uuidv4 } from 'uuid';\n\n/**\n * Namespace which provides functionality for GUID.\n */\nexport namespace Guid {\n export function generateGuid(): string {\n return uuidv4();\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Guid as _guid } from './guid';\n\nexport namespace Random {\n export import Guid = _guid;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Regular expressions to validate emails.\n */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class EmailRegex {\n /**\n * Represents a HTML5 Validation Regex.\n *\n * A valid email address is a string that matches the email production of the following ABNF, the character set for which is Unicode.\n * This ABNF implements the extensions described in RFC 1123.\n *\n * For more info: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address.\n */\n public static readonly html5EmailRegex = /^[a-zA-Z0-9.!#$%&'*+=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z])?)+$/;\n\n /**\n * Returns a default regex which should be used for most email validation cases.\n *\n * As of now, the default regex is HTML5 email regex standard.\n * @see EmailRegex.html5EmailRegex - The regex which is set to be default right now.\n *\n * @returns Regular expression for email validation.\n */\n public static get defaultRegex(): RegExp {\n return EmailRegex.html5EmailRegex;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Regular expressions to validate passwords.\n */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class PasswordRegex {\n // eslint-disable-next-line max-len\n public static readonly defaultRegex = /^((?=.*[a-z])(?=.*[A-Z])(?=.*\\d)|(?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9])|(?=.*[a-z])(?=.*\\d)(?=.*[^A-Za-z0-9])|(?=.*[A-Z])(?=.*\\d)(?=.*[^A-Za-z0-9]))([A-Za-z\\d@#$%^&*\\-_+=[\\]{}|\\\\:',?/`~'();!]|\\.(?!@)){8,16}$/;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Regular expressions to validate phone number.\n */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class PhoneRegex {\n public static readonly defaultRegex = '^$|^[- +()]*[0-9][- +()0-9]*$';\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 { CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ArrayExtensions } from './extensions/array-extensions';\nimport { IProductInventoryInformation } from './product-inventory-information';\n\n/**\n * Cart line inventory validation result interface.\n */\nexport interface ICartLineInventoryValidationResult {\n /**\n * Define whether the cart lines inventory is valid across multiple cart lines.\n */\n readonly isValid: boolean;\n\n /**\n * Defines the list of product id with invalid inventory.\n */\n readonly productIdWithErrors: number[];\n}\n\n/**\n * Validates inventory across cart lines.\n * @param cartLines - The cart lines.\n * @param productAvailabilities - The product availability collection.\n * @param actionContext - The action context.\n * @param products - The products.\n * @param emailDeliveryModeCode - The emailDeliveryModeCode.\n * @returns True if all product quantity are available, false otherwise.\n */\n// eslint-disable-next-line complexity -- existing code.\nexport function validateCartLinesInventory(\n cartLines: CartLine[],\n productAvailabilities: IProductInventoryInformation[],\n actionContext: IActionContext,\n products?: SimpleProduct[],\n emailDeliveryModeCode?: string | undefined\n): ICartLineInventoryValidationResult {\n const cartLineMap = new Map();\n const defaultCartLineQuantity = 1;\n if (!actionContext.requestContext.app.config.enableStockCheck) {\n return {\n isValid: true,\n productIdWithErrors: []\n };\n }\n const productIdWithErrors = [];\n let isValid = true;\n\n if (ArrayExtensions.hasElements(cartLines) && ArrayExtensions.hasElements(productAvailabilities)) {\n // Consolidate products in different cart lines into single entry with the total cart quantity\n for (const cartLine of cartLines) {\n // Skip validation if is an invoice inline.\n if (cartLine.ProductId && !cartLine.IsInvoiceLine && !cartLine.IsGiftCardLine) {\n if (!cartLineMap.has(cartLine.ProductId)) {\n cartLineMap.set(cartLine.ProductId, cartLine.Quantity ?? defaultCartLineQuantity);\n } else {\n const cartLineTotal = cartLineMap.get(cartLine.ProductId) ?? 0;\n cartLineMap.delete(cartLine.ProductId);\n cartLineMap.set(cartLine.ProductId, cartLineTotal + (cartLine.Quantity ?? defaultCartLineQuantity));\n }\n }\n }\n\n // Hashing product availability object by product ID.\n const productAvailabilityMap = new Map();\n for (const productAvailability of productAvailabilities) {\n if (\n productAvailability.ProductAvailableQuantity.ProductId &&\n !productAvailabilityMap.has(productAvailability.ProductAvailableQuantity.ProductId)\n ) {\n productAvailabilityMap.set(productAvailability.ProductAvailableQuantity.ProductId, productAvailability);\n }\n }\n\n // Compare total quantity with the available quantity from the inventory API, also validate that the product is available.\n for (const productId of Array.from(cartLineMap.keys())) {\n const cartLineQty = cartLineMap.get(productId) ?? defaultCartLineQuantity;\n const productAvailability = productAvailabilityMap.get(productId);\n const availableQuantity = productAvailability?.ProductAvailableQuantity.AvailableQuantity ?? undefined;\n\n // If product is non-stocked or cartLine is electronic delivery, then no inventory check\n const cartLine = cartLines.find(line => line.ProductId === productId);\n const cartLineProduct = products?.find(product => product.RecordId === productId);\n let isStockedItem = true;\n if (cartLineProduct) {\n isStockedItem = !!cartLineProduct.Behavior?.IsStockedProduct;\n }\n const isEmailDelivery =\n cartLine?.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\n\n // If product is non-stocked or cartLine is electronic delivery, then no inventory check\n if (shouldSkipInventoryCheck) {\n continue;\n }\n if (!productAvailability?.IsProductAvailable || (availableQuantity && cartLineQty > availableQuantity)) {\n productIdWithErrors.push(productId);\n isValid = false;\n }\n }\n }\n return {\n isValid,\n productIdWithErrors\n };\n}\n"],"names":["SelectedVariantInput","constructor","productId","channelId","matchingDimensionValues","bypassCache","requestContext","getCacheKey","getCacheObjectType","dataCacheType","this","catalogId","getCatalogId","getSelectedVariantActionDataAction","createObservableDataAction","id","action","async","input","context","_input$matchingDimens","_input$catalogId2","getDimensionValuesFromQuery","url","requestUrl","product","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","_objectSpread","hasUnmatchedDimension","checkIfHasUnmatchedDimensions","Dimensions","map","dimension","matchedTargetDimension","find","targetDimension","DimensionTypeValue","DimensionValue","newImageUrl","generateProductImageUrl","apiSettings","PrimaryImageUrl","fullDimensions","_product$Dimensions","fullDimensionPromises","shippingInventoryConfiguration","createInventoryAvailabilitySearchCriteria","undefined","searchCriteria","RequestedDimensionTypeValue","MatchingDimensionValues","DefaultWarehouseOnly","FilterByChannelFulfillmentGroup","DeliveryModeTypeFilterValue","CatalogId","MasterProductId","RecordId","then","dimensionValues","dimensionValuesWithInventory","Promise","all","getFullDimensions","productVariant","ArrayExtensions","ProductIds","_input$catalogId","variantProductId","variantImageUrl","getProductVariant","matchedTargetDimensionFromApi","selectedProduct","inputData","getSelectedProductIdFromActionInput","Error","Dictionary","_values","_length","_len","arguments","length","entries","Array","_key","forEach","keyValuePair","setValue","key","value","removeValue","hasValue","getValue","getValueWithDefaultValue","defaultValue","isEmpty","clear","getValues","getKeys","Object","keys","getKeyValuePairs","Event","_subscribers","subscribe","instance","push","unsubscribe","instanceId","filter","element","unsubscribeAll","trigger","subscriber","handler","DeliveryMode","InventoryLevels","InventoryLevelValues","getInventoryLevelCodeFromDimensionValue","inventoryLevel","totalAvailable","TotalAvailableInventoryLevelCode","physicalAvailable","PhysicalAvailableInventoryLevelCode","getInventoryLevelCodeFromProductAvailability","productAvailability","displayLabelEnabled","inventoryCode","app","config","inventoryRanges","mapProductInventoryInformation","productsWarehouseInventory","productInventoryInformation","enableStockCheck","physicalProductMap","mapInventoryWithPhysicalBufferEnabled","totalAvailableProductMap","mapInventoryWithTotalAvailableBufferEnabled","productMap","mapInventoryWithThresholdEnabled","productWarehouseInventoryAvailability","ProductId","TotalAvailable","productQty","outOfStockThreshold","productAvailableQuantity","AvailableQuantity","ProductAvailableQuantity","IsProductAvailable","InventLocationId","shouldRenderLabel","productQuantity","_productWarehouseInve","MaximumPurchasablePhysicalAvailableQuantity","PhysicalAvailable","StockLevelCode","StockLevelLabel","PhysicalAvailableInventoryLevelLabel","_productWarehouseInve2","MaximumPurchasableTotalAvailableQuantity","TotalAvailableInventoryLevelLabel","isAggregatedInventory","warehouseAggregation","mapAggregatedProductInventoryInformation","productWarehouseInventoryInformation","_productWarehouseInve3","AggregatedProductInventoryAvailabilities","_product$MaximumPurch","_product$MaximumPurch2","DataAreaId","PhysicalAvailableQuantity","TotalAvailableQuantity","ProductWarehouseInventoryAvailabilities","productIds","isDefaultWareHouse","isFilterByChannelFulfillmentGroup","searchArea","defaultDeliveryMode","deliveryMode","inventoryAvailabilitySearchCriteria","QuantityUnitTypeValue","SearchArea","FinitePromiseQueueError","FinitePromiseQueue","PromiseQueue","maxQueueLength","InvalidMaxQueueLengthPassed","super","_maxQueueLength","promiseBody","totalElementsCount","_queue","_isBusy","shift","reject","ProcessWasDiscardedFromTheQueue","enqueue","PromiseQueueElement","body","resolve","_canProcess","_dequeue","_processElement","_processNext","catch","error","Guid","Random","generateGuid","uuidv4","_guid","EmailRegex","defaultRegex","html5EmailRegex","PasswordRegex","PhoneRegex","validateCartLinesInventory","cartLines","productAvailabilities","actionContext","products","emailDeliveryModeCode","cartLineMap","Map","isValid","productIdWithErrors","cartLine","IsInvoiceLine","IsGiftCardLine","has","_cartLineMap$get","_cartLine$Quantity2","cartLineTotal","get","delete","set","Quantity","_cartLine$Quantity","productAvailabilityMap","from","_cartLineMap$get2","_productAvailability$","cartLineQty","availableQuantity","line","cartLineProduct","isStockedItem","_cartLineProduct$Beha","Behavior","IsStockedProduct","isEmailDelivery"],"sourceRoot":""}